tile.h 2.08 KB
/*
 *  NINTENDO64 SAMPLE PROGRAM
 *
 *  FILE : tile.h
 *
 *  Copyright (C) 1997, NINTENDO Co,Ltd.
 */


#define  TILES    16
#define  X_TILES  4
#define  Y_TILES  4

#define  TILE_WD  128
#define  TILE_HT  96

#define  SUBTILES    6
#define  X_SUBTILES  2
#define  Y_SUBTILES  3

#define  SUBTILE_WD  64
#define  SUBTILE_HT  32

#define  SUBTILE_SIZE  4096

#define  ORIGIN_X  64
#define  ORIGIN_Y  48

#define  MOVE_FRAMES  96   /* タイルの移動に要するフレーム数 */

#define  FRAC_CONST  4


/* タイル構造体 */
typedef  struct TILE_STATE_s {
  struct  TILE_STATE_s  *next;  /* 一方向リスト */

  uObjSprite  *tileSprite[SUBTILES];  /* タイル用スプライト構造体 */
  uObjTxtr    *tileTxtr  [SUBTILES];  /* タイル用テクスチャ構造体 */
  uObjSubMtx   tileMtx[2];            /* タイル用マトリクス構造体 */

  u8  id;  /* タイル ID 
	      --- --- --- ---
	     | 0 | 1 | 2 | 3 |
	      --- --- --- ---
	     | 4 | 5 | 6 | 7 |
	      --- --- --- ---
	     | 8 | 9 | 10| 11|
	      --- --- --- ---
	     | 12| 13| 14| 15| 
	      --- --- --- ---  */

  u8  shade_flag;  /* 反転表示用フラグ */

  f32  dest_x;
  f32  dest_y;  /* タイルの移動先 */

  f32  delta_x;
  f32  delta_y;  /* タイルの移動速度 */

  f32  loc_x;
  f32  loc_y;  /* タイルの位置 */

}  TILE_STATE;


/* ONE タイルスプライト構造体 */
typedef  struct  {
  uObjSprite  *subtiles[SUBTILES];
}  ONE_TILE_SPRITE;


/* ONE タイルテクスチャ構造体 */
typedef  struct  {
  uObjTxtr  *subtiles[SUBTILES];
}  ONE_TILE_TEXTURE;


/* ALL タイルテクスチャ構造体 */
typedef  struct  {
  ONE_TILE_TEXTURE  *tiles[TILES];
}  ALL_TILES_TEXTURE;


/* タイル構造体の初期化 */
void  tileInit(TILE_STATE *, TILE_STATE *, ONE_TILE_SPRITE *, ALL_TILES_TEXTURE *);

/* タイルノードのサーチ */
s8  tileSearch(TILE_STATE *, u8 , TILE_STATE **, TILE_STATE **);

/* タイルノードのスワップ */
void  tileSwap(TILE_STATE *, u8, u8);

/* タイルの移動前処理 */
void  tilePreMove(TILE_STATE *, u8, u8);

/* タイルの移動 */
void  tileMove(TILE_STATE *, u8, u8);

/* タイルの移動後処理 */
void  tileAfterMove(TILE_STATE *, u8);

/* タイルの描画 */
Gfx  *tileDraw(Gfx *, TILE_STATE *, u8);