Plasma Engine  2.0
Loading...
Searching...
No Matches
ParticleModule.h
1#pragma once
2
3#include <Foundation/DataProcessing/Stream/ProcessingStream.h>
4#include <Foundation/DataProcessing/Stream/ProcessingStreamProcessor.h>
5#include <ParticlePlugin/Declarations.h>
6#include <ParticlePlugin/Effect/ParticleEffectInstance.h>
7#include <ParticlePlugin/ParticlePluginDLL.h>
8
10
11class PL_PARTICLEPLUGIN_DLL plParticleModule : public plProcessingStreamProcessor
12{
13 PL_ADD_DYNAMIC_REFLECTION(plParticleModule, plProcessingStreamProcessor);
14
15 friend class plParticleSystemInstance;
16
17public:
18 virtual void CreateRequiredStreams() = 0;
19 virtual void QueryOptionalStreams() {}
20
21 void Reset(plParticleSystemInstance* pOwner)
22 {
23 m_pOwnerSystem = pOwner;
24 m_StreamBinding.Clear();
25
26 OnReset();
27 }
28
30 virtual void OnFinalize() {}
31
32 plParticleSystemInstance* GetOwnerSystem() { return m_pOwnerSystem; }
33
34 const plParticleSystemInstance* GetOwnerSystem() const { return m_pOwnerSystem; }
35
36 plParticleEffectInstance* GetOwnerEffect() const { return m_pOwnerSystem->GetOwnerEffect(); }
37
40
41protected:
43 virtual void OnReset() {}
44
45 void CreateStream(const char* szName, plProcessingStream::DataType Type, plProcessingStream** ppStream, bool bWillInitializeStream)
46 {
47 m_pOwnerSystem->CreateStream(szName, Type, ppStream, m_StreamBinding, bWillInitializeStream);
48 }
49
50 virtual plResult UpdateStreamBindings() final override
51 {
52 m_StreamBinding.UpdateBindings(m_pStreamGroup);
53 return PL_SUCCESS;
54 }
55
56 plRandom& GetRNG() const { return GetOwnerEffect()->GetRNG(); }
57
58private:
59 plParticleSystemInstance* m_pOwnerSystem;
60 plParticleStreamBinding m_StreamBinding;
61};
Definition ParticleEffectInstance.h:25
Definition ParticleModule.h:12
virtual void RequestRequiredWorldModulesForCache(plParticleWorldModule *pParticleModule)
Override this to cache world module pointers for later (through plParticleWorldModule::GetCachedWorld...
Definition ParticleModule.h:39
virtual void OnReset()
Called by Reset()
Definition ParticleModule.h:43
virtual plResult UpdateStreamBindings() final override
Internal method which needs to be implemented, gets the concrete stream bindings. This is called ever...
Definition ParticleModule.h:50
virtual void OnFinalize()
Called after everything is set up.
Definition ParticleModule.h:30
Definition Declarations.h:56
A particle system stores all data for one 'layer' of a running particle effect.
Definition ParticleSystemInstance.h:15
This world module stores all particle effect data that is active in a given plWorld instance.
Definition ParticleWorldModule.h:24
A single stream in a stream group holding contiguous data of a given type.
Definition ProcessingStream.h:8
DataType
The data types which can be stored in the stream. When adding new data types the GetDataTypeSize() of...
Definition ProcessingStream.h:13
Base class for all stream processor implementations.
Definition ProcessingStreamProcessor.h:11
A random number generator. Currently uses the WELL512 algorithm.
Definition Random.h:9
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54