
#include "..\..\00_HeaderFiles\00_ManagementClasses\CImageManager.h"
#include "..\..\00_HeaderFiles\00_ManagementClasses\CMapCellManager.h"

CImageManager::CImageManager( void )
{
	// 生成を二度しようとしたときはプログラムを終了させる。
	static bool bFirstGeneration = true;
	if ( bFirstGeneration ) {
		bFirstGeneration = false;
		return;
	}
	
	MessageBox( NULL,
	            "CImageManagerクラスを二度生成しようとしました。",
	            "",
	            MB_OK );
	
	assert( false );
}

// 画像ファイルのパス
const TCHAR* CImageManager::PATHS[ CImageManager::EImageID::TOTAL ] = {
    "01_Images\\title_back.png",
    "01_Images\\conquest_back.png",
    "01_Images\\terminal_back.png",
    "01_Images\\fade.png",
    "01_Images\\move_area.png",
    "01_Images\\not_move_area.png",
    "01_Images\\protagonist_standing.png",
    "01_Images\\protagonist_forward.png",
    "01_Images\\protagonist_back.png",
    "01_Images\\protagonist_left.png",
    "01_Images\\protagonist_right.png",
};

int CImageManager::Load( void ) throw( ... )
{
	for ( int i = 0; i < EImageID::TOTAL; i++ ) {
		m_aSGraphics[ i ].iHandle = LoadGraph( PATHS[ i ] );
		
		// 定数との等値演算式では定数を左辺とする。
		if ( -1 == m_aSGraphics[ i ].iHandle )
		{
			std::stringstream sstr;
			
			sstr << "画像ファイル" << std::endl 
			     << "    " << PATHS[ i ] << std::endl
			     << "の読み込みに失敗しました。" << std::endl;
			throw sstr.str();
		}
		
		// 画像ファイルの幅と高さを構造体に格納する。
		GetGraphSize( m_aSGraphics[ i ].iHandle,
		              &m_aSGraphics[ i ].iWidth,
		              &m_aSGraphics[ i ].iHeight );
		
	}
	
	return 0;
}

void CImageManager::Draw( int arg_iX,
                          int arg_iY, 
                          EImageID arg_eImageID )
{
	// 左上座標系の座標を格納するための変数
	int iFoundationCoordinates_X;
	int iFoundationCoordinates_Y;
	
	// 左上座標系に変換
	iFoundationCoordinates_X = GetTransformedCoordinates_X( arg_iX );
	iFoundationCoordinates_Y = GetTransformedCoordinates_Y( arg_eImageID, arg_iY );
	
	DrawGraph( iFoundationCoordinates_X,
	           iFoundationCoordinates_Y,
	           m_aSGraphics[ arg_eImageID ].iHandle,
	           TRUE );
	
}

void CImageManager::DrawAlpha( int      arg_iX,
                               int      arg_iY,
                               EImageID arg_eImageID,
                               int      arg_iAlpha )
{
	
	// 左上座標系の座標を格納するための変数
	int iFoundationCoordinates_X;
	int iFoundationCoordinates_Y;
	
	// 左上座標系に変換
	iFoundationCoordinates_X = GetTransformedCoordinates_X( arg_iX );
	iFoundationCoordinates_Y = GetTransformedCoordinates_Y( arg_eImageID, arg_iY );
	
	SetDrawBlendMode( DX_BLENDMODE_ALPHA, arg_iAlpha );

	DrawGraph( iFoundationCoordinates_X,
	           iFoundationCoordinates_Y,
	           m_aSGraphics[ arg_eImageID ].iHandle,
	           TRUE );

	SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 );
}

int CImageManager::GetTransformedCoordinates_X( int arg_iX )
{
	return arg_iX;
}

int CImageManager::GetTransformedCoordinates_Y( EImageID arg_eImageID, int arg_iY )
{
	// 上下を逆転
	arg_iY = CMapCellManager::CLIENT_AREA_HEIGHT - arg_iY;
	
	// 画像の左上が描画基点となっているため左下にする
	arg_iY -= m_aSGraphics[ arg_eImageID ].iHeight;

	return arg_iY;
}






