Files
kichikuou_xsystem35-sdl2/modules/NIGHTDLL/sprite.h
T

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__ */