/*
	記録消し
*/
#include "ot_header.h"
#include "ot_newton.h"
#include "ot_sea.h"

#include "endefine.h"
#include "enrecord.h"

//#include "sot_world.h"

#include "kn_def.h"
#include "kn_main.h"
#include "kn_dynamic.h"
#include "kn_font.h"
#include "kn_mask.h"
#include "kn_gword.h"
#include "kn_config.h"
#include "kn_cfgerase.h"
#include "kn_message.h"

/*******************************************************
	DUMMY
*******************************************************/
static int dummy;
/*******************************************************
	FUNCTION
*******************************************************/
static Gfx 	*makeCfgEraseGlist( Gfx *gp );
static void	changeGameModeCfgErase( void );

/*******************************************************
	VARIABLE
*******************************************************/
/* --- 外部参照 --- */
/* Display List */
extern Gfx 		dlConfigBG[];
/* コントローラー */
extern sKnPad	mKnPad[];

/* --- 内部 --- */
/* 選択モード番号 */
static int		selModeNum = 0;
/* 選択コース番号 */
static int		selCourseNum = 0;
/* OK or CANCEL */
static int		selOK = CFGERASE_CANCEL;

/* メッセージ番号 */
static int gmesgNumCfgEraseMode[] = {
	GMESG_TIME12,
	GMESG_SCORE12,
	GMESG_END12,
};
static int gmesgNumCfgEraseOK[] = {
	GMESG_OK12,
	GMESG_CANCEL12,
};

#if (SW_KN_LANGUAGE == KN_JP || SW_KN_LANGUAGE == KN_ZH)

static int dxCfgEraseMode[] = {
	0,
	0,
	0,
};
static int dxCourseNameMesg[] = {
	0,
	0,
	7,
	0,
	7,
	0,
	-1,
	-1,
	3,
};

#elif (SW_KN_LANGUAGE == KN_US)

static int dxCfgEraseMode[] = {
	0,
	-6,
	2,
};
static int dxCourseNameMesg[] = {
	0,
	1,
	5,
	-10,
	5,
	9,
	1,
	-10,
	-4,
};

#elif (SW_KN_LANGUAGE == KN_EU)

static int dxCfgEraseMode[] = {
	0,
	-6,
	2,
};

static int dxCfgEraseMode_Ge[] = {
	4,
	-6,
	2,
};

static int dxCourseNameMesg[] = {
	0,
	1,
	5,
	-10,
	5,
	9,
	1,
	-10,
	-4,
};

#endif

/*******************************************************
	DEFINE
*******************************************************/
#if (SW_KN_LANGUAGE == KN_JP || SW_KN_LANGUAGE == KN_ZH)

#define DX_ERASE_REC18	68
#define SX_OKCANCEL12	93
#define DX_OKCANCEL12	96
#define DX_COURSENAME12		38

#elif (SW_KN_LANGUAGE == KN_US)

#define DX_ERASE_REC18	24
#define SX_OKCANCEL12	74
#define DX_OKCANCEL12	97
#define DX_COURSENAME12		47

#elif (SW_KN_LANGUAGE == KN_EU)

#define DX_ERASE_REC18	24
#define SX_OKCANCEL12	74
#define DX_OKCANCEL12	97
#define DX_COURSENAME12		47

#define DX_ERASE_REC18_GE	47
#define SX_OKCANCEL12_GE	70
#define DX_OKCANCEL12_GE	95

#endif


/* ====================================================================== */
/*
	メイン
*/
Gfx *makeMainGlistCfgErase( Gfx *gp )
{
	if( gameModeChangeFlag ) {
		gameModeChangeFlag = 0;
		if( game_mode == GM_CFGERASE ) {
			gp = clearAllFBuffer( gp );
			return( gp );
		}
	}

	/* ディスプレイリストの作成 */
	player_index = 0;
	gp = makeCfgEraseGlist( gp );

	/* ゲームモードの変更 */
	if( game_mode == GM_CFGERASE ) changeGameModeCfgErase();
	else {
		if( mMask.flag == MASK_FLAG_END ) {
			initMainGlistConfig();
		}		
	}

	return( gp );
}

