#pragma once

//! @file Mix/Scene/IScatterParticle.h
//! @brief スキャッターパーティクルインターフェースインクルードファイル

#include "Mix/Scene/IParticle.h"

namespace Mix{ namespace Scene{

	//! @class IScatterParticle
	//! @brief スキャッターパーティクルインターフェース
	//! @note
	//! 散布タイプのパーティクルになります。<br>
	//! 雨が地面に接触した際の雫などの小さく、時妙の短い広範囲にわたった表現などに最適です。
	class IScatterParticle : public Mix::Scene::IParticle
	{
	public:
		//! @struct STATE
		//! @brief ステート構造体
		struct STATE
		{
			UInt32 unitCount;		//!< ユニット数
			UInt32 unitCapacity;	//!< ユニットのキャパシティ

			UInt32 quadCount;		//!< クワッドの数
			UInt32 quadCapacity;	//!< クワッドの数
		};

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

	public:
		//! @brief 発生している全てのユニットをクリアします
		virtual void Clear( void ) = 0;

		//! @brief ユニットを発生させます
		//! @param[in] worldMat ユニットのワールドトランスフォームを表す Mix::Matrix4x4 クラス
		virtual void Emit( const Mix::Matrix4x4& worldMat ) = 0;
		//! @brief ユニットを発生させます
		//! @param[in] worldMat ユニットのワールドトランスフォームを表す Mix::Matrix4x4 クラス
		//! @param[in] genNum 生成する数
		virtual void Emit( const Mix::Matrix4x4& worldMat, UInt32 genNum ) = 0;

		//! @brief ステータスを取得します
		//! @return ステータスを表す Mix::Scene::IScatterParticle::STATE 構造体を返します
		virtual const Mix::Scene::IScatterParticle::STATE& GetState( void ) const = 0;
	};

}}
