//---------------------------------------------------
//処理（resultscore.cpp）
//Author : SYUNTA MAKINO
//作成日 : 2016/05/31
//---------------------------------------------------


/*ヘッダファイル*/
#include "main.h"
#include "resultscore.h"

#include "score.h"

/*マクロ定義*/
#define NUM_POLYGON ( 2 )
#define NUM_VERTEX  ( 4 )

#define SCORE_DIGIT ( 5 )   //スコアの桁数
#define SCORE_INIT_POS_X ( 430.0f )   //右端のスコアのX座標
#define SCORE_POS_Y ( 613.0f )   //スコアのY座標
#define SCORE_WIDTH ( 50.0f )   //スコアの幅
#define SCORE_HEIGHT ( 70.0f )   //スコアの高さ
#define SCORESCORE_DIGIT_HEIGHT ( 100.0f )   //スコアの高さ
#define SCORE_TX_WIDTH ( 0.2f )   //スコアテクスチャの幅
#define SCORE_TX_HEIGHT ( 0.5f )   //スコアクスチャの高さ

/*グローバル変数*/
LPDIRECT3DTEXTURE9 g_pTextureResultScore = NULL;   //テクスチャインターフェースへのポインタ
LPDIRECT3DVERTEXBUFFER9 g_vertexResScore = NULL;   //頂点バッファ管理インタフェースへのポインタ
int g_resultScore;   //現在のスコア

/*プロトタイプ宣言*/
void MakeVertexResultScore( LPDIRECT3DDEVICE9 pDevice );


//----------------------------
//InitScore関数
//スコアの初期化
//----------------------------
void InitResultScore( void )
{
	/*デバイスの情報を取得*/
	LPDIRECT3DDEVICE9 pDevice = GetDevice( );

	g_resultScore = GetScore( );

	/*テクスチャの読み込み*/
	if( FAILED( D3DXCreateTextureFromFile( pDevice , "data/TEXTURE/degifont.png" , &g_pTextureResultScore ) ) )
	{
		MessageBox( NULL , "テクスチャが読み込めませんでした" , "エラー" , MB_OK );
	}

	/*スコアの頂点の作成*/
	MakeVertexResultScore( pDevice );
}

//----------------------------
//UninitScore関数
//スコアの終了処理
//----------------------------
void UninitResultScore( void )
{
	/*g_pTextureResultScoreの解放*/
	SAFE_RELEASE( g_pTextureResultScore );

	/*g_vertexResScoreの解放*/
	SAFE_RELEASE( g_vertexResScore );
}

//----------------------------
//UpdateScore関数
//スコアの更新
//----------------------------
void UpdateResultScore( void )
{
}	

//----------------------------
//DrawScore関数
//スコアの描画
//----------------------------
void DrawResultScore( void )
{
	int nLoop = 0;   //ループ用の変数

	/*デバイスの情報を取得*/
	LPDIRECT3DDEVICE9 pDevice = GetDevice( );

	/*パイプラインを繋げる*/
	pDevice -> SetStreamSource( 0 , g_vertexResScore , 0 , sizeof( VERTEX_2D ) );

	//頂点フォーマット設定
	pDevice -> SetFVF( FVF_VERTEX_2D );

	/*スコアの値の描画*/
	/*テクスチャーの貼り付け*/
	pDevice -> SetTexture( 0 , g_pTextureResultScore );

	for( nLoop = 0; nLoop < SCORE_DIGIT; nLoop++ )
	{
		//プリミティブの描画
		pDevice -> DrawPrimitive( D3DPT_TRIANGLESTRIP ,   //プリミティブの種類
								  nLoop * 4 ,   //オフセット（頂点数）
								  NUM_POLYGON );   //プリミティブ数
	}
}

