#pragma once

//! @file Mix/Scene/ILibertyCollider.h"
//! @brief リバティコライダーインターフェースインクルードファイル

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

namespace Mix{ namespace Scene{

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

	public:
		//! @brief シミュレーションが有効かどうかを取得します
		//! @return 有効な場合は True を返します
		virtual Boolean IsSimulationEnabled( void ) const = 0;
		//! @brief シミュレーションを有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetSimulationEnabled( Boolean state ) = 0;

		//! @brief 状態を取得します
		//! @return 状態を表す Mix::Dynamics::IRigidBody::STATUS 列挙定数を返します
		virtual Mix::Dynamics::IRigidBody::STATUS GetStatus( void ) const = 0;
		//! @brief 状態を設定します
		//! @param[in] status 状態を表す Mix::Dynamics::IRigidBody::STATUS 列挙定数
		//! @return 成功した場合は True を返します
		//! @note 質量が０の状態でステータスをデフォルトに設定しようとした場合、このメソッドは False を返します
		virtual Boolean SetStatus( Mix::Dynamics::IRigidBody::STATUS status ) = 0;

		//! @brief フィルターグループを取得します
		//! @return フィルターグループを返します
		virtual UInt16 GetFilterGroup( void ) const = 0;
		//! @brief フィルターグループを設定します
		//! @param[in] filterGroup フィルターグループ
		virtual void SetFilterGroup( UInt16 filterGroup ) = 0;

		//! @brief フィルターマスクを取得します
		//! @return フィルターマスクを返します
		virtual UInt16 GetFilterMask( void ) const = 0;
		//! @brief フィルターマスクを設定します
		//! @param[in] filterMask フィルターマスク
		virtual void SetFilterMask( UInt16 filterMask ) = 0;
	};

}}
