/********************
	kn_mask.h
 ********************/
#ifndef _KN_MASK_H_
#define _KN_MASK_H_

/*******************************************************
	DEFINE
*******************************************************/
/* MASK */
typedef struct {
	short	mode;
	short	stat;
	short	disp;
	short	flag;
	short	count;
	short	startTime, time, endTime;
	short	r, g, b, a;
	short	x, y;
	short	pat, atime;
	short	pri;
	short	wipeFlag;
} sMask;

/*******************************************************
	Mask
*******************************************************/

/* Mask Mode */
#define MASK_MODE_NOP			0
#define MASK_MODE_FADE_OUT		1
#define MASK_MODE_FADE_IN		2
#define MASK_MODE_WHITE_OUT		3
#define MASK_MODE_WIPE_IN		4
#define MASK_MODE_WIPE_OUT		5
#define MASK_MODE_WIPE_IN_LOW		6			/* 優先順位低いバージョン */
#define MASK_MODE_WHITE_IN		7

/* WIPE */
#define WIPE_KIND_ZIGZAG		0
#define WIPE_KIND_MOVIE			1
#define WIPE_KIND_MOVIE2		2

/* Move Mask Flag */
#define MASK_FLAG_NOP		0
#define MASK_FLAG_END		1
#define MASK_FLAG_MOVE		2

/* Priority */
#define MASK_PRI_LOW		0
#define MASK_PRI_HIGH		1

/* --- 何もしない --- */
/* 状態 */
#define MASK_NOP_STAT_NOP	0

/* --- フェードイン --- */
/* 状態 */
#define MASK_FADE_OUT_STAT_SWAIT	0
#define MASK_FADE_OUT_STAT_MOVE		1
#define MASK_FADE_OUT_STAT_EWAIT	2

/* 標準フェードイン時間 */
#define MASK_FADE_OUT_COUNT	4

/* --- フェードアウト --- */
/* 状態 */
#define MASK_FADE_IN_STAT_SWAIT		0
#define MASK_FADE_IN_STAT_MOVE		1
#define MASK_FADE_IN_STAT_EWAIT		2

/* 標準フェードアウト時間 */
#define MASK_FADE_IN_COUNT	4

/* --- ホワイトイン --- */
/* 状態 */
#define MASK_WHITE_IN_STAT_SWAIT	0
#define MASK_WHITE_IN_STAT_MOVE		1
#define MASK_WHITE_IN_STAT_EWAIT	2

/* 標準ホワイトイン時間 */
#define MASK_WHITE_IN_COUNT	7

/* --- ホワイトアウト --- */
/* 状態 */
#define MASK_WHITE_OUT_STAT_SWAIT	0
#define MASK_WHITE_OUT_STAT_MOVE	1
#define MASK_WHITE_OUT_STAT_EWAIT	2

/* 標準ホワイトアウト時間 */
#define MASK_WHITE_OUT_COUNT	7

/* --- ワイプイン --- */
#define MASK_WIPE_IN_STAT_SWAIT		0
#define MASK_WIPE_IN_STAT_MOVE		1
#define MASK_WIPE_IN_STAT_EWAIT		2
/* INIT POSITION */
#define MASK_WIPE_IN_INIT_X			70
#define MASK_WIPE_IN_INIT_Y			65
/* END POSITION */
#define MASK_WIPE_IN_END_X			250
/* MOVE VELOCITY */
#define MASK_WIPE_ZIGZAG_IN_MOVE_VX	20
#define MASK_WIPE_MOVIE_IN_MOVE_VX	20

/* --- ワイプアウト --- */
#define MASK_WIPE_OUT_STAT_SWAIT	0
#define MASK_WIPE_OUT_STAT_MOVE		1
#define MASK_WIPE_OUT_STAT_EWAIT	2
/* INIT POSITION */
#define MASK_WIPE_OUT_INIT_X		-265
#define MASK_WIPE_OUT_INIT_Y		65
/* END POSITION */
#define MASK_WIPE_OUT_END_X			-85
/* MOVE VELOCITY */
#define MASK_WIPE_ZIGZAG_OUT_MOVE_VX	20
#define MASK_WIPE_MOVIE_OUT_MOVE_VX		20

/*******************************************************************************
	VARIABLE
*******************************************************************************/
extern sMask mMask;
extern short maskPri;


/*******************************************************************************
	FUNCTION
*******************************************************************************/
/* マスク */
extern void		initMoveMask( int mode, uint time, uint start_time );
extern void		moveMask( void );
extern Gfx 		*makeMaskGlist( Gfx *gp );
extern Gfx 		*drawRectangleGlist( Gfx *gp, uint ulx, uint uly, uint lrx, uint lry,
							 uint r, uint g, uint b, uint a );
extern Gfx 		*makeInitRectangleGlist( Gfx *gp, uint r, uint g, uint b, uint a );
extern Gfx 		*makeRectangleGlist( Gfx *gp, int ulx, int uly, int lrx, int lry );

#endif