//----------------------------
//MakeVertexScore関数
//スコアの頂点の作成
//----------------------------
void MakeVertexResultScore( LPDIRECT3DDEVICE9 pDevice )
{
	int nLoop = 0;
	int nLoop2 = 0;
	float g_fScorePosXTmp = SCORE_INIT_POS_X;
	int nValue = 0;
	int nTmp = g_resultScore;
	D3DXVECTOR2 TxPos;

	VERTEX_2D *pVtx = NULL;   //仮想アドレスを取得するためのポインタ

	if( FAILED( pDevice -> CreateVertexBuffer( sizeof( VERTEX_2D ) * NUM_VERTEX * SCORE_DIGIT ,   //作成したい頂点バッファのサイズ
											   D3DUSAGE_WRITEONLY ,
											   FVF_VERTEX_2D ,
											   D3DPOOL_MANAGED ,   //メモリ管理方法（デバイスにお任せ）
											   &g_vertexResScore ,
											   NULL ) ) )
	{
		/*「失敗した」という情報を返す*/
	//	return E_FAIL;
	}

	//頂点バッファをロックして、仮想アドレスを取得する
	g_vertexResScore->Lock( 0 , 0 , ( void **)&pVtx , 0 );

	/*下画面のスコアの設定*/
	for( nLoop = 0; nLoop < NUM_VERTEX * SCORE_DIGIT; nLoop += NUM_VERTEX , nLoop2++ )
	{
		//頂点座標の設定(2D座標・右回り)
		pVtx[ nLoop ].pos = D3DXVECTOR3( SCORE_INIT_POS_X + g_fScorePosXTmp , SCORE_POS_Y , 0.0f );
		pVtx[ nLoop + 1 ].pos = D3DXVECTOR3( SCORE_INIT_POS_X + SCORE_WIDTH + g_fScorePosXTmp , SCORE_POS_Y , 0.0f );
		pVtx[ nLoop + 2 ].pos = D3DXVECTOR3( SCORE_INIT_POS_X + g_fScorePosXTmp , SCORE_POS_Y + SCORE_HEIGHT , 0.0f );
		pVtx[ nLoop + 3 ].pos = D3DXVECTOR3( SCORE_INIT_POS_X + SCORE_WIDTH + g_fScorePosXTmp , SCORE_POS_Y + SCORE_HEIGHT , 0.0f );

		//rhwの設定（必ず1.0f）
		pVtx[ nLoop ].rhw = 1.0f;
		pVtx[ nLoop + 1 ].rhw = 1.0f;
		pVtx[ nLoop + 2 ].rhw = 1.0f;
		pVtx[ nLoop + 3 ].rhw = 1.0f;

		//頂点カラーの設定
		pVtx[ nLoop ].color = D3DCOLOR_RGBA( 255 , 255 , 255 , 255 );
		pVtx[ nLoop + 1 ].color = D3DCOLOR_RGBA( 255 , 255 , 255 , 255 );
		pVtx[ nLoop + 2 ].color = D3DCOLOR_RGBA( 255 , 255 , 255 , 255 );
		pVtx[ nLoop + 3 ].color = D3DCOLOR_RGBA( 255 , 255 , 255 , 255 );

		/*テクスチャ座標の設定*/
		nValue = nTmp % 10;
		nTmp /= 10;
		TxPos.x = ( nValue % 5 ) * SCORE_TX_WIDTH;
		TxPos.y = ( nValue / 5 ) * SCORE_TX_HEIGHT;
		pVtx[ nLoop ].tex =  D3DXVECTOR2( TxPos.x , TxPos.y );
		pVtx[ nLoop + 1 ].tex =  D3DXVECTOR2( TxPos.x + SCORE_TX_WIDTH , TxPos.y );
		pVtx[ nLoop + 2 ].tex =  D3DXVECTOR2( TxPos.x , TxPos.y + SCORE_TX_HEIGHT);
		pVtx[ nLoop + 3 ].tex =  D3DXVECTOR2( TxPos.x + SCORE_TX_WIDTH , TxPos.y + SCORE_TX_HEIGHT );

		/*X座標を進める*/
		g_fScorePosXTmp -= SCORE_WIDTH;
	}

	//頂点バッファのロックを解除する
	g_vertexResScore->Unlock( );
}


