
//==============================================================
//! @file      00_main.cpp
//! @brief     メイン関数
//! 
//!     コーディングスタイルの方針については別紙参照
//==============================================================

//==============================================================
// doxygenメモ
// 下記の2種類だけ覚えれば簡単なコメントを書くには問題ない。
// 【//!】  コメント
// 【//<!】 コメント（行末）
//--------------------------------------------------------------
//   備考：Ctrl + k を入力したあと続けて Ctrl + i を入力すると
//         クイックヒントが表示される。
//         その際「!」マークが先頭に表示されてしまうが無視。
//==============================================================

//==============================================================
// インクルード
//==============================================================

#include "..\00_HeaderFiles\CommonIncludes.h"
#include "..\00_HeaderFiles\00_ManagementClasses\CImageManager.h"
#include "..\00_HeaderFiles\00_ManagementClasses\CSceneManager.h"
#include "..\00_HeaderFiles\03_OtherClasses\CAllKeysState.h"


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nCmdShow )
{
	//==========================================================
	// 変数宣言
	//==========================================================
	
	// 管理クラスのインスタンスを生成
	//     プログラムの実行中に、一度しかインスタンスを生成できない。
	//     deleteした後に、newしても落ちるので注意

	CImageManager* pinImageManager = new CImageManager();
	CSceneManager* pinSceneManager = new CSceneManager();
	CAllKeysState* pinAllKeysState = new CAllKeysState();
	
	//----------------------------------------------------------
	// 前処理
	//     【注意】DxLib_Init関数を呼ぶ前に実行しないと効果がない。
	//----------------------------------------------------------
	
	// タイトルを変更
	SetMainWindowText( "東方マジカル☆慧音ちゃんスター" );
	
	// ウィンドウモードに変更
	ChangeWindowMode( TRUE );
	
	// 画面モードの変更
	SetGraphMode( 960, 540, 32 ) ;
	
	// ログを出力しない。
	SetOutApplicationLogValidFlag( FALSE );
	
	//--------------------------------------~前処理-------------
	
	// ＤＸライブラリ初期化処理
	if( DxLib_Init() == -1 )
	{
		// エラーが起きたら直ちに終了
		return -1;
	}
	
	// 描画先画面を裏画面にセット
	SetDrawScreen( DX_SCREEN_BACK );
	
	try
	{
		// ゲーム中で使用する画像を一括でロード。！画面が固まる。
		pinImageManager->Load();
	}
	catch( std::string str )
	{
		str += "\nプログラムを終了します。";
		MessageBox( NULL, str.c_str(), "例外が送出されました", MB_OK );
		return -1;
	}

	//==========================================================
	// メインループ（Escapeキーで終了する）
	//==========================================================
	while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
	{
		// 画面を初期化する
		ClearDrawScreen();
		
		// キーの状態を更新
		pinAllKeysState->Record();
		
		// シーン管理クラスにシーンの実行をさせる。
		pinSceneManager->Run( pinImageManager, pinAllKeysState );
		
		// printfDx("%d", i);

		// 裏画面の内容を表画面に反映させる
		ScreenFlip() ;
		
		// 簡易画面出力履歴をクリアする（あとで消す）
		clsDx();
	}
	
	// ＤＸライブラリ使用の終了処理
	DxLib_End();
	
	return 0;
}

