#pragma once

//! @file Mix/Scene/IDefaultParticleSystem.h"
//! @brief デフォルトパーティクルプロデューサーインターフェースインクルードファイル

#include "Mix/Scene/ISimpleParticleSystem.h"

namespace Mix{ namespace Scene{

	//! @class IDefaultParticleSystem
	//! @brief デフォルトパーティクルプロデューサーインターフェース
	//! @note
	//! ライティングが可能なパーティクルを生成、処理します。<br>
	//! またライティングに必要な法線に続き、接線、従法線が有効であり、バンプマッピングもできます。
	class IDefaultParticleSystem : public Mix::Scene::ISimpleParticleSystem
	{
	public:
		//! @enum PLANE_TYPE
		//! @brief プレーンタイプ列挙定数
		enum PLANE_TYPE
		{
			P_XY = 0,	//!< XY平面
			P_XZ = 1,	//!< XZ平面
			P_YZ = 2,	//!< YZ平面
		};

	protected:
		//! @brief デストラクタ
		virtual ~IDefaultParticleSystem( void ) {}

	public:
		//! @brief 回転の最小撃力を取得します
		//! @return 撃力を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetMinAngularImpulse( void ) const = 0;
		//! @brief 回転の最大撃力を取得します
		//! @return 撃力を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetMaxAngularImpulse( void ) const = 0;
		//! @brief 回転の撃力を設定します
		//! @param[in] minImpulse 最小撃力を表す Mix::Vector3 クラス
		//! @param[in] maxImpulse 最大撃力を表す Mix::Vector3 クラス
		virtual void SetAngularImpulse( const Mix::Vector3& minImpulse, const Mix::Vector3& maxImpulse ) = 0;

		//! @brief 回転の最小加速度を取得します
		//! @return 加速度を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetMinAngularAcceleration( void ) const = 0;
		//! @brief 回転の最大加速度を取得します
		//! @return 加速度を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetMaxAngularAcceleration( void ) const = 0;
		//! @brief 回転の加速度を設定します
		//! @param[in] minAcc 最小加速度を表す Mix::Vector3 クラス
		//! @param[in] maxAcc 最大加速度を表す Mix::Vector3 クラス
		virtual void SetAngularAcceleration( const Mix::Vector3& minAcc, const Mix::Vector3& maxAcc ) = 0;

		//! @brief プレーンの種類を取得します
		//! @return 種類を表す Mix::Scene::IDefaultParticleSystem::PLANE_TYPE 列挙定数を返します
		virtual Mix::Scene::IDefaultParticleSystem::PLANE_TYPE GetPlaneType( void ) const = 0;
	};

}}
