Plasma Engine  2.0
Loading...
Searching...
No Matches
ParticleEmitter.h
1#pragma once
2
3#include <Foundation/DataProcessing/Stream/ProcessingStreamProcessor.h>
4#include <Foundation/Reflection/Reflection.h>
5#include <ParticlePlugin/Module/ParticleModule.h>
6#include <ParticlePlugin/ParticlePluginDLL.h>
7
11
13class PL_PARTICLEPLUGIN_DLL plParticleEmitterFactory : public plReflectedClass
14{
15 PL_ADD_DYNAMIC_REFLECTION(plParticleEmitterFactory, plReflectedClass);
16
17public:
18 virtual const plRTTI* GetEmitterType() const = 0;
19 virtual void CopyEmitterProperties(plParticleEmitter* pEmitter, bool bFirstTime) const = 0;
20
21 plParticleEmitter* CreateEmitter(plParticleSystemInstance* pOwner) const;
22 virtual void QueryMaxParticleCount(plUInt32& out_uiMaxParticlesAbs, plUInt32& out_uiMaxParticlesPerSecond) const = 0;
23
24 virtual void Save(plStreamWriter& inout_stream) const = 0;
25 virtual void Load(plStreamReader& inout_stream) = 0;
26};
27
28enum class plParticleEmitterState
29{
30 Active,
31 Finished,
32 OnlyReacting, //< Doesn't do anything, unless there are events that trigger it. That means it is considered finished, when all other emitters are
33 //finished.
34};
35
37class PL_PARTICLEPLUGIN_DLL plParticleEmitter : public plParticleModule
38{
39 PL_ADD_DYNAMIC_REFLECTION(plParticleEmitter, plParticleModule);
40
41 friend class plParticleSystemInstance;
42 friend class plParticleEmitterFactory;
43
44protected:
45 virtual bool IsContinuous() const;
46 virtual void Process(plUInt64 uiNumElements) final override;
47
49 virtual plUInt32 ComputeSpawnCount(const plTime& tDiff) = 0;
50
52 virtual plParticleEmitterState IsFinished() = 0;
53
54 virtual void ProcessEventQueue(plParticleEventQueue queue);
55};
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
Base class for all particle emitters.
Definition ParticleEmitter.h:14
Base class for stream spawners that are used by plParticleEmitter's.
Definition ParticleEmitter.h:38
virtual plParticleEmitterState IsFinished()=0
Called before ComputeSpawnCount(). Should return true, if the emitter will never spawn any more parti...
virtual plUInt32 ComputeSpawnCount(const plTime &tDiff)=0
Called once per update. Must return how many new particles are to be spawned.
Definition ParticleModule.h:12
A particle system stores all data for one 'layer' of a running particle effect.
Definition ParticleSystemInstance.h:15
A single stream in a stream group holding contiguous data of a given type.
Definition ProcessingStream.h:8
This class holds information about reflected types. Each instance represents one type that is known t...
Definition RTTI.h:30
All classes that should be dynamically reflectable, need to be derived from this base class.
Definition DynamicRTTI.h:86
Interface for binary in (read) streams.
Definition Stream.h:22
Interface for binary out (write) streams.
Definition Stream.h:107
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12