#pragma once

#include "Type.h"

class CEmitterProperty
{
	friend class CParticleSystemData;
	friend class CParticleSystemInstance;
	public:
		enum
		{
			EMITTER_SHAPE_POINT,
			EMITTER_SHAPE_ELLIPSE,
			EMITTER_SHAPE_SQUARE,
			EMITTER_SHAPE_SPHERE,
		};

		enum
		{
			EMITTER_ADVANCED_TYPE_FREE,
			EMITTER_ADVANCED_TYPE_OUTER,
			EMITTER_ADVANCED_TYPE_INNER,
		};

	public:
		CEmitterProperty();
		virtual ~CEmitterProperty();

		void Clear();

		DWORD GetMaxEmissionCount()
		{
			return m_dwMaxEmissionCount;
		}
		
		float GetCycleLength()
		{
			return m_fCycleLength;
		}

		BOOL isCycleLoop()
		{
			return m_bCycleLoopFlag;
		}
			
		int	GetLoopCount()
		{
			return m_iLoopCount;
		}
			

		BYTE GetEmitterShape();
		BYTE GetEmitterAdvancedType();
		BOOL isEmitFromEdge();

		void GetEmittingSize(float fTime, float * pfValue);
		void GetEmittingAngularVelocity(float fTime, float * pfValue);

		void GetEmittingDirectionX(float fTime, float * pfValue);
		void GetEmittingDirectionY(float fTime, float * pfValue);
		void GetEmittingDirectionZ(float fTime, float * pfValue);
		void GetEmittingVelocity(float fTime, float * pfValue);
		void GetEmissionCountPerSecond(float fTime, float * pfValue);
		void GetParticleLifeTime(float fTime, float * pfValue);
		void GetParticleSizeX(float fTime, float * pfValue);
		void GetParticleSizeY(float fTime, float * pfValue);

	/////

		DWORD m_dwMaxEmissionCount;

		float m_fCycleLength;
		BOOL m_bCycleLoopFlag;
		int	m_iLoopCount;

		BYTE m_byEmitterShape;
		BYTE m_byEmitterAdvancedType;
		BOOL m_bEmitFromEdgeFlag;
		D3DXVECTOR3 m_v3EmittingSize;
		float m_fEmittingRadius;

		D3DXVECTOR3 m_v3EmittingDirection;

		//TTimeEventTableFloat m_TimeEventEmittingRadius;
		TTimeEventTableFloat m_TimeEventEmittingSize;
		TTimeEventTableFloat m_TimeEventEmittingAngularVelocity;
		TTimeEventTableFloat m_TimeEventEmittingDirectionX;
		TTimeEventTableFloat m_TimeEventEmittingDirectionY;
		TTimeEventTableFloat m_TimeEventEmittingDirectionZ;
		TTimeEventTableFloat m_TimeEventEmittingVelocity;
		TTimeEventTableFloat m_TimeEventEmissionCountPerSecond;
		TTimeEventTableFloat m_TimeEventLifeTime;
		TTimeEventTableFloat m_TimeEventSizeX;
		TTimeEventTableFloat m_TimeEventSizeY;
};
