#pragma once

//! @file Mix/Scene/ISpotLight.h
//! @brief スポットライトインターフェースインクルードファイル

#include "Mix/Scene/ILocalLight.h"

namespace Mix{ namespace Scene{

	//! @class ISpotLight
	//! @brief スポットライトインターフェース
	class ISpotLight : public Mix::Scene::ILocalLight
	{
	protected:
		//! @brief デストラクタ
		virtual ~ISpotLight( void ){}

	public:
		//! @brief 方向を取得します
		//! @return 方向を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetDirection( void ) const = 0;
		//! @brief 方向を設定します
		//! @param[in] dir 方向を表す Mix::Vector3 クラス
		virtual void SetDirection( const Mix::Vector3& dir ) = 0;

		//! @brief 影響を与える範囲を取得します
		//! @return 影響を与える範囲を返します
		virtual Float32 GetRange( void ) const = 0;
		//! @brief 影響を与える範囲を設定します
		//! @param[in] range 影響を与える範囲
		virtual void SetRange( Float32 range ) = 0;

		//! @brief コーンの内角を取得します
		//! @return コーンの内角を返します
		virtual Float32 GetConeInnerAngle( void ) const = 0;
		//! @brief コーンの外角を取得します
		//! @return コーンの外角を返します
		virtual Float32 GetConeOuterAngle( void ) const = 0;
		//! @brief コーンの設定をします
		//! @param[in] innerAngle コーンの内角( ラジアン単位 )
		//! @param[in] outerAngle コーンの外角( ラジアン単位 )
		virtual void SetCone( Float32 innerAngle, Float32 outerAngle ) = 0;

		//! @brief スポットライトがあたった際の輝きの鋭さを取得します
		//! @return 輝きの鋭さを返します
		virtual Float32 GetExponent( void ) const = 0;
		//! @brief スポットライトがあたった際の輝きの鋭さ(ハイライト)を設定します
		//! @param[in] exp 輝きの鋭さ( 0.0f〜正の無限大 )
		virtual void SetExponent( Float32 exp ) = 0;
	};

}}
