#pragma once

//! @file Mix/Scene/IViewCamera.h
//! @brief ビューカメラインターフェースインクルードファイル

#include "Mix/Scene/ICamera.h"

namespace Mix{ namespace Scene{

	//! @class IViewCamera
	//! @brief ビューカメラインターフェース
	class IViewCamera : public Mix::Scene::ICamera
	{
	protected:
		//! @brief デストラクタ
		virtual ~IViewCamera( void ) {}

	public:
		//! @brief ビューを設定します
		//! @param[in] at 注視点を表す Mix::Vector3 クラス
		//! @param[in] rotation ターゲットを基点とした回転を表す Mix::Quaternion クラス
		//! @param[in] distance ターゲットまでの距離
		virtual void SetView( const Mix::Vector3& at, const Mix::Quaternion& rotation, Float32 distance ) = 0;

		//! @brief 注視点を設定します
		//! @param[in] at 注視点を表す Mix::Vector3 クラス
		virtual void SetAt( const Mix::Vector3& at ) = 0;

		//! @brief 注視点を中心とした回転を取得します
		//! @return 回転を表す Mix::Quaternion クラスを返します
		virtual const Mix::Quaternion& GetRotation( void ) const = 0;
		//! @brief 注視点を中心とした回転を取得します
		//! @return 回転を表す Mix::Matrix4x4 クラスを返します
		virtual const Mix::Matrix4x4& GetRotationMatrix( void ) const = 0;
		//! @brief 注視点を中心とした回転を設定します
		//! @param[in] rotation 回転を表す Mix::Quaternion クラス
		virtual void SetRotation( const Mix::Quaternion& rotation ) = 0;

		//! @brief 注視点までの距離を取得します
		//! @return 距離を返します
		virtual Float32 GetDistance( void ) const = 0;
		//! @brief 注視点までの距離を設定します
		//! @param[in] distance 距離
		virtual void SetDistance( Float32 distance ) = 0;
	};

}}
