#include "main.h"


void GameMain::setup()
{
	window.setSize(800, 600);			// ウィンドウの大きさはお好みで
	window.setBGColor(0.3, 0.6, 0.8);	// 背景色はR, G, Bの色成分を0.0〜1.0でブレンドして作るよ
	window.setTrackBallMode(true);		// マウスドラッグでカメラぐりぐりモード
	window.showGuide();					// 床の枠線と軸を表示するよ
	window.open();						// ウィンドウ自体を表示するよ
	window.setWindowName("せっかくなのでここのタイトルも変えましょう");

	body.create(8, 10.0);
	body.setMaterial(Yellow);
	body.glMoveTo(0.0, 10.0, 0.0);
	window.entry(body);

	floor.create(1000.0, 1.0, 1000.0);
	floor.glMoveTo(0.0, -0.5, 0.0);	// ちょいと低めにしておく
	floor.setMaterial(Brown);
	window.entry(floor);

	// カメラ用にダミーのモデルを用意して、
	// それを操作モデルと親子関係にし、ウィンドウにセット
	camera.glMoveTo(0.0, 100.0, 200.0);
	camera.glFocus(0.0, 0.0, 0.0);
	camera.setParent(body);
	window.setCameraModel(camera);

	// 配列と繰り返しを利用して、まとめて設定
	for(int i = 0; i < 5; ++i) {
		hitSph[i].create(8, 10.0);
		hitSph[i].glMoveTo(-100.0 + i*60.0, 10.0, -50.0);
		hitSph[i].setMaterial(Red);
		window.entry(hitSph[i]);
	}
	// 同じ個数の配列なら一緒の繰り返しにまとめてもいいが、
	// 配列単位でループを回した方が混乱しにくいと思われ
	for(int i = 0; i < 5; ++i) {
		hitBlk[i].create(15.0, 15.0, 15.0);
		hitBlk[i].glMoveTo(-100.0 + i*60.0, 7.5, 50.0);
		hitBlk[i].setMaterial(Green);
		window.entry(hitBlk[i]);
	}

	// 変数の初期化は必ずsetup()でやっておくこと
	jumpState = 0;
	spd.init();

	// サウンドロード処理呼び出し
	setupSound();

	// グラフィックロード処理呼び出し
	setupGraphics();
}

// ゲームのループ処理はdraw()に書く
void GameMain::draw()
{
	// ぐるぐる回るよー
	while(window.update() == true) {
		// キー操作処理
		keyHandle();
		// ジャンプ操作
		jump();
		// 当たり判定
		contact();
		// 補正が済んだ速度で実際に移動させる
		body.glTranslate(spd);
		// 重力チェック
		gravityCheck();
		// アイテムゲット処理
		itemCheck();

		// サウンド再生処理
		procSound();

		if(window.getKeyStatus('1') == FKUT_SW_PRESS) {
			chara.playMotion(0);
		}
		if(window.getKeyStatus('2') == FKUT_SW_PRESS) {
			chara.playMotion(1);
		}
		if(window.getKeyStatus('3') == FKUT_SW_PRESS) {
			chara.playMotion(2);
		}
	}
}


// main()はsetup()とdraw()を呼び出すだけになる
int main(int argc, char *argv[])
{
	GameMain	game;

	game.setup();
	game.draw();

	return 0;
}
