//=========================================================================
//	カメラクラスヘッダー[ camera.h ]
//	作成者：小暮大樹
//	作成日：2017/04/27
//=========================================================================
#pragma	once

//=========================================================================
//	インクルードファイル
//=========================================================================
#include	"main.h"

//=========================================================================
//	カメラクラス
//=========================================================================
class	KCamera
{
public:
	//向き
	typedef enum
	{
		DIRECTION_LEFT = 0 ,			//左
		DIRECTION_RIGHT ,				//右
		DIRECTION_ADVANCE ,				//前進
		DIRECTION_BACK ,				//後退
		DIRECTION_UP ,					//上	
		DIRECTION_DOWN ,				//下
		DIRECTION_SLIGTH_RIGHT_ADVANCE,	//斜め右前
		DIRECTION_SLIGTH_RIGHT_BACK	,	//斜め右後
		DIRECTION_SLIGTH_LEFT_ADVANCE,	//斜め左前
		DIRECTION_SLIGTH_LEFT_BACK	,	//斜め左後

	}DIRECTION;

	KCamera();
	~KCamera();

	void	Create( void );

	void	Init( void );		// 初期化
	void	Uninit( void );		// 終了処理
	void	Update( void );		// 更新
	void	Set( void );		// セット

	void	Rotate	( DIRECTION dir );			//カメラ注視点回転
	void	Move	( DIRECTION dir );			//カメラ移動

	//取得関数
	const	D3DXMATRIX&		GetView		/*ビュー行列の取得*/	( void ) const { return m_mtxView; };
	const	float&			GetRotRange	/*回転量の取得*/		( void ) const { return m_fRotRange; };
	const	float&			GetAngle	/*角度の取得*/			( void ) const { return m_fAngle; };
	const	float&			GetLength	/*長さの取得*/			( void ) const { return m_fLength; };
	const	D3DXVECTOR3&	GetPosAt	/*注視点の取得*/		( void ) const { return m_PosAt; };
	const	D3DXVECTOR3&	GetPosEye	/*カメラ位置の取得*/	( void ) const { return m_PosEye; };
	const	D3DXVECTOR3&	GetVecUp	/*上方向の取得*/		( void ) const { return m_VecUp; };
	const	D3DXVECTOR3&	GetSpeed	/*移動量の取得*/		( void ) const { return m_Speed; };

protected:
	//計算関数
	void	AddRotRange( const float& add ){ m_fRotRange += add; };
	void	AddAngle( const float& add ){ m_fAngle += add; };

	//設定関数
	void	SetRotRange	/*回転量のセット*/		( const float& rotRange ){ m_fRotRange = rotRange; };
	void	SetAngle	/*カメラ角度のセット*/	( const float& angle ){ m_fAngle = angle; };
	void	SetLength	/*カメラ距離のセット*/	( const float& length ){ m_fLength = length; };
	void	SetPosEye	/*カメラ位置のセット*/	( const D3DXVECTOR3& posEye ){ m_PosEye = posEye; };
	void	SetPosAt	/*カメラ注視点のセット*/( const D3DXVECTOR3& posAt ){ m_PosAt = posAt; };
	void	SetVecUp	/*上方向のセット*/		( const D3DXVECTOR3& vecUp  ){ m_VecUp = vecUp; };
	void	SetSpeed	/*速度のセット*/		( const D3DXVECTOR3& speed ){ m_Speed = speed; };	

private:
	D3DXMATRIX m_mtxProj;	//プロジェクション行列の作成
	D3DXMATRIX	m_mtxView;	//カメラ行列
	D3DXVECTOR3 m_PosEye;	//カメラ座標
	D3DXVECTOR3 m_PosAt;	//カメラ注視点
	D3DXVECTOR3 m_VecUp;	//カメラ上
	D3DXVECTOR3 m_Speed;	//移動速度
	float m_fAngle;			//カメラ角度(向いてる向き)
	float m_fRotRange;		//カメラ回転速度
	float m_fLength;		//カメラ距離
	float m_MaxSpeed;		//最高速度

	void	MembervariableIniter( void );	//メンバ変数の初期化

};
