#ifndef _D_CAMERA_MANAGER_
#define _D_CAMERA_MANAGER_

#include <windows.h>
#include <easy3d.h>

namespace HPL {
namespace DirectX {

namespace EyeFromCamera{
	enum {
		FROM_CAMERA = TRUE,
		FROM_OBJECT = FALSE,
	} ;
}
/** クォータニオンを利用した自由回転カメラの制御。
  * 視点モードの種類ごとにインスタンスを作成すると良い。
  *
  */
class DCameraManager {
public:
	int m_nQuatanionID;
private:
	/** 初期状態を基準としたクォータニオン用ベクトル
	  *
	  */
	D3DXVECTOR3 m_vNormalizedQuatanionDireciton;

	//! 距離
	float m_fDistance;

public:
	DCameraManager( float fDistance);
	~DCameraManager();

	
public:	// Getter/Setter
	HRESULT set_Distance( float fDistance );
	float get_Distance();

	HRESULT set_NormalizedQuatanionDirection( D3DXVECTOR3& vNormalizedQuatanionDirection );
	D3DXVECTOR3 get_NormalizedQuatanionDirection() ;
protected:	// inner operations
public:	// Operations
	/** ビューを更新
	  * @param[in]	vCorePosition			衛星位置の中心座標
	  * @param[out]	vSatellitePosition		衛星の位置
	  * @retval 更新時に異常発生（行列計算等）
	  */
	HRESULT get_SatellitePosition(
		D3DXVECTOR3& vCorePosition,
		D3DXVECTOR3* vSatellitePosition);

	/** 横回転現在の視線方向を基準に緯度回転
	  * @param[in]	fRotateHorizontalDegree
	  * @retval		HRESULT					TRUE 回転＆視点変換成功
	  */
	HRESULT rotateHorizontalDegree( float fRotateHorizontalDegree );

	//! 縦回転（現在の視線方向を基準に経度回転
	//! Longitudinal
	HRESULT rotateVerticalDegree( float fRotateVerticalDegree );
};

}
}

#endif
