#pragma once	// お品書きの先頭には必ず書くこと
// インクルードはこちらから
#include "FKUT/FKUT.h"


// クラスの宣言(変数と関数のお品書き)だけヘッダに書く
class GameMain {
private:
	// オブジェクトや変数はコッチで作る
	fkut_SimpleWindow	window;			// すごい変数「3DCGが描けるウィンドウになる変数」

	fkut_SphereModel	body;			// 操作する球
	fkut_BlockModel		floor;			// 床をあらわすブロックモデル
	fkut_ConeModel		camera;			// カメラモデル
	
	// ぶつかれるブロックを用意する
	fkut_SphereModel	hitSph[5];
	fkut_BlockModel		hitBlk[5];
	fk_Vector			back;

	// 状態管理用の変数
	fk_Vector	spd;	// 速度ベクトル用変数
	int			jumpState;	// 0: ふつう, 1: 上昇中, 2: 下降中
	
	// サウンド関係
	fk_AudioStream		bgm;
	fk_AudioWavBuffer	se0, se1, se3D;
	bool				bgm_play, se0_play, se1_play, se3D_play;

	// 2D画像
	fkut_SpriteModel	spr, text, numSpr;
	// 背景画像
	fk_RectTexture		rect;
	fk_Model			bgModel;
	// モデル読み込み
	fk_IFSTexture		ifs;
	fk_Model		    ifsModel;
	// FK Performerのキャラクター読み込み
	fkut_Performer		chara;

	// setup()やdraw()から呼び出す処理はprivateにお品書きを書く
	// (publicでもいいけど、何となく分けておくといいことあるかも)

	// [main.cppで実装]
	// キー操作で前後左右移動
	void keyHandle();

	// [control.cppで実装]
	// ジャンプ操作
	void jump();
	// アイテムゲット
	void itemCheck();
	// 当たり判定
	void contact();
	// 重力チェック
	void gravityCheck();

	// [sound.cppで実装]
	// サウンド準備処理
	void setupSound();
	// サウンド再生処理
	void procSound();
	// キーに対応した再生処理
	void playSoundByKey(const char &argKey, bool &argFlag, fk_AudioWavBuffer &argSE);

	// [graphics.cppで実装]
	void setupGraphics();

public:
	// 毎度お馴染みのsetup()&draw()

	// [main.cppで実装]
	// ゲーム開始までの準備処理
	void setup();
	// ゲームのループ処理はdraw()に書く
	void draw();
};
