#pragma once

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

#include "Mix/Reference.h"
#include "Mix/Scene/ISkyDome.h"
#include "Mix/Scene/IFlowerPackage.h"
#include "Mix/Scene/IPlanter.h"
#include "Mix/Scene/IDefaultParticleSystem.h"

namespace Mix{ namespace Scene{

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

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

		//! @brief エフェクトパッケージを作成します
		//! @param[in] pDirPath ディレクトリパス
		//! @param[in] pName 名前( シェーダーモデルの番号、拡張子は含まない )
		//! @param[out] ppEffectPackage 作成したエフェクトパッケージを渡す Mix::Scene::IEffectPackage インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateEffectPackage(	const wchar_t* pDirPath, const wchar_t* pName,
												Mix::Scene::IEffectPackage** ppEffectPackage ) = 0;

		//! @brief レンダラーを作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] config レンダラーの設定を表す Mix::Scene::RENDERER_CONFIG 構造体
		//! @param[in] ppRenderer 作成したレンダラーを渡す Mix::Scene::IRenderer インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateRenderer( Mix::Scene::IEffectPackage* pEffectPackage,
										const Mix::Scene::RENDERER_CONFIG& config,
										Mix::Scene::IRenderer** ppRenderer,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @}

		//! @name カメラ
		//! @{

		//! @brief ユニバーサルカメラを作成します
		//! @param[in] config 設定を表す Mix::Scene::CAMERA_CONFIG 構造体
		//! @param[out] ppCamera 作成したユニバーサルカメラを渡す Mix::Scene::IUniversalCamera インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateUniversalCamera( const Mix::Scene::CAMERA_CONFIG& config, Mix::Scene::IUniversalCamera** ppCamera, const wchar_t* pDebugName = NULL ) = 0;
		//! @brief ビューカメラを作成します
		//! @param[in] config 設定を表す Mix::Scene::CAMERA_CONFIG 構造体
		//! @param[out] ppCamera 作成したビューカメラを渡す Mix::Scene::IViewCamera インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateViewCamera( const Mix::Scene::CAMERA_CONFIG& config, Mix::Scene::IViewCamera** ppCamera, const wchar_t* pDebugName = NULL ) = 0;

		//! @}

		//! @name ライト
		//! @{

		//! @brief 半球ライトを作成します
		//! @param[out] ppLight 取得した半球ライトを渡す Mix::Scene::IHemisphereLight インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateHemisphereLight( Mix::Scene::IHemisphereLight** ppLight, const wchar_t* pDebugName = NULL ) = 0;
		//! @brief ディレクショナルライトを作成します
		//! @param[out] ppLight 取得したディクショナルライトを渡す Mix::Scene::IDirectionalLight インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateDirectionalLight( Mix::Scene::IDirectionalLight** ppLight, const wchar_t* pDebugName = NULL ) = 0;

		//! @brief スポットライトを作成します
		//! @param[in] ppLight 作成したスポットライトを渡す Mix::Scene::ISpotLight インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreatePointLight( Mix::Scene::IPointLight** ppLight, const wchar_t* pDebugName = NULL ) = 0;
		//! @brief ポイントライトを作成します
		//! @param[in] ppLight 作成したポイントライトを渡す Mix::Scene::IPointLight インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateSpotLight( Mix::Scene::ISpotLight** ppLight, const wchar_t* pDebugName = NULL ) = 0;

		//! @}

		//! @name スカイドーム
		//! @{

		//! @brief スカイドームを作成します
		//! @param[in] radius 水平線の半径
		//! @param[in] height 地表からの高さ
		//! @param[in] heQuality 半球のクォリティを表す Mix::Scene::ISkyDome::QUALITY 列挙定数
		//! @param[out] ppSkyDome 作成したスカイドームを渡す Mix::Scene::ISkyDome インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateSkyDome(	Float32 radius, Float32 height,
										Mix::Scene::ISkyDome::QUALITY heQuality,
										Mix::Scene::ISkyDome** ppSkyDome,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @brief スカイドームを作成します
		//! @param[in] radius 水平線の半径
		//! @param[in] height 地表からの高さ
		//! @param[in] heQuality 半球のクォリティを表す Mix::Scene::ISkyDome::QUALITY 列挙定数
		//! @param[in] paQuality 遠景のクォリティを表す Mix::Scene::ISkyDome::QUALITY 列挙定数
		//! @param[out] ppSkyDome 作成したスカイドームを渡す Mix::Scene::ISkyDome インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateSkyDome(	Float32 radius, Float32 height,
										Mix::Scene::ISkyDome::QUALITY heQuality,
										Mix::Scene::ISkyDome::QUALITY paQuality,
										Mix::Scene::ISkyDome** ppSkyDome,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @}

		//! @name パーティクル
		//! @{

		//! @brief デフォルトパーティクルシステムを作成します
		//! @param[in] bSimWorldSpace 発生元の回転、移動の影響を受けない場合は True
		//! @param[in] planeType プレーンの種類を表す Mix::Scene::IDefaultParticleSystem::PLANE_TYPE 列挙定数
		//! @param[out] ppSystem 作成したパーティクルシステムを渡す Mix::Scene::IDefaultParticleSystem インターフェースのポインタ
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateDefaultParticleSystem( Boolean bSimWorldSpace, Mix::Scene::IDefaultParticleSystem::PLANE_TYPE planeType, Mix::Scene::IDefaultParticleSystem** ppSystem, const wchar_t* pDebugName = NULL ) = 0;
		//! @brief ビルボードパーティクルシステムを作成します
		//! @param[in] bSimWorldSpace 発生元の回転、移動の影響を受けない場合は True
		//! @param[out] ppSystem 作成したパーティクルシステムを渡す Mix::Scene::IBillboardParticleSystem インターフェースのポインタ
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateBillboardParticleSystem( Boolean bSimWorldSpace, Mix::Scene::IBillboardParticleSystem** ppSystem, const wchar_t* pDebugName = NULL ) = 0;

		//! @brief リービングパーティクルを作成します
		//! @param[in] pMaterial リービングパーティクルで使用するマテリアルを表す Mix::Scene::IMaterial* pMaterial インターフェースのポインタ
		//! @param[in] pSystem パーティクルシステムを表す Mix::Scene::IParticleSystem インターフェースのポインタ
		//! @param[out] ppParticle 作成したリービングパーティクルを渡す Mix::Scene::ILeavingParticle インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateLeavingParticle( Mix::Scene::IMaterial* pMaterial, Mix::Scene::IParticleSystem* pSystem, Mix::Scene::ILeavingParticle** ppParticle, const wchar_t* pDebugName = NULL ) = 0;
		//! @brief スキャッターパーティクルを作成します
		//! @param[in] pMaterial スキャッターパーティクルで使用するマテリアルを表す Mix::Scene::IMaterial* pMaterial インターフェースのポインタ
		//! @param[in] pSystem パーティクルシステムを表す Mix::Scene::IParticleSystem インターフェースのポインタ
		//! @param[out] ppParticle 作成したスキャッターパーティクルを渡す Mix::Scene::IScatterParticle インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateScatterParticle( Mix::Scene::IMaterial* pMaterial, Mix::Scene::IParticleSystem* pSystem, Mix::Scene::IScatterParticle** ppParticle, const wchar_t* pDebugName = NULL ) = 0;

		//! @}

		//! @name プランター
		//! @{

		//! @brief フラワーパッケージを作成します
		//! @param[in] pMaterial マテリアル
		//! @param[in] numModel モデルの数
		//! @param[in] models モデルを表す Mix::Scene::IFlowerPackage::MODEL 構造体の配列
		//! @param[out] ppFlowerPackage 作成したフラワーパッケージを渡す Mix::Scene::IFlowerPackage インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateFlowerPackage(	Mix::Scene::IMaterial* pMaterial,
												UInt32 numModel, const Mix::Scene::IFlowerPackage::MODEL* models,
												Mix::Scene::IFlowerPackage** ppFlowerPackage,
												const wchar_t* pDebugName = NULL ) = 0;

		//! @brief プランターを作成します
		//! @param[in] pFlowerPackage フラワーパッケージを表す Mix::Scene::IFlowerPackage インターフェースのポインタ
		//! @param[out] ppPlanter 追加したプランターを渡す Mix::Scene::IPlanter インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreatePlanter(	Mix::Scene::IFlowerPackage* pFlowerPackage,
										Mix::Scene::IPlanter** ppPlanter,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @brief プランターを作成します
		//! @param[in] pFlowerPackage フラワーパッケージを表す Mix::Scene::IFlowerPackage インターフェースのポインタ
		//! @param[in] numUnit ユニット数
		//! @param[in] units ユニットを表す Mix::Scene::IPlanter::UNIT 構造体の配列
		//! @param[in] worldMat ワールド行列
		//! @param[out] ppPlanter 追加したプランターを渡す Mix::Scene::IPlanter インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreatePlanter(	Mix::Scene::IFlowerPackage* pFlowerPackage,
										UInt32 numUnit, const Mix::Scene::IPlanter::UNIT* units,
										const Mix::Matrix4x4& worldMat,
										Mix::Scene::IPlanter** ppPlanter,
										const wchar_t* pDebugName = NULL ) = 0;

		//! @}

		//! @name アクターモデル
		//! @{

		//! @brief アクターモデルをファイルから作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] pFilePath ファイルパス
		//! @param[out] ppModel 作成したアクターモデルを渡す Mix::Scene::IActorModel インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateActorModelFromFile( Mix::Scene::IEffectPackage* pEffectPackage, const wchar_t* pFilePath, Mix::Scene::IActorModel** ppModel ) = 0;
		//! @brief アクターモデルをファイルから作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] pReader リーダーを表す Mix::IO::IReader インターフェースのポインタ
		//! @param[out] ppModel 作成したアクターモデルを渡す Mix::Scene::IActorModel インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateActorModelFromReader( Mix::Scene::IEffectPackage* pEffectPackage, Mix::IO::IReader* pReader, Mix::Scene::IActorModel** ppModel ) = 0;
		//! @brief アクターモデルをメモリ内のファイルから作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] pFilePath ファイルパス
		//! @param[in] pSrc メモリ内のファイルのポインタ
		//! @param[in] srcSize メモリ内のファイルのサイズ
		//! @param[out] ppModel 作成したアクターモデルを渡す Mix::Scene::IActorModel インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateActorModelFromMemory( Mix::Scene::IEffectPackage* pEffectPackage, const wchar_t* pFilePath, const void* pSrc, UInt32 srcSize, Mix::Scene::IActorModel** ppModel ) = 0;

		//! @}

		//! @name テラインモデル
		//! @{

		//! @brief テラインモデルをファイルから作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] pFilePath ファイルパス
		//! @param[out] ppModel 作成したテラインモデルを渡す Mix::Scene::ITerrainModel インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateTerrainModelFromFile( Mix::Scene::IEffectPackage* pEffectPackage, const wchar_t* pFilePath, Mix::Scene::ITerrainModel** ppModel ) = 0;
		//! @brief テラインモデルをリーダーから作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] pReader リーダーを表す Mix::IO::IReader インターフェースのポインタ
		//! @param[out] ppModel 作成したテラインモデルを渡す Mix::Scene::ITerrainModel インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateTerrainModelFromReader( Mix::Scene::IEffectPackage* pEffectPackage, Mix::IO::IReader* pReader, Mix::Scene::ITerrainModel** ppModel ) = 0;
		//! @brief テラインモデルをメモリ内のファイルから作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] pFilePath ファイルパス
		//! @param[in] pSrc メモリ内のファイルのポインタ
		//! @param[in] srcSize メモリ内のファイルのサイズ
		//! @param[out] ppModel 作成したテラインモデルを渡す Mix::Scene::ITerrainModel インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateTerrainModelFromMemory( Mix::Scene::IEffectPackage* pEffectPackage, const wchar_t* pFilePath, const void* pSrc, UInt32 srcSize, Mix::Scene::ITerrainModel** ppModel ) = 0;

		//! @}

		//! @name ビジュアルエフェクト
		//! @{

		//! @brief ライトシャフトキャスターを作成します
		//! @param[out] ppLightShaftsCaster 作成したライトシャフトキャスターを渡す Mix::Scene::ILightShaftsCaster インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateLightShaftsCaster( Mix::Scene::ILightShaftsCaster** ppLightShaftsCaster, const wchar_t* pDebugName = NULL ) = 0;

		//! @brief ウォータープールを作成します
		//! @param[in] halfExtents 各XYZ方向の半分の長さ
		//! @param[in] worldPos ワールド空間の位置を表す Mix::Vector3 クラス
		//! @param[out] ppWaterPool 追加したウォータープールを渡す Mix::Scene::IWaterPool インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateWaterPool( const Mix::Vector3& halfExtents, Mix::Vector3& worldPos, Mix::Scene::IWaterPool** ppWaterPool, const wchar_t* pDebugName = NULL ) = 0;
		//! @brief ウォータープールを作成します
		//! @param[in] pContext コンテキストを表す Mix::Scene::IWaterPoolContext インターフェースのポインタ
		//! @param[in] worldMat ワールド行列を表す Mix::Matrix4x4 クラス
		//! @param[out] ppWaterPool 追加したウォータープールを渡す Mix::Scene::IWaterPool インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		virtual Boolean CreateWaterPool( Mix::Scene::IWaterPoolContext* pContext, const Mix::Matrix4x4& worldMat, Mix::Scene::IWaterPool** ppWaterPool, const wchar_t* pDebugName = NULL ) = 0;

		//! @}

		//! @name フロア
		//! @{

		//! @brief フロアを作成します
		//! @param[out] ppFloor 作成したフロアを渡す Mix::Scene::IFloor インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note
		//! normal( 0.0f, 1.0f, 0.0f) offset( 0.0f ) で作成します<br>
		//! また作成に成功した場合 フロアの参照カウンタを +1 します
		virtual Boolean CreateFloor( Mix::Scene::IFloor** ppFloor, const wchar_t* pDebugName = NULL ) = 0;
		//! @brief フロアを作成します
		//! @param[in] normal 法線
		//! @param[in] offset 法線方向へのオフセット
		//! @param[out] ppFloor 作成したフロアを渡す Mix::Scene::IFloor インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note 作成に成功した場合 フロアの参照カウンタを +1 します
		virtual Boolean CreateFloor( const Mix::Vector3& normal, Float32 offset, Mix::Scene::IFloor** ppFloor, const wchar_t* pDebugName = NULL ) = 0;

		//! @}

		//! @name ゴースト
		//! @{

		//! @brief ベイシスゴーストを作成します
		//! @param[in] pShape シェイプを表す Mix::Dynamics::IShape インターフェースのポインタ
		//! @param[in] bCollide 衝突を行う場合は True
		//! @param[out] ppGhost 追加したゴーストを表す Mix::Scene::IGhost インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note
		//! 衝突するゴースト( bCollide == True )として追加した場合は、コライダーとして動作し、<br>
		//! Mix::Scene::IGhost::GetDynamicsObject で取得できるインターフェースは Mix::Scene::ILibertyCollider になります。<br>
		//! また、衝突しないゴースト( bCollide == False )として追加した場合は、センサーとして動作し、<br>
		//! Mix::Scene::IGhost::GetDynamicsObject で取得できるインターフェースは Mix::Scene::ISimpleSensor になります。<br>
		//! <br>
		//! 追加に成功したゴーストは、参照カウンタを +1 します。
		virtual Boolean CreateBasisGhost( Mix::Dynamics::IShape* pShape, Boolean bCollide, Mix::Scene::IGhost** ppGhost, const wchar_t* pDebugName = NULL ) = 0;
		//! @brief キネマティックゴーストを作成します
		//! @param[in] height カプセルの高さ
		//! @param[in] radius カプセルの半径
		//! @param[in] stepHeight 上れる段差の高さ
		//! @param[out] ppGhost 追加したゴーストを表す Mix::Scene::IGhost インターフェースのポインタのアドレス
		//! @param[in] pDebugName デバッグ名
		//! @return 成功した場合は True を返します
		//! @note
		//! キネマティックキャラクターとして動作するため、シェイプとして使用するカプセルはＹ軸限定であり、<br>
		//! Mix::Scene::IGhost::GetDynamicsObject で取得できるインターフェースは Mix::Scene::ISimpleKinematicCharacter になります。<br>
		//! <br>
		//! 追加に成功したゴーストは、参照カウンタを +1 します。
		virtual Boolean CreateKinematicGhost( Float32 height, Float32 radius, Float32 stepHeight, Mix::Scene::IGhost** ppGhost, const wchar_t* pDebugName = NULL ) = 0;

		//! @}

		//! @name マテリアル
		//! @{

		//! @brief マテリアルをファイルから作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] pFilePath マテリアルのファイルパス
		//! @param[out] ppMaterial 作成したマテリアルを渡す Mix::Scene::IMaterial インターフェースのポインタのアドレス
		//! @return 成功した場合は True を返します
		virtual Boolean CreateMaterialFromFile( Mix::Scene::IEffectPackage* pEffectPackage, const wchar_t* pFilePath, Mix::Scene::IMaterial** ppMaterial ) = 0;
		//! @brief マテリアルをリーダーから作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] pReader リーダーを表す Mix::IO::IReader インターフェースのポインタ
		//! @param[out] ppMaterial 作成したマテリアルを渡す Mix::Scene::IMaterial インターフェースのポインタのアドレス
		//! @return 成功した場合は True を返します
		virtual Boolean CreateMaterialFromReader( Mix::Scene::IEffectPackage* pEffectPackage, Mix::IO::IReader* pReader, Mix::Scene::IMaterial** ppMaterial ) = 0;
		//! @brief マテリアルをメモリ内のファイルから作成します
		//! @param[in] pEffectPackage エフェクトパッケージを表す Mix::Scene::IEffectPackage インターフェースのポインタ
		//! @param[in] pFilePath ファイルパス
		//! @param[in] pSrc メモリ内のファイルのポインタ
		//! @param[in] srcSize メモリ内のファイルのサイズ
		//! @param[out] ppMaterial 作成したマテリアルを渡す Mix::Scene::IMaterial インターフェースのポインタのアドレス
		//! @return 成功した場合は True を返します
		virtual Boolean CreateMaterialFromMemory( Mix::Scene::IEffectPackage* pEffectPackage, const wchar_t* pFilePath, const void* pSrc, UInt32 srcSize, Mix::Scene::IMaterial** ppMaterial ) = 0;

		//! @}

		//! @name モーション
		//! @{

		//! @brief モーションをファイルから作成します
		//! @param[in] pFilePath ファイルパス
		//! @param[out] ppMotion 作成したモーションを渡す Mix::Scene::IMotion インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateMotionFromFile( const wchar_t* pFilePath, Mix::Scene::IMotion** ppMotion ) = 0;
		//! @brief モーションをファイルから作成します
		//! @param[in] pReader リーダーを表す Mix::IO::IReader インターフェースのポインタ
		//! @param[out] ppMotion 作成したモーションを渡す Mix::Scene::IMotion インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateMotionFromReader( Mix::IO::IReader* pReader, Mix::Scene::IMotion** ppMotion ) = 0;
		//! @brief モーションをメモリ内のファイルから作成します
		//! @param[in] pFilePath ファイルパス
		//! @param[in] pSrc メモリ内のファイルのポインタ
		//! @param[in] srcSize メモリ内のファイルのサイズ
		//! @param[out] ppMotion 作成したモーションを渡す Mix::Scene::IMotion インターフェースのポインタのアドレス
		//! @return 作成に成功した場合は True を返します
		virtual Boolean CreateMotionFromMemory( const wchar_t* pFilePath, const void* pSrc, UInt32 srcSize, Mix::Scene::IMotion** ppMotion ) = 0;

		//! @}

		//! @name デバッグ
		//! @{

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

		//! @}
	};

}}
