#include "gameframe.h"

void GameFrame::doMainLoop(){
	ChangeWindowMode(true);		//ウィンドウモード
	if(DxLib_Init() == -1){		//DXライブラリ初期化
		return;
	}
	SetDrawScreen(DX_SCREEN_BACK);	//描画対象画面指定

	setIdouHosei();

	loadFiles();		//各ファイル読み込み

	setGameState(GAME_TITLE);	//タイトル画面設定

	//メインループ
	while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
		ClsDrawScreen();	//画面消去
		switch(gstate){
			case GAME_TITLE:
				drawGameTitle();
				break;
			case GAME_MAIN:
				drawGameMain();
				break;
			case GAME_OVER:
				drawGameOver();
				break;
			case GAME_CLEAR:
				drawGameClear();
				break;
		}
		ScreenFlip();	//裏画面と切り替え
		animcounter++;
	}
	DxLib_End();	//DXライブラリ終了処理
}

//●gstateをセットする（画面切り替え）
GAMESTATE GameFrame::setGameState(GAMESTATE state){
	if(gstate != state){
		gstate = state;
		starttime = GetNowCount();
		if(gstate == GAME_MAIN){
			initStage();//initStage関数の呼び出し
		}
		return gstate;
	}
}

//現在のanimcounterを返す
//静的関数なのでGameFram::getAnimCnt()で呼び出し可
unsigned int GameFrame::getAnimCnt(){
	return animcounter;
}
//animcounterの実態
unsigned int GameFrame::animcounter = 0;
//補正移動量を求める
void GameFrame::setIdouHosei(){
	float frametime = 0;
	unsigned int s = GetNowCount();	//計測開始時間をsに代入
	for(int i = 0; i<30; i++){
		ScreenFlip();
		unsigned int e = GetNowCount();	//計測終了時間をe代入
		frametime = frametime + e - s;
		s = e;
	}
	frametime /=30;	//30回採取した平均
	//移動量０〜１９の補正値を配列にセット
	for(int i=1; i<20; i++){
		idouryou[i] = i / 16.67 * frametime;
	}
}
//補正後の移動量を返す
//静的関数なのでGameFrame::Idouhosei()で呼び出し可
float GameFrame::IdouHosei(int idou){
	if(idou<0){
		return(-idouryou[-idou]);//移動量が負の場合の処理
	}else {
		return(idouryou[idou]);//正の場合
	}
}
//idouryouの実体