#pragma once

//! @file Mix/Scene/IEntity.h
//! @brief エンティティインターフェースインクルードファイル

#include "Mix/Scene/IRendererObject.h"

namespace Mix{ namespace Scene{

	//! @class IEntity
	//! @brief エンティティインターフェース
	class IEntity : public Mix::Scene::IRendererObject
	{
	protected:
		//! @brief デストラクタ
		virtual ~IEntity( void ) {}

	public:
		//! @name 全般
		//! @{

		//! @brief 描画するかどうかを確認します
		//! @return 描画する場合は True を返します
		virtual Boolean IsDraw( void ) const = 0;
		//! @brief 描画するかどうかを設定します
		//! @param[in] state 描画する場合は True
		virtual void SetDraw( Boolean state ) = 0;

		//! @brief ポイントライト、スポットライトによるライティングを行うかどうかを確認します
		//! @return ライティングを行う場合は True を返します
		virtual Boolean IsLocalLighting( void ) const = 0;
		//! @brief ポイントライト、スポットライトによるライティングを行うかどうかを設定します
		//! @param[in] state ライティングを行う場合は True
		virtual void SetLocalLighting( Boolean state ) = 0;

		//! @}

		//! @name 半透明
		//! @{

		//! @brief 半透明ポリゴンの描画の優先度を取得します
		//! @return 優先度を返します
		virtual UInt32 GetTransparencyPriority( void ) const = 0;
		//! @brief 半透明ポリゴンの描画の優先度を設定します
		//! @param[in] priority 優先度
		//! @note 半透明なもの同士が重なった際に優先度の高いほうを手前に描画します。
		virtual void SetTransparencyPriority( UInt32 priority ) = 0;

		//! @brief 水中かどうかを判定する際のデフォルト値を取得します
		//! @return デフォルト値を表す Mix::Scene::WATER_CONTAINS_RESULT
		//! @note 初期値は Mix::Scene::WCR_FRONT になります。
		virtual Mix::Scene::WATER_CONTAINS_RESULT GetDefaultWaterContainsResult( void ) const = 0;
		//! @brief 水中かどうかを判定する際のデフォルト値を設定します
		//! @param[in] result デフォルト値を表す Mix::Scene::WATER_CONTAINS_RESULT 列挙定数
		//! @note
		//! この設定は半透明なものに対して機能します。<br>
		//! <br>
		//! <ul>
		//! <li>Mix::Scene::WCR_UNKNOWN</li><br>
		//! 毎フレーム水中にあるかどうかを判定します。<br>
		//! <li>Mix::Scene::WCR_FRONT</li><br>
		//! 常に水面より手前にあることを意味します。<br>
		//! <li>Mix::Scene::WCR_BACK</li><br>
		//! 常に水面より奥(水中)にあることを意味します。<br>
		//! <li>Mix::Scene::WCR_OVERLAP</li><br>
		//! 常に水面と重なっている(一部が水中)ことを意味します。<br>
		//! </ul>
		virtual void SetDefaultWaterContainsResult( Mix::Scene::WATER_CONTAINS_RESULT result ) = 0;
	};

}}