/* ====================================================================== */
/*
	描画
*/
static Gfx	*makeCfgEraseGlist( Gfx *gp )
{
	register int	i, sx, dx, *dx_p;
	register uint	font_flag;
	
	/* --- ＢＧ --- */
	gSPMatrix( gp++, &(rspKnDynamic.mtxFontProj),
			   G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH );
	gSPMatrix( gp++, &automatic.e_MT,
			   G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH );
	gSPDisplayList( gp++, dlConfigBG );

	/* --- 枠 --- */
	gSPDisplayList( gp++, dlInitWaku );
	for( i = 0 ; i < CFGERASE_MAX_MODE_NUM ; i ++ ) {
		gp = makeWakuGlist( gp, WAKU_KIND_256x32,
				    DISPLAY_X1 + 20 + i * 89, DISPLAY_Y1 + 38, 86, 16 );
	}
	for( i = 0 ; i < CFGERASE_MAX_COURSE_NUM ; i ++ ) {
		gp = makeWakuGlist( gp, WAKU_KIND_256x32,
				    DISPLAY_X1 + 20 + 133 * ( i / 5 ), DISPLAY_Y1 + 65 + 18 * ( i % 5 ), 131, 16 );
	}
	gp = makeWakuGlist( gp, WAKU_KIND_256x32, DISPLAY_X1 + 58 , DISPLAY_Y1 + 161, 90, 16 );
	gp = makeWakuGlist( gp, WAKU_KIND_256x32, DISPLAY_X1 + 156, DISPLAY_Y1 + 161, 90, 16 );

	/* --- 文字表示 --- */
#if (SW_KN_LANGUAGE == KN_EU)
		if( euLanguage == EL_ENGLISH ) dx = DX_ERASE_REC18;
		else dx = DX_ERASE_REC18_GE;
#else
		dx = DX_ERASE_REC18;
#endif
	gp = makeInitStrGlist( gp, FONT_FLAG_NORMAL, 255,255,255, 255,255,255, 255,255,255, 255,255,255 );
	gp = makeGameMessageGlist( gp, GMESG_KIND_18, GMESG_ERASE_REC18,
							   DISPLAY_X1 + dx, DISPLAY_Y1 + 9, 0, 0 );
	gp = makeGameMessageGlist( gp, GMESG_KIND_10, GMESG_A10,
							   DISPLAY_X1 + 79, DISPLAY_Y1 + 186, 0, 0 );
	gp = makeGameMessageGlist( gp, GMESG_KIND_10, GMESG_B10,
							   DISPLAY_X1 + 161, DISPLAY_Y1 + 186, 0, 0 );
#if (SW_KN_LANGUAGE == KN_EU)
	if( euLanguage == EL_ENGLISH ) dx_p = dxCfgEraseMode;
	else dx_p = dxCfgEraseMode_Ge;
#else
	dx_p = dxCfgEraseMode;
#endif
	for( i = 0 ; i < CFGERASE_MAX_MODE_NUM ; i ++ ) {
		if( i == selModeNum ) font_flag = FONT_FLAG_FLASH_3;
		else  font_flag = FONT_FLAG_NORMAL;
		gp = makeInitStrGlist( gp, font_flag, 255,255,255, 255,255,255, 255,255,255, 255,255,255 );
		gp = makeGameMessageGlist( gp, GMESG_KIND_12, gmesgNumCfgEraseMode[i],
				DISPLAY_X1 + 20 + 24 + 89 * i + *(dx_p + i), DISPLAY_Y1 + 38 + 3, 0, 0 );
	}
	for( i = 0 ; i < CFGERASE_MAX_COURSE_NUM ; i ++ ) {
		if( gameModeSeq == GM_SEQ_CFGERASE_SEL_MODE ) {
			if( selModeNum == CFGERASE_MODE_TIME ) {
				if( i == 0 )  font_flag = FONT_FLAG_COLOR;
				else font_flag = FONT_FLAG_NORMAL;
			}
			else font_flag = FONT_FLAG_NORMAL;
		}
		else {
			if( selModeNum == CFGERASE_MODE_TIME ) {
				if( i == 0 )  font_flag = FONT_FLAG_COLOR;
				else if( i == selCourseNum ) font_flag = FONT_FLAG_FLASH_3;
				else  font_flag = FONT_FLAG_NORMAL;
			}
			else {
				if( i == selCourseNum ) font_flag = FONT_FLAG_FLASH_3;
				else  font_flag = FONT_FLAG_NORMAL;
			}
		}
		gp = makeInitStrGlist( gp, font_flag,
							   FONT_COLOR_TURN_OFF, FONT_COLOR_TURN_OFF, FONT_COLOR_TURN_OFF,
							   255,255,255, 255,255,255, 255,255,255 );
		gp = makeGameMessageGlist( gp, GMESG_KIND_12, courseNameTable12[courseNumConvTable[i]],
	  			DISPLAY_X1 + DX_COURSENAME12 + 133 * ( i / 5 ) + dxCourseNameMesg[courseNumConvTable[i]],
							DISPLAY_Y1 + 65 + 3 + ( i % 5 ) * 18, 0, 0 );
	}
	for( i = 0 ; i < 2 ; i ++ ) {
		if( gameModeSeq == GM_SEQ_CFGERASE_OK ) {
			if( i == selOK ) font_flag = FONT_FLAG_FLASH_3;
			else font_flag = FONT_FLAG_NORMAL;
		}
		else font_flag = FONT_FLAG_COLOR;
		gp = makeInitStrGlist( gp, font_flag,
							   FONT_COLOR_TURN_OFF, FONT_COLOR_TURN_OFF, FONT_COLOR_TURN_OFF,
							   255,255,255, 255,255,255, 255,255,255 );
#if (SW_KN_LANGUAGE == KN_EU)
		if( euLanguage == EL_ENGLISH ) {
			sx = SX_OKCANCEL12;
			dx = DX_OKCANCEL12;
		}
		else {
			sx = SX_OKCANCEL12_GE;
			dx = DX_OKCANCEL12_GE;
		}
#else
		sx = SX_OKCANCEL12;
		dx = DX_OKCANCEL12;
#endif
		gp = makeGameMessageGlist( gp, GMESG_KIND_12, gmesgNumCfgEraseOK[i],
				  			DISPLAY_X1 + sx + dx * i, DISPLAY_Y1 + 164, 0, 0 );
	}

	return( gp );
}
/* ======================================================================================= */
/*
	次のモードへ
*/
static void initMainGlistCfgErase2Next( int next_game_mode )
{
	/* ゲームモード */
	gameModeOld = game_mode;
	gameModeNext = next_game_mode;
	game_mode = GM_CFGERASE2NEXT;
	game_stat = GAME_STAT_CFGERASE;
	gameModeChangeFlag = 1;
	gameModeSeq = 0;
	gameModeCount = 0;
	vram_mode = VM_NORMAL;
	Graph_timing_req = GRAPH_TIMING_CFGERASE;

	/* プレイヤー制御変数 */

	/* 初期化関数 */
	initMoveMask( MASK_MODE_FADE_OUT, MASK_FADE_OUT_COUNT, 0 );

	/* 記録画面用カメラ */

	/* ホバー制御フラグ */
	/* シグナル制御 */
}
/* ====================================================================== */
/*
	ゲームモードの変更
*/
static void changeGameModeCfgErase( void )
{
	register int	se_flag;

	se_flag = 0;	
	/* 決定ボタン */
	if( mKnPad[KN_PAD_1P].pad.trig & BUTTON_ARG_ANY ) {
		switch( gameModeSeq ) {
			case GM_SEQ_CFGERASE_SEL_MODE:
				se_flag = 1;
				if( selModeNum == CFGERASE_MODE_END ) initMainGlistCfgErase2Next( GM_CONFIG );
				else if( selModeNum == CFGERASE_MODE_TIME ) {
					selCourseNum = 1;
					gameModeSeq = GM_SEQ_CFGERASE_SEL_COURSE;
				}
				else {
					selCourseNum = 0;
					gameModeSeq = GM_SEQ_CFGERASE_SEL_COURSE;
				}
				break;
			case GM_SEQ_CFGERASE_SEL_COURSE:
				gameModeSeq = GM_SEQ_CFGERASE_OK;
				selOK = CFGERASE_CANCEL;
				#if SOUND_SW
				Na_Sys2Sound( NA_SYS2_CONFIRM );
				#endif
				break;
			case GM_SEQ_CFGERASE_OK:
				se_flag = 1;
				gameModeSeq = GM_SEQ_CFGERASE_SEL_COURSE;
				if( selOK == CFGERASE_OK ) {
					se_flag = 2;
					if( selModeNum == CFGERASE_MODE_TIME ) {
						EepClearDataRecord( courseNumConvTable[selCourseNum] );
					}
					else {
						EepClearDataScore( courseNumConvTable[selCourseNum] );
					}
				}
				break;
		}
		#if SOUND_SW
		if( se_flag == 1 ) Na_SystemSound( NA_SYS_DECIDE, 0 );
		else if( se_flag == 2 ) Na_SystemSound( NA_SYS_DECIDE2, 0 );
		#endif
	}
	/* キャンセルボタン */
	else if( mKnPad[KN_PAD_1P].pad.trig & BUTTON_ARG_CANCEL ) {
		switch( gameModeSeq ) {
			case GM_SEQ_CFGERASE_SEL_MODE:
				se_flag = 1;
				initMainGlistCfgErase2Next( GM_CONFIG );
				break;
			case GM_SEQ_CFGERASE_SEL_COURSE:
				se_flag = 1;
				gameModeSeq = GM_SEQ_CFGERASE_SEL_MODE;
				break;
			case GM_SEQ_CFGERASE_OK:
				se_flag = 1;
				gameModeSeq = GM_SEQ_CFGERASE_SEL_COURSE;
				break;
		}
		#if SOUND_SW
		if( se_flag ) Na_SystemSound( NA_SYS_CANCEL, 0 );
		#endif
	}
	/* 上ボタン */
	else if( mKnPad[KN_PAD_1P].pad.trig & BUTTON_ARG_UP ) {
		switch( gameModeSeq ) {
			case GM_SEQ_CFGERASE_SEL_COURSE:
				se_flag = 1;
				selCourseNum --;
				if( selModeNum == CFGERASE_MODE_TIME ) {
					if( selCourseNum < 1 ) selCourseNum = CFGERASE_MAX_COURSE_NUM - 1;
				}
				else {
					if( selCourseNum < 0 ) selCourseNum = CFGERASE_MAX_COURSE_NUM - 1;
				}
				break;
		}
		/* SE */
		#if SOUND_SW
		if( se_flag ) Na_SystemSound( NA_SYS_CURMOVE, 0 );
		#endif
	}
	/* 下ボタン */
	else if( mKnPad[KN_PAD_1P].pad.trig & BUTTON_ARG_DOWN ) {
		switch( gameModeSeq ) {
			case GM_SEQ_CFGERASE_SEL_COURSE:
				se_flag = 1;
				selCourseNum ++;
				if( selModeNum == CFGERASE_MODE_TIME ) {
					if( selCourseNum >= CFGERASE_MAX_COURSE_NUM ) selCourseNum = 1;
				}
				else {
					if( selCourseNum >= CFGERASE_MAX_COURSE_NUM ) selCourseNum = 0;
				}
				break;
		}
		/* SE */
		#if SOUND_SW
		if( se_flag ) Na_SystemSound( NA_SYS_CURMOVE, 0 );
		#endif
	}
	/* 左ボタン */
	else if( mKnPad[KN_PAD_1P].pad.trig & BUTTON_ARG_LEFT ) {
		switch( gameModeSeq ) {
			case GM_SEQ_CFGERASE_SEL_MODE:
				se_flag = 1;
				selModeNum --;
				if( selModeNum < 0 ) selModeNum = CFGERASE_MAX_MODE_NUM - 1;
				break;
			case GM_SEQ_CFGERASE_SEL_COURSE:
				se_flag = 1;
				if( selModeNum == CFGERASE_MODE_TIME && selCourseNum == 5 ) break;
				else if( selCourseNum == 4 ) break;
				selCourseNum -= 5;
				if( selCourseNum < 0 ) selCourseNum += (CFGERASE_MAX_COURSE_NUM+1);
				break;
			case GM_SEQ_CFGERASE_OK:
				se_flag = 1;
				selOK --;
				if( selOK < 0 ) selOK = CFGERASE_CANCEL;
				break;
		}
		/* SE */
		#if SOUND_SW
		if( se_flag ) Na_SystemSound( NA_SYS_CURMOVE, 0 );
		#endif
	}
	/* 右ボタン */
	else if( mKnPad[KN_PAD_1P].pad.trig & BUTTON_ARG_RIGHT ) {
		switch( gameModeSeq ) {
			case GM_SEQ_CFGERASE_SEL_MODE:
				se_flag = 1;
				selModeNum ++;
				if( selModeNum == CFGERASE_MAX_MODE_NUM ) selModeNum = 0;
				break;
			case GM_SEQ_CFGERASE_SEL_COURSE:
				se_flag = 1;
				if( selModeNum == CFGERASE_MODE_TIME && selCourseNum == 5 ) break;
				else if( selCourseNum == 4 ) break;
				selCourseNum += 5;
				if( selCourseNum >= CFGERASE_MAX_COURSE_NUM ) selCourseNum -= (CFGERASE_MAX_COURSE_NUM+1);
				break;
			case GM_SEQ_CFGERASE_OK:
				se_flag = 1;
				selOK ++;
				if( selOK > CFGERASE_CANCEL ) selOK = CFGERASE_OK;
				break;
		}
		/* SE */
		#if SOUND_SW
		if( se_flag ) Na_SystemSound( NA_SYS_CURMOVE, 0 );
		#endif
	}
}
