#pragma once

//! @file Mix/Scene/IBillboardParticleSystem.h"
//! @brief ビルボードパーティクルシステムインターフェースインクルードファイル

#include "Mix/Scene/ISimpleParticleSystem.h"

namespace Mix{ namespace Scene{

	//! @class IBillboardParticleSystem
	//! @brief ビルボードパーティクルシステムインターフェース
	//! @note
	//! 常にカメラの方向を向いたパーティクルを生成、処理します。<br>
	//! そのためラィティングは行えず( 法線、接線、従法線は無効 )、設定されるマテリアルは常にシェードレスである必要があります。
	class IBillboardParticleSystem : public Mix::Scene::ISimpleParticleSystem
	{
	protected:
		//! @brief デストラクタ
		virtual ~IBillboardParticleSystem( void ) {}

	public:
		//! @brief 回転の最小撃力を取得します
		//! @return 回転の最小撃力を返します
		virtual Float32 GetMinAngularImpulse( void ) const = 0;
		//! @brief 回転の最大撃力を取得します
		//! @return 回転の最大撃力を返します
		virtual Float32 GetMaxAngularImpulse( void ) const = 0;
		//! @brief 回転の撃力を設定します
		//! @param[in] minImpulse 最小撃力
		//! @param[in] maxImpulse 最大撃力
		//! @note 回転の初速に影響します
		virtual void SetAngularImpulse( Float32 minImpulse, Float32 maxImpulse ) = 0;

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

}}
