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

CGamePanel GamePanel[BASE_X][BASE_Y];
int g_nGamePanel_ViewUpdate; /* 描画の更新（0.なし 1.あり） */



/*=================================================================*/
/* パネルの初期化 */
/*=================================================================*/
int CGamePanel_Init( void )
{
/*	static int dx[7] = {0,0,0,0,0,0,0};*/
	int x, y;

/*
		for ( y=0; y<6; y++ ) {
			for ( x=0; x<7; x++ ) {
				GamePanel[x][y].m_nMode = 0;
				KSSpriteSet( &KSS_Panel[x][y], &KSF_Panel[0], 4, 56+16*x, 32+16*y );
			}
		}

		for(y=0; y<6; y++){
			for(x=0; x<7; x++){
				if(x == 0) for(n=0; n<7; n++) dx[n] = 0;
				while( TRUE ){
					n = rand() % 7;
					if(dx[n] == 0) break;
				}
				dx[n] = 1;
				count = (6-y)*14 + n*2;
				GamePanel[x][y].Init( 208+32*x, 144+32*y, count );
			}
		}
*/
	for( y=0; y<BASE_Y; y++ ){
		for( x=0; x<BASE_X; x++ ){
			GamePanel[x][y].m_nMode = 2; 	/* 2.配置 */
			GamePanel[x][y].m_nPT = 1;		/* タイル */
			GamePanel[x][y].m_nAni = 0;
			GamePanel[x][y].m_nAniCount = 0;
			GamePanel[x][y].m_nZX = 7+2*x;	/* 基準表示座標 */
			GamePanel[x][y].m_nZY = 4+2*y;
			GamePanel[x][y].m_nX = 7+2*x;	/* 現在座標 */
			GamePanel[x][y].m_nY = 4+2*y;
			GamePanel[x][y].m_nAX = 0;		/* 加速度 */
			GamePanel[x][y].m_nAY = 0;
			GamePanel[x][y].m_nWait = 0;	/* 移動前ウェイト */
		}
	}

	g_nGamePanel_ViewUpdate = 1;

	return FUNC_TRUE;
}



/*=================================================================*/
/* パネルの表示 */
/*=================================================================*/
int CGamePanel_Action( int p_nFlag )
{
	static int m_nMode = 0;
	int x, y;


	if( p_nFlag == 1 ) m_nMode = 0; /* 初期化 */
	if( p_nFlag == 3 ) m_nMode = 30; /* 破壊 */



	switch( m_nMode ){
	case 30: /* 破壊初期化 */
		m_nMode = 40;

		for( y=0; y<BASE_Y; y++ ){
			for( x=0; x<BASE_X; x++ ){
				GamePanel[x][y].m_nMode = 3; 	/* 3.破壊 */
				GamePanel[x][y].m_nPT = 1;		/* タイル */
				GamePanel[x][y].m_nZY = 18;
				GamePanel[x][y].m_nAY = 1;
				GamePanel[x][y].m_nWait = rand()%32;
			}
		}
		break;

	case 40: /* 破壊 */
		for( y=0; y<BASE_Y; y++ ){
			for( x=0; x<BASE_X; x++ ){
				if( GamePanel[x][y].m_nWait != 0 ){
					GamePanel[x][y].m_nWait--;
				}else{
					GamePanel[x][y].m_nY += GamePanel[x][y].m_nAY;
					if( GamePanel[x][y].m_nY >= GamePanel[x][y].m_nZY ){
						GamePanel[x][y].m_nMode = 0; 	/* 0.none */
					}
				}
			}
		}
		KSScreenFill( 0, SCREEN1, 7, 4, 7+14, 18 );
		g_nGamePanel_ViewUpdate = 1;
		break;

	default:
		break;
	}

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


/*=================================================================*/
/* パネルの表示 */
/*=================================================================*/
int CGamePanel_View( void )
{
	int x, y, zx, zy, pt;

	/* 描画更新フラグのチェック */
	if( g_nGamePanel_ViewUpdate == 0 ) return FUNC_TRUE;

	/* チェック */
	for( y=0; y<BASE_Y; y++ ){
		for(x=0; x<BASE_X; x++){
			pt = GamePanel[x][y].m_nPT;
			zx = GamePanel[x][y].m_nX;
			zy = GamePanel[x][y].m_nY;
			KSScreenSet( pt, SCREEN1, zx, zy );
		}
	}
	g_nGamePanel_ViewUpdate = 0;

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