#include <sys/bios.h>
#include "KSFont.h"
#include "KSKey.h"
#include "chuka.h"
#include "data.h"
#include "GameMain.h"

#include "GCursol.h"
#include "GameBall.h"
#include "GChara.h"

extern int g_nGameFinish;
extern int g_nGamePlayer;
extern int g_nTimeOver;
extern int g_nGameFirstWork;


int g_nCursolX = 0;	/* カーソルのxパネル座標(0-6) */
int g_nCursolY = 0;	/* カーソルのyパネル座標(0-5) */
int g_nCursolAni = 0;

int g_nTargetX = 0;	/* ターゲットのxパネル座標(0-6) */
int g_nTargetY = 5;	/* ターゲットのyパネル座標(0-5) */
int g_nTargetAni = 0;

/* タイム用変数 */
int g_nTimeXBase[2] = { 184, 16 };
int g_nTimeY = 0;
int g_nTimeCount = 0;
int g_nTimeOver = 0;



/*=================================================================*/
/* Cursol・Target初期化 */
/*=================================================================*/
int CGameCursol_Init( void )
{
	/* 変数初期化 */
	g_nCursolX = 3;
	g_nCursolY = -1;
	g_nCursolAni = 0;
	g_nTargetX = 3;
	g_nTargetY = 5;
	g_nTargetAni = 0;

	/* カーソルのスプライト割当 */
	KSSpriteSet( 0,  9+g_nCursolAni, 56+16*g_nCursolX, 32+16*g_nCursolY, 1 );

	/* ターゲットのスプライト割当 */
	KSSpriteSet( 1, 13+g_nTargetAni, 56+16*g_nTargetX, 32+16*g_nTargetY, 1 );

	/* 正常終了 */
	return FUNC_TRUE;
}



/*=================================================================*/
/* Cursol・Target移動 */
/*=================================================================*/
int CGameCursol_Move( void )
{
	/* カーソル移動処理 */
	if( g_nTimeOver == 0 ){
		g_nCursolX += KSKeyGetX();
	}else{
		g_nCursolX += 1;
	}
	if( g_nCursolX < 0 ) g_nCursolX = 6;
	if( g_nCursolX > 6 ) g_nCursolX = 0;

	/* ターゲット同調移動処理 */
	g_nTargetX = g_nCursolX;
	for( g_nTargetY=5; g_nTargetY>=0; g_nTargetY-- ){
		if( CGameBall_GetBallColor( g_nTargetX, g_nTargetY ) == 0 ) break;
	}

	/* カーソルのスプライト座標変更 */
	KSSpriteMove( 0, 56+g_nCursolX*16, 32+16*g_nCursolY );

	/* ターゲットのスプライト座標変更 */
	KSSpriteMove( 1, 56+g_nTargetX*16, 32+16*g_nTargetY );

	/* 正常終了 */
	return FUNC_TRUE;
}



/*=================================================================*/
/* ボール配置 */
/*=================================================================*/
int CGameCursol_SetBall( void )
{
	int m_nRet;

	/* ボール配置 */
	if( KSKeyGet( KEY_A, 1 ) || g_nTimeOver != 0 ){
		m_nRet = CGameBall_Set( g_nTargetX, g_nTargetY, 1+g_nGamePlayer );
		if( m_nRet == FUNC_TRUE ){
			/* 勝敗判定 */
			CGameMain_Judge( g_nTargetX, g_nTargetY, g_nGamePlayer );
			/* 先入珠数のチェック */
			if( g_nGameFirstWork > 1 ){
				g_nGameFirstWork--;
			}else{
				/* 人口知能無効化 */
				CGameAI_SetMode( g_nGamePlayer, 0 );
				/* プレイヤー交代 */
				g_nGamePlayer ^= 1;
				/* 人口知能有効化 */
				CGameAI_SetMode( g_nGamePlayer, 1 );
			}
			/* タイムチェンジ */
			CGameTime_Change();
		}else{
			return FUNC_FALSE;
		}
	}

	/* 正常終了 */
	return FUNC_TRUE;
}



/*=================================================================*/
/* Cursol・Target表示 */
/*=================================================================*/
int CGameCursol_View( void )
{
	/* カーソルのアニメーション */
	g_nCursolAni++;
	if( g_nCursolAni > 3 ) g_nCursolAni = 0;
	KSSpriteChange( 0, 9+g_nCursolAni );

	/* ターゲットのアニメーション */
	g_nTargetAni++;
	if( g_nTargetAni > 7 ) g_nTargetAni = 0;
	KSSpriteChange( 1, 13+g_nTargetAni );

	/* 正常終了 */
	return FUNC_TRUE;
}






/*=================================================================*/
/* タイム初期化 */
/*=================================================================*/
int CGameTime_Init( void )
{
	/* 変数初期化 */
	g_nTimeY = 32;
	g_nTimeCount = 0;
	g_nTimeOver = 0;

	/* タイムのスプライト割当 */
	KSSpriteSet( 2,  50, g_nTimeXBase[g_nGamePlayer], g_nTimeY, 0 );

	/* 正常終了 */
	return FUNC_TRUE;
}



/*=================================================================*/
/* タイム処理 */
/*=================================================================*/
int CGameTime_Action( void )
{
	/* タイムの加算 */
	g_nTimeCount++;
	if( g_nTimeCount == 15*9 ){
		g_nTimeOver = 1;
	}

	/* 正常終了 */
	return FUNC_TRUE;
}



/*=================================================================*/
/* タイムチェンジ処理 */
/*=================================================================*/
int CGameTime_Change( void )
{
	/* タイム変数初期化 */
	g_nTimeCount = 0;
	g_nTimeOver = 0;

	/* タイムのスプライト座標変更 */
	if( g_nGameFinish == 0 ){
		KSSpriteMove( 2, g_nTimeXBase[g_nGamePlayer], g_nTimeY );
	}else{
		KSSpriteMove( 2, g_nTimeXBase[g_nGamePlayer], -24 );
	}


	/* 正常終了 */
	return FUNC_TRUE;
}



/*=================================================================*/
/* タイム表示 */
/*=================================================================*/
int CGameTime_View( void )
{
	KSSpriteChange( 2, 50 + g_nTimeCount / 15 );

	/* 正常終了 */
	return FUNC_TRUE;
}


