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

CGameBall GameBall[BASE_X][BASE_Y];



/*=================================================================*/
/* ボールの初期化 */
/*=================================================================*/
int CGameBall_Init( void )
{
	CGameBall far *pGB;
	int x, y;

	pGB = (CGameBall*)GameBall;
	for( y=0; y<6; y++ ){
		for( x=0; x<7; x++ ){
			pGB->m_nMode = 0;			/* 未使用 */
			pGB->m_nCount = 0;
			pGB->m_nBallColor = 0;		/* 該当なし */
			pGB->m_nPT = 0;
			pGB->m_nAni = 0;
			pGB->m_nAniCount = 0;
			pGB->m_nZX = 56 + 16*x;
			pGB->m_nZY = 32 + 16*y;
			pGB->m_nX = pGB->m_nZX;
			pGB->m_nY = pGB->m_nZY;
			pGB->m_nAX = 0;
			pGB->m_nAY = 0;
			pGB++;
		}
	}

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



/*=================================================================*/
/* ボールの配置 */
/*=================================================================*/
int CGameBall_Set( int p_nX, int p_nY, int p_nBallColor )
{
	/* ターゲットのパネル座標が範囲内 */
	if( p_nY < 0 || p_nY >= BASE_Y ) return FUNC_FALSE;

	/* ターゲットのパネル座標位置のボール存在確認 */
	if( GameBall[p_nX][p_nY].m_nBallColor != 0 ) return FUNC_FALSE;

	/* ボール配置 */
	GameBall[p_nX][p_nY].m_nMode = 2;			/* 固定 */
	GameBall[p_nX][p_nY].m_nCount = 0;
	GameBall[p_nX][p_nY].m_nBallColor = p_nBallColor;
	GameBall[p_nX][p_nY].m_nPT = 30 + 10*(p_nBallColor-1);
	GameBall[p_nX][p_nY].m_nAni = 0;
	GameBall[p_nX][p_nY].m_nAniCount = 0;
	GameBall[p_nX][p_nY].m_nZX	= 7 + 2*p_nX;
	GameBall[p_nX][p_nY].m_nZY	= 4 + 2*p_nY;
	GameBall[p_nX][p_nY].m_nX 	= 7 + 2*p_nX;
	GameBall[p_nX][p_nY].m_nY	= 4 + 2*p_nY;
	GameBall[p_nX][p_nY].m_nAX	= 0;
	GameBall[p_nX][p_nY].m_nAY	= 0;

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



/*=================================================================*/
/* パネル座標指定によるボールカラーの取得 */
/*=================================================================*/
int CGameBall_GetBallColor( int p_nX, int p_nY )
{
	int m_nRet;

	/* ターゲットのパネル座標が範囲内 */
	if( p_nX < 0 || p_nX >= BASE_X || p_nY < 0 || p_nY >= BASE_Y ){
		return FUNC_FALSE;
	}

	/* ボールカラーの取得 */
	m_nRet = GameBall[p_nX][p_nY].m_nBallColor;

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



/*=================================================================*/
/* パネル座標指定によるボールカラーの設定 */
/*=================================================================*/
int CGameBall_SetBallColor( int p_nX, int p_nY, int p_nColor )
{
	/* ターゲットのパネル座標が範囲内 */
	if( p_nX < 0 || p_nX >= BASE_X || p_nY < 0 || p_nY >= BASE_Y ){
		return FUNC_FALSE;
	}

	/* ボールカラーの取得 */
	GameBall[p_nX][p_nY].m_nBallColor = p_nColor;

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



/*=================================================================*/
/* ボールの表示 */
/*=================================================================*/
int CGameBall_View( void )
{
	int x, y, zx, zy, pt;

	for( y=0; y<BASE_Y; y++ ){
		for(x=0; x<BASE_X; x++){
			/* モードが未使用なら処理を省く */
			if( GameBall[x][y].m_nMode == 0 ) continue;

			/* ボールをスクリーンに描画 */
			pt = GameBall[x][y].m_nPT;
			zx = GameBall[x][y].m_nX;
			zy = GameBall[x][y].m_nY;
			KSScreenSet( pt, SCREEN2, zx, zy );
		}
	}

	return FUNC_TRUE;
}
