summaryrefslogtreecommitdiff
path: root/Runtime/Graphics/ParticleSystem/Modules/EmissionModule.h
blob: 75ad977a684aa433afcc2a2f4352aec96006a534 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef SHURIKENMODULEEMISSION_H
#define SHURIKENMODULEEMISSION_H

#include "ParticleSystemModule.h"
#include "Runtime/Graphics/ParticleSystem/ParticleSystemCurves.h"

class Vector2f;

class EmissionModule : public ParticleSystemModule
{
public:
	DECLARE_MODULE (EmissionModule)
	EmissionModule ();

	enum { kEmissionTypeTime, kEmissionTypeDistance };

	static void Emit (ParticleSystemEmissionState& emissionState, size_t& amountOfParticlesToEmit, size_t& numContinuous, const ParticleSystemEmissionData& emissionData, const Vector3f velocity, float fromT, float toT, float dt, float length);
	void CheckConsistency ();

	int CalculateMaximumEmitCountEstimate(float deltaTime) const;

	const ParticleSystemEmissionData& GetEmissionDataRef() { return m_EmissionData; }
	const ParticleSystemEmissionData& GetEmissionDataRef() const { return m_EmissionData; }
	void GetEmissionDataCopy(ParticleSystemEmissionData* emissionData) { *emissionData = m_EmissionData; };
	ParticleSystemEmissionData& GetEmissionData() { return m_EmissionData; }

	template<class TransferFunction>
	void Transfer (TransferFunction& transfer);
	
private:
	ParticleSystemEmissionData m_EmissionData;
};

#endif // SHURIKENMODULEEMISSION_H