#pragma once

//! @file Utility/ViewCameraHelper.h
//! @brief ビューカメラヘルパークラスインクルードファイル

namespace Utility {

	//! @class ViewCameraHelper
	//! @brief ビューカメラヘルパークラス
	class ViewCameraHelper
	{
	private:
		Mix::HID::IMouse* m_pMouse;
		Mix::HID::IKeyboard* m_pKeyboard;

		Float32 m_AtCoiffe;
		Float32 m_RotCoiffe;
		Float32 m_CtrlDistCoiffe;
		Float32 m_WheelDistCoiffe;

		Mix::Vector3 m_At;
		Mix::Quaternion m_Rot;
		Float32 m_Dist;

	public:
		//! @brief コンストラクタ
		ViewCameraHelper( void );
		//! @brief デストラクタ
		~ViewCameraHelper( void );

	public:
		//! @brief 初期化します
		//! @param[in] pMouse マウス
		//! @param[in] pKeyboard キーボード
		//! @param[in] at 初期の注視点
		//! @param[in] rot 初期の回転
		//! @param[in] dist 初期の距離
		//! @param[in] atCoiffe 注視点の移動に影響する調整値
		//! @param[in] rotCoiffe 回転に影響する調整値
		//! @param[in] ctrlDistCoiffe 距離の変更に影響する調整値( コントロールキー )
		//! @param[in] wheelDistCoiffe 距離の変更に影響する調整値( ホイール )
		void Initialize(	Mix::HID::IMouse* pMouse, Mix::HID::IKeyboard* pKeyboard,
							const Mix::Vector3& at, const Mix::Vector2& rot, Float32 dist,
							Float32 atCoiffe = 0.01f, Float32 rotCoiffe = 0.01f, Float32 ctrlDistCoiffe = 0.1f, Float32 wheelDistCoiffe = 0.4f );

		//! @brief 更新します
		void Update( void );

		//! @brief 破棄します
		//! @note マウス、キーボードを解放します
		void Dispose( void );

		//! @brief 注視点を取得します
		//! @return 注視点を返します
		const Mix::Vector3& GetAt( void ) const;
		//! @brief 回転を取得します
		//! @return 回転を返します
		const Mix::Quaternion& GetRotation( void ) const;
		//! @brief 距離を取得します
		//! @return 距離を返します
		Float32 GetDistance( void ) const;
	};
}
