#pragma once

//! @file Mix/Dynamics/IManager.h
//! @brief ダイナミクスマネージャインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Dynamics{

	//! @class IManager
	//! @brief ダイナミクスマネージャインターフェース
	class IManager : public Mix::Reference
	{
	protected:
		//! @brief デストラクタ
		virtual ~IManager( void ){}

	public:
		//! @brief スフィアシェイプを作成します
		//! @param[in] radius 半径( radius > 0.0f )
		//! @param[out] ppSphereShape 作成されたスフィアシェイプを表す Mix::Dynamics::ISphereShape インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateSphereShape(	Float32 radius,
											Mix::Dynamics::ISphereShape** ppSphereShape,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ボックスシェイプを作成します
		//! @param[in] x X方向のサイズ( x > 0.0f )
		//! @param[in] y Y方向のサイズ( y > 0.0f )
		//! @param[in] z Z方向のサイズ( z > 0.0f )
		//! @param[out] ppBoxShape 作成されたボックスシェイプを表す Mix::Dynamics::IBoxShape インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateBoxShape(	Float32 x, Float32 y, Float32 z,
										Mix::Dynamics::IBoxShape** ppBoxShape,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ボックスシェイプを作成します
		//! @param[in] halfExtents サイズ( halfExtents.x > 0.0f halfExtents.y > 0.0f halfExtents.z > 0.0f )
		//! @param[out] ppBoxShape 作成されたボックスシェイプを表す Mix::Dynamics::IBoxShape インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateBoxShape(	const Mix::Vector3& halfExtents,
										Mix::Dynamics::IBoxShape** ppBoxShape,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @brief コーンシェイプを作成します
		//! @param[in] axis 軸を表す Mix::Dynamics::AXIS_TYPE 列挙定数
		//! @param[in] height 高さ
		//! @param[in] radius 半径
		//! @param[out] ppConeShape 作成されたコーンシェイプを表す Mix::Dynamics::IConeShape インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateConeShape(	Mix::Dynamics::AXIS_TYPE axis,
											Float32 height, 
											Float32 radius,
											Mix::Dynamics::IConeShape** ppConeShape,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief カプセルシェイプを作成します
		//! @param[in] axis カプセルの軸を表す Mix::Dynamics::AXIS_TYPE 列挙定数
		//! @param[in] height 半球の部分を含む高さ( length >= 0.0f )
		//! @param[in] radius 半径( radius > 0.0f )
		//! @param[out] ppCapsuleShape 作成されたカプセルシェイプを表す Mix::Dynamics::ICapsuleShape インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateCapsuleShape(	Mix::Dynamics::AXIS_TYPE axis,
											Float32 height,
											Float32 radius,
											Mix::Dynamics::ICapsuleShape** ppCapsuleShape,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief シリンダーシェイプを作成します
		//! @param[in] axis シリンダーの軸を表す Mix::Dynamics::AXIS_TYPE 列挙定数
		//! @param[in] height 高さ
		//! @param[in] radius 半径
		//! @param[out] ppCylinderShape 作成されたシリンダーシェイプを表す Mix::Dynamics::ICylinderShape インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateCylinderShape(	Mix::Dynamics::AXIS_TYPE axis,
												Float32 height,
												Float32 radius,
												Mix::Dynamics::ICylinderShape** ppCylinderShape,
												const wchar_t* pDebugName = NULL ) = 0;

		//! @brief コンベックスハルシェイプを作成します
		//! @param[in] mesh メッシュを表す Mix::Dynamics::MESH 構造体
		//! @param[out] ppConvexHullShape 作成されたコンベックスフルシェイプを表す Mix::Dynamics::IConvexHullShape インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateConvexHullShape(	const Mix::Dynamics::MESH& mesh,
												Mix::Dynamics::IConvexHullShape** ppConvexHullShape,
												const wchar_t* pDebugName = NULL ) = 0;

		//! @brief コンパウンドシェイプを作成します
		//! @param[out] ppCompoundShape 作成されたコンパウンドシェイプを表す Mix::Dynamics::ICompoundShape インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateCompoundShape(	Mix::Dynamics::ICompoundShape** ppCompoundShape,
												const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ポイントジョイントを作成します
		//! @param[in] pRigidBodyA 拘束するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pivotA リジッドボディＡを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[out] ppPointJoint 作成されたジョイントを表す  Mix::Dynamics::IPointJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note 作成に成功した場合、リジッドボディＡの参照カウンタを +1 します
		virtual Boolean CreatePointJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
											const Mix::Vector3& pivotA,
											Mix::Dynamics::IPointJoint** ppPointJoint,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ポイントジョイントを作成します
		//! @param[in] pRigidBodyA 拘束するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pRigidBodyB 拘束するリジッドボディＢを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pivotA リジッドボディＡを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[in] pivotB リジッドボディＢを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[out] ppPointJoint 作成されたジョイントを表す  Mix::Dynamics::IPointJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note 作成に成功した場合、リジッドボディＡとリジッドボディＢの参照カウンタを +1 します
		virtual Boolean CreatePointJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
											Mix::Dynamics::IRigidBody* pRigidBodyB,
											const Mix::Vector3& pivotA,
											const Mix::Vector3& pivotB,
											Mix::Dynamics::IPointJoint** ppPointJoint,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ヒンジジョイントを作成します
		//! @param[in] pRigidBodyA 拘束するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pivotA リジッドボディＡを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[in] axis 回転軸を表す Mix::Vector3 クラス
		//! @param[out] ppHingeJoint 作成されたジョイントを表す Mix::Dynamics::IHingeJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note 作成に成功した場合、リジッドボディＡの参照カウンタを +1 します
		virtual Boolean CreateHingeJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
											const Mix::Vector3& pivotA,
											const Mix::Vector3& axis,
											Mix::Dynamics::IHingeJoint** ppHingeJoint,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ヒンジジョイントを作成します
		//! @param[in] pRigidBodyA 拘束するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pRigidBodyB 拘束するリジッドボディＢを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pivotA リジッドボディＡを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[in] pivotB リジッドボディＢを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[in] axis 回転軸を表す Mix::Vector3 クラス
		//! @param[out] ppHingeJoint 作成されたジョイントを表す Mix::Dynamics::IHingeJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note 作成に成功した場合、リジッドボディＡとリジッドボディＢの参照カウンタを +1 します
		virtual Boolean CreateHingeJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
											Mix::Dynamics::IRigidBody* pRigidBodyB,
											const Mix::Vector3& pivotA,
											const Mix::Vector3& pivotB,
											const Mix::Vector3& axis,
											Mix::Dynamics::IHingeJoint** ppHingeJoint,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief スライダージョイントを作成します
		//! @param[in] pRigidBodyA 拘束するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] rotA リジッドボディＡを拘束する位置での回転を表す Mix::Vector3 クラス
		//! @param[in] pivotA リジッドボディＡを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[out] ppSliderJoint 作成されたジョイントを表す Mix::Dynamics::ISliderJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合 True を返します
		//! @note 作成に成功した場合、リジッドボディＡの参照カウンタを +1 します
		virtual Boolean CreateSliderJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
											const Mix::Quaternion& rotA,
											const Mix::Vector3& pivotA,
											Mix::Dynamics::ISliderJoint** ppSliderJoint,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief スライダージョイントを作成します
		//! @param[in] pRigidBodyA 拘束するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pRigidBodyB 拘束するリジッドボディＢを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] rotA リジッドボディＡを拘束する位置での回転を表す Mix::Vector3 クラス
		//! @param[in] rotB リジッドボディＢを拘束する位置での回転を表す Mix::Vector3 クラス
		//! @param[in] pivotA リジッドボディＡを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[in] pivotB リジッドボディＢを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[out] ppSliderJoint 作成されたジョイントを表す Mix::Dynamics::ISliderJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合 True を返します
		//! @note 作成に成功した場合、リジッドボディＡとリジッドボディＢの参照カウンタを +1 します
		virtual Boolean CreateSliderJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
											Mix::Dynamics::IRigidBody* pRigidBodyB,
											const Mix::Quaternion& rotA,
											const Mix::Quaternion& rotB,
											const Mix::Vector3& pivotA,
											const Mix::Vector3& pivotB,
											Mix::Dynamics::ISliderJoint** ppSliderJoint,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief DOFジョイントを作成します
		//! @param[in] pRigidBodyA 拘束するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] rotA リジッドボディＡを拘束する位置での回転を表す Mix::Vector3 クラス
		//! @param[in] pivotA リジッドボディＡを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[out] ppDofJoint 作成されたジョイントを表す Mix::Dynamics::IDofJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合 True を返します
		//! @note 作成に成功した場合、リジッドボディＡの参照カウンタを +1 します
		virtual Boolean CreateDofJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
										const Mix::Quaternion& rotA,
										const Mix::Vector3& pivotA,
										Mix::Dynamics::IDofJoint** ppDofJoint,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @brief DOFジョイントを作成します
		//! @param[in] pRigidBodyA 拘束するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pRigidBodyB 拘束するリジッドボディＢを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] rotA リジッドボディＡを拘束する位置での回転を表す Mix::Vector3 クラス
		//! @param[in] rotB リジッドボディＢを拘束する位置での回転を表す Mix::Vector3 クラス
		//! @param[in] pivotA リジッドボディＡを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[in] pivotB リジッドボディＢを拘束する位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[out] ppDofJoint 作成されたジョイントを表す Mix::Dynamics::IDofJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合 True を返します
		//! @note 作成に成功した場合、リジッドボディＡとリジッドボディＢの参照カウンタを +1 します
		virtual Boolean CreateDofJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
										Mix::Dynamics::IRigidBody* pRigidBodyB,
										const Mix::Quaternion& rotA,
										const Mix::Quaternion& rotB,
										const Mix::Vector3& pivotA,
										const Mix::Vector3& pivotB,
										Mix::Dynamics::IDofJoint** ppDofJoint,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ボールジョイントを作成します
		//! @param[in] pRigidBodyA 接合するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pivotA リジッドボディＡの接合位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[in] twistAxis ツイストの軸を表す Mix::Vector3 クラス
		//! @param[in] swingAxis スイングの軸を表す Mix::Vector3 クラス
		//! @param[out] ppBallJoint 作成されたジョイントを渡す Mix::Dynamics::IBallJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合 True を返します
		//! @note 作成に成功した場合、リジッドボディＡの参照カウンタを +1 します
		virtual Boolean CreateBallJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
											const Mix::Vector3& pivotA,
											const Mix::Vector3& twistAxis,
											const Mix::Vector3& swingAxis,
											Mix::Dynamics::IBallJoint** ppBallJoint,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ボールジョイントを作成します
		//! @param[in] pRigidBodyA 接合するリジッドボディＡを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pRigidBodyB 接合するリジッドボディＢを表す Mix::Dynamics::IRigidBody インターフェースのポインタ
		//! @param[in] pivotA リジッドボディＡの接合位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[in] pivotB リジッドボディＢの接合位置( ローカル )を表す Mix::Vector3 クラス
		//! @param[in] twistAxis ツイストの軸を表す Mix::Vector3 クラス
		//! @param[in] swingAxis スイングの軸を表す Mix::Vector3 クラス
		//! @param[out] ppBallJoint 作成されたジョイントを渡す Mix::Dynamics::IBallJoint インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合 True を返します
		//! @note 作成に成功した場合、リジッドボディＡとリジッドボディＢの参照カウンタを +1 します
		virtual Boolean CreateBallJoint(	Mix::Dynamics::IRigidBody* pRigidBodyA,
											Mix::Dynamics::IRigidBody* pRigidBodyB,
											const Mix::Vector3& pivotA,
											const Mix::Vector3& pivotB,
											const Mix::Vector3& twistAxis,
											const Mix::Vector3& swingAxis,
											Mix::Dynamics::IBallJoint** ppBallJoint,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ワールドを作成します
		//! @param[in] config ワールドの設定を表す Mix::Dynamics::WORLD_CONFIG 構造体
		//! @param[out] ppWorld 作成したワールドを表す Mix::Dynamics::IWorld インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateWorld( const Mix::Dynamics::WORLD_CONFIG& config, Mix::Dynamics::IWorld** ppWorld, const wchar_t* pDebugName = NULL ) = 0;

		//! @brief スタティックプレーンを作成します
		//! @param[in] normal 面の法線
		//! @param[in] constant 面の法線方向へのオフセット
		//! @param[out] ppStaticPlane 作成したスタティックプレーンを渡す Mix::Dynamics::IStaticPlane インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateStaticPlane(	const Mix::Vector3& normal,
											Float32 constant,
											Mix::Dynamics::IStaticPlane** ppStaticPlane,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief スタティックメッシュを作成します
		//! @param[in] meshes メッシュを表す Mix::Dynamics::MESH 構造体の配列
		//! @param[in] meshNum メッシュ数
		//! @param[in] materialNum マテリアル数
		//! @param[out] ppStaticMesh 作成したスタティックメッシュを渡す Mix::Dynamics::IStaticMesh インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateStaticMesh(	const Mix::Dynamics::MESH* meshes,
											UInt32 meshNum,
											UInt32 materialNum,
											Mix::Dynamics::IStaticMesh** ppStaticMesh,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief スタティックメッシュを作成します
		//! @param[in] pBuffer メモリ内のファイルを表す Mix::Memory::IBuffer インターフェースのポインタ
		//! @param[in] materialNum マテリアル数
		//! @param[out] ppStaticMesh 作成したスタティックメッシュを渡す Mix::Dynamics::IStaticMesh インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note pBuffer の内容は btBvhTriangleMeshShape をシリアライズしたものになります。
		virtual Boolean CreateStaticMesh(	Mix::Memory::IBuffer* pBuffer,
											UInt32 materialNum,
											Mix::Dynamics::IStaticMesh** ppStaticMesh,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief リジッドボディを作成します
		//! @param[in] mass 質量
		//! @param[in] pShape リジッドボディの形状を現す Mix::Dynamics::IShape インターフェースのポインタ
		//! @param[out] ppRigidBody 作成されたリジッドボディを表す Mix::Dynamics::IRigidBody インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note 作成に成功した場合、シェイプの参照カウンタを +1 します
		virtual Boolean CreateRigidBody(	Float32 mass,
											Mix::Dynamics::IShape* pShape,
											Mix::Dynamics::IRigidBody** ppRigidBody,
											const wchar_t* pDebugName = NULL ) = 0;

		//! @brief センサーを作成します
		//! @param[in] pShape 形状を表す Mix::Dynamics::IShape インターフェースのポインタ
		//! @param[out] ppSensor 作成されたセンサーを渡す Mix::Dynamics::ISensor インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note 作成に成功した場合、シェイプの参照カウンタを +1 します
		virtual Boolean CreateSensor(	Mix::Dynamics::IShape* pShape,
										Mix::Dynamics::ISensor** ppSensor,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @brief キネマティックキャラクターを作成します
		//! @param[in] height 身長
		//! @param[in] radius 半径
		//! @param[in] stepHeight 上ることができる段差の高さ
		//! @param[out] ppKinematicCharacter 作成されたキネマティックキャラクターを渡す Mix::Dynamics::IKinematicCharacter インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateKinematicCharacter(	Float32 height,
													Float32 radius,
													Float32 stepHeight,
													Mix::Dynamics::IKinematicCharacter** ppKinematicCharacter,
													const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ビハイクルを作成します
		//! @param[in] mass 質量( mass > 0.0f )
		//! @param[in] pShape 車体の形状を表す Mix::Dynamics::IShape インターフェースのポインタ
		//! @param[in] wheels ホイールを表す Mix::Dynamics::VEHICLE_WHEEL_DESC 構造体の配列
		//! @param[in] wheelNum ホイールの数
		//! @param[out] ppVehicle 作成したビハイクルを表す Mix::Dynamics::IVehicle インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateVehicle(	Float32 mass,
										Mix::Dynamics::IShape* pShape,
										const Mix::Dynamics::VEHICLE_WHEEL_DESC* wheels,
										UInt32 wheelNum,
										Mix::Dynamics::IVehicle** ppVehicle,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @brief オブジェクトドラッガーを作成します
		//! @param[in] pWorld ドラッグに使用するワールドを表す Mix::Dynamics::IWorld インターフェースのポインタ
		//! @param[out] ppObjectDragger 作成したオブジェクトドラッガーを渡す Mix::Dynamics::IObjectPicker インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note 作成に成功した場合は ワールドの参照カウンタを +1 します
		virtual Boolean CreateObjectDragger(	Mix::Dynamics::IWorld* pWorld,
												Mix::Dynamics::IObjectDragger** ppObjectDragger,
												const wchar_t* pDebugName = NULL ) = 0;

	public:
		//! @brief デバッグ描画の色を取得します
		//! @param[in] type 取得する色のタイプを表す Mix::Dynamics::DEBUG_DRAW_COLOR_TYPE 列挙定数
		//! @return 取得した色を表す Mix::Vector4 クラスを返します
		virtual const Mix::Vector4& Debug_GetDrawColor( Mix::Dynamics::DEBUG_DRAW_COLOR_TYPE type ) const = 0;
		//! @brief デバッグ描画の色を設定します
		//! @param[in] type 設定する色のタイプを表す Mix::Dynamics::DEBUG_DRAW_COLOR_TYPE 列挙定数
		//! @param[in] color 設定する色を表す Mix::Vector4 クラスを返します
		virtual void Debug_SetDrawColor( Mix::Dynamics::DEBUG_DRAW_COLOR_TYPE type, const Mix::Vector4& color ) = 0;
	};

}}
