mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-28 17:58:09 +03:00
138 lines
3.5 KiB
C
138 lines
3.5 KiB
C
|
|
#ifndef __SPRITE_H__
|
|
#define __SPRITE_H__
|
|
|
|
#include "portab.h"
|
|
#include "surface.h"
|
|
#include "graphics.h"
|
|
|
|
#define DEFAULT_UPDATE nt_sp_draw
|
|
|
|
|
|
#define SPRITEMAX 20
|
|
#define SPNO_WALL 0 // 壁紙
|
|
#define SPNO_SCENERY 1 // 背景
|
|
#define SPNO_TACHI_L 2 // 立ち絵左
|
|
#define SPNO_TACHI_M 3 // 立ち絵中央
|
|
#define SPNO_TACHI_R 4 // 立ち絵右
|
|
#define SPNO_MSGBG 5 // 文字下地
|
|
#define SPNO_MSGFRAME_BG 6 // メッセージウィンド枠
|
|
#define SPNO_MSGFRAME_FG 7 // メッセージ文字描画キャンバス
|
|
#define SPNO_FACE 11 // 人物顔CG
|
|
#define SPNO_MSG_KEYANIM 12 // メッセージキー入力アニメーション
|
|
#define SPNO_MSG_ICON_MUTE 13 // メッセージウィンドアイコン
|
|
|
|
#define CGMAX 65536
|
|
// 0-9999: reserve for Link CG
|
|
// 2051: メッセージウィンド枠CG
|
|
#define CGNO_MSGFRAME_LCG 2051
|
|
// 4017: メッセージウィンドで声をmuteにするCG
|
|
#define CGNO_MSGFRAME_NOVICE_LCG 4017
|
|
// 4018: メッセージウィンドのアイコンにマウスが重なったときのCG
|
|
#define CGNO_MSGFRAME_ICONREV_LCG 4018
|
|
// 4034: キー入力を促すアニメーションCG
|
|
#define CGNO_MSGHAK_LCG 4034
|
|
|
|
// 10000: メッセージウィンドでのキー待ちアニメ その1
|
|
#define CGNO_MSGHAK_1 10000
|
|
// 10001: メッセージウィンドでのキー待ちアニメ その2
|
|
#define CGNO_MSGHAK_2 10001
|
|
// 10002: 文字下地CG
|
|
#define CGNO_MSGFR_BG 10002
|
|
|
|
|
|
// CG_XX で作るCGの種類
|
|
enum cgtype {
|
|
CG_NOTUSED = 0,
|
|
CG_LINKED = 1,
|
|
CG_SET = 2,
|
|
CG_REVERSE = 3,
|
|
CG_STRETCH = 4
|
|
};
|
|
|
|
// cgに関する情報
|
|
struct _cginfo {
|
|
enum cgtype type; // CGの種類, 0: 未使用, 1:リンクされている, ...
|
|
int no; // CGの番号
|
|
surface_t *sf; // CG本体
|
|
int refcnt; // 参照カウンタ。0になったら開放してもよい。
|
|
};
|
|
typedef struct _cginfo cginfo_t;
|
|
|
|
|
|
enum spritetype {
|
|
SPRITE_NORMAL = 0,
|
|
SPRITE_ANIME = 5,
|
|
SPRITE_MSG = 100,
|
|
SPRITE_WP,
|
|
SPRITE_NONE = -1
|
|
};
|
|
|
|
struct _sprite {
|
|
enum spritetype type;
|
|
|
|
int no;
|
|
|
|
MyDimension cursize;
|
|
|
|
cginfo_t *curcg;
|
|
cginfo_t *cg1, *cg2, *cg3;
|
|
|
|
boolean show;
|
|
|
|
int blendrate;
|
|
|
|
MyPoint loc;
|
|
|
|
MyPoint cur;
|
|
|
|
int (* update)(struct _sprite *sp, MyRectangle *updatearea);
|
|
|
|
union {
|
|
struct {
|
|
int interval;
|
|
int startttime;
|
|
int npat;
|
|
unsigned int tick;
|
|
} anime;
|
|
|
|
struct {
|
|
surface_t *canvas;
|
|
MyPoint dspcur;
|
|
} msg;
|
|
} u;
|
|
};
|
|
|
|
typedef struct _sprite sprite_t;
|
|
|
|
|
|
/* in nt_sprite.c */
|
|
extern sprite_t *nt_sp_new(int no, int cg1, int cg2, int cg3, int type);
|
|
extern sprite_t *nt_sp_msg_new(int no, int x, int y, int width, int height);
|
|
extern void nt_sp_free(sprite_t *sp);
|
|
extern void nt_sp_set_show(sprite_t *sp, boolean show);
|
|
// extern void nt_sp_set_cg(sprite_t *sp, int no);
|
|
extern void nt_sp_set_loc(sprite_t *sp, int x, int y);
|
|
|
|
/* in nt_sprite_update.c */
|
|
extern int nt_sp_update_clipped();
|
|
extern int nt_sp_update_all(boolean syncscreen);
|
|
extern int nt_sp_updateme(sprite_t *sp);
|
|
extern int nt_sp_updateme_part(sprite_t *sp, int x, int y, int w, int h);
|
|
extern void nt_sp_add_updatelist(sprite_t *sp);
|
|
extern void nt_sp_remove_updatelist(sprite_t *sp);
|
|
extern int nt_sp_draw_wall(sprite_t *sp, MyRectangle *r);
|
|
extern void nt_sp_clear_updatelist(void);
|
|
|
|
/* in nt_sprite_draw.c */
|
|
extern int nt_sp_draw(sprite_t *sp, MyRectangle *r);
|
|
extern int nt_sp_draw2(sprite_t *sp, cginfo_t *cg, MyRectangle *r);
|
|
extern void nt_sp_draw_dmap(void* data, void* userdata);
|
|
extern int nt_sp_draw_scg(sprite_t *sp, MyRectangle *r);
|
|
|
|
/* in nt_sprite_eupdate.c */
|
|
extern int nt_sp_eupdate(int type, int time, int cancel);
|
|
|
|
|
|
#endif /* __SPRITE_H__ */
|