#pragma once

//! @file Mix/Scene/IActorCollider.h"
//! @brief アクターコライダーインターフェースインクルードファイル

#include "Mix/Scene/IKineticCollider.h"
#include "Mix/Dynamics/IRigidBody.h"

namespace Mix{ namespace Scene{

	//! @class IActorCollider
	//! @brief アクターコライダーインターフェース
	class IActorCollider : public Mix::Scene::IKineticCollider
	{
	protected:
		//! @brief デストラクタ
		virtual ~IActorCollider( void ) {}

	public:
		//! @brief 名前を取得します
		//! @return 名前を返します
		virtual const wchar_t* GetName( void ) const = 0;

		//! @brief 現在のフィルターグループを取得します
		//! @return 現在のフィルターグループを返します
		virtual UInt16 GetCurrentFilterGroup( void ) const = 0;
		//! @brief フィルターグループを取得します
		//! @param[in] status リジッドボディのステータスを表す Mix::Dynamics::IRigidBody::STATUS 列挙定数
		//! @return フィルターグループを返します
		virtual UInt16 GetFilterGroup( Mix::Dynamics::IRigidBody::STATUS status ) const = 0;
		//! @brief フィルターグループを設定します
		//! @param[in] status リジッドボディのステータスを表す Mix::Dynamics::IRigidBody::STATUS 列挙定数
		//! @param[in] value フィルターグループ
		//! @note
		//! 初期値はコライダー内部で使用しているリジッドボディのステータスによって異なります。<br>
		//! <pre>
		//! DEFAULT   : Mix::Dynamics::OF_DEFAULT
		//! STATIC    : Mix::Dynamics::OF_STATIC
		//! KINEMATIC : Mix::Dynamics::OF_KINEMATIC
		//! </pre>
		virtual void SetFilterGroup( Mix::Dynamics::IRigidBody::STATUS status, UInt16 value ) = 0;

		//! @brief 現在のフィルターマスクを取得します
		//! @return 現在のフィルターマスクを返します
		virtual UInt16 GetCurrentFilterMask( void ) const = 0;
		//! @brief フィルターマスクを取得します
		//! @param[in] status リジッドボディのステータスを表す Mix::Dynamics::IRigidBody::STATUS 列挙定数
		//! @return フィルターマスクを返します
		virtual UInt16 GetFilterMask( Mix::Dynamics::IRigidBody::STATUS status ) const = 0;
		//! @brief フィルターマスクを設定します
		//! @param[in] status リジッドボディのステータスを表す Mix::Dynamics::IRigidBody::STATUS 列挙定数
		//! @param[in] value フィルターマスク
		//! @note
		//! 初期値はコライダー内部で使用しているリジッドボディのステータスによって異なります。<br>
		//! <pre>
		//! DEFAULT :   Mix::Dynamics::OF_DEFAULT |
		//!             Mix::Dynamics::OF_STATIC |
		//!             Mix::Dynamics::OF_KINEMATIC |
		//!             Mix::Dynamics::OF_SENSOR</pre>
		//! <pre>
		//! STATIC :    Mix::Dynamics::OF_DEFAULT |
		//!             Mix::Dynamics::OF_KINEMATIC |
		//!             Mix::Dynamics::OF_SENSOR |
		//!             Mix::Dynamics::OF_CHARACTER |
		//!             Mix::Dynamics::OF_DEBRIS</pre>
		//! <pre>
		//! KINEMATIC : Mix::Dynamics::OF_DEFAULT |
		//!             Mix::Dynamics::OF_SENSOR</pre>
		virtual void SetFilterMask( Mix::Dynamics::IRigidBody::STATUS status, UInt16 value ) = 0;
	};

}}
