Polyphase Game Engine
Loading...
Searching...
No Matches
Particle3d.h
Go to the documentation of this file.
1#pragma once
2
6
7enum class ParticleOrientation : uint8_t
8{
9 X,
10 Y,
11 Z,
12 NX,
13 NY,
14 NZ,
16
17 Count
18};
19
21{
22 glm::vec3 mPosition = {};
23 float mElapsedTime = 0.0f;
24
25 glm::vec3 mVelocity = {};
26 float mLifetime = 1.0f;
27
28 glm::vec2 mSize = {};
29 float mRotationSpeed = 0.0f;
30 float mRotation = 0.0f;
31};
32
33class Particle3D : public Primitive3D
34{
35public:
36
38
39 Particle3D();
40 virtual ~Particle3D();
41
42 virtual const char* GetTypeName() const override;
43 virtual void GatherProperties(std::vector<Property>& outProps) override;
44 virtual void GatherProxyDraws(std::vector<DebugDraw>& inoutDraws) override;
45
46 virtual void Create() override;
47 virtual void Destroy() override;
48 virtual void Start() override;
50
51 virtual DrawData GetDrawData() override;
52 virtual void Render() override;
53 virtual void Tick(float deltaTime) override;
54 virtual void EditorTick(float deltaTime) override;
55
56 virtual VertexType GetVertexType() const override;
57
58 void Simulate(float deltaTime);
59 void UpdateVertexBuffer();
60
61 void Reset();
62 void EnableEmission(bool enable);
63 bool IsEmissionEnabled() const;
64
65 void EnableAutoEmit(bool enable);
66 bool IsAutoEmitEnabled() const;
67
68 void EnableAutoDestroy(bool enable);
69 bool IsAutoDestroyEnabled() const;
70
71 float GetElapsedTime() const;
72
73 void SetParticleSystem(ParticleSystem* particleSystem);
75
76 void SetMaterialOverride(Material* material);
79
80 void SetTimeMultiplier(float timeMultiplier);
81 float GetTimeMultiplier() const;
82
83 void SetUseLocalSpace(bool useLocalSpace);
84 bool GetUseLocalSpace() const;
85
86 void SetAlwaysSimulate(bool alwaysSimulate);
87 bool ShouldAlwaysSimulate() const;
88
89 void EnableSimulation(bool simulate);
90 bool IsSimulationEnabled() const;
91
92 uint32_t GetNumParticles();
93 uint32_t GetNumVertices();
94 std::vector<Particle>& GetParticles();
95 const std::vector<VertexParticle>& GetVertices();
96
97 void SetBaseVelocity(glm::vec3 velocity);
98 glm::vec3 GetBaseVelocity() const;
99
100 void SetParticleVelocity(int32_t index, glm::vec3 velocity);
101 glm::vec3 GetParticleVelocity(int32_t index);
102
103 void SetParticlePosition(int32_t index, glm::vec3 position);
104 glm::vec3 GetParticlePosition(int32_t index);
105
106 void SetParticleSpeed(int32_t index, float speed);
107
110
112
113 virtual Bounds GetLocalBounds() const override;
114
115 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
116
117protected:
118
119 void TickCommon(float deltaTime);
120
121 void KillExpiredParticles(float deltaTime);
122 void UpdateParticles(float deltaTime);
123 void SpawnNewParticles(float deltaTime);
124
125 float mElapsedTime = 0.0f;
126 bool mEmit = true;
127 bool mAutoEmit = true;
128 bool mAutoDestroy = false;
129 std::vector<Particle> mParticles;
130 std::vector<VertexParticle> mVertices;
131 float mEmissionCounter = 0.0f;
132 uint32_t mLoop = 0;
135
136 // Properties
139 float mTimeMultiplier = 1.0f;
140 bool mUseLocalSpace = false;
141 bool mAlwaysSimulate = true;
142 bool mEnableSimulation = true;
144 glm::vec3 mBaseVelocity = {};
145
146 // Graphics Resource
148};
ParticleOrientation
Definition Particle3d.h:8
VertexType
Definition Vertex.h:7
Definition AssetRef.h:18
Definition Datum.h:164
Definition Material.h:48
Definition Particle3d.h:34
virtual VertexType GetVertexType() const override
Definition Particle3d.cpp:210
ParticleCompResource * GetResource()
Definition Particle3d.cpp:154
bool mHasUpdatedVerticesThisFrame
Definition Particle3d.h:134
Material * GetMaterial()
Definition Particle3d.cpp:299
void TickCommon(float deltaTime)
Definition Particle3d.cpp:192
uint32_t mLoop
Definition Particle3d.h:132
virtual ~Particle3D()
Definition Particle3d.cpp:53
void SetParticlePosition(int32_t index, glm::vec3 position)
Definition Particle3d.cpp:416
bool mHasSimulatedThisFrame
Definition Particle3d.h:133
bool IsAutoDestroyEnabled() const
Definition Particle3d.cpp:271
bool IsAutoEmitEnabled() const
Definition Particle3d.cpp:261
virtual void Tick(float deltaTime) override
Definition Particle3d.cpp:180
void SetParticleSpeed(int32_t index, float speed)
Definition Particle3d.cpp:441
virtual void EditorTick(float deltaTime) override
Definition Particle3d.cpp:186
void Reset()
Definition Particle3d.cpp:233
ParticleSystemRef mParticleSystem
Definition Particle3d.h:137
void EnableSimulation(bool simulate)
Definition Particle3d.cpp:350
virtual DrawData GetDrawData() override
Definition Particle3d.cpp:159
bool mAutoEmit
Definition Particle3d.h:127
uint32_t GetNumVertices()
Definition Particle3d.cpp:365
bool mUseLocalSpace
Definition Particle3d.h:140
virtual void Render() override
Definition Particle3d.cpp:175
void KillExpiredParticles(float deltaTime)
Definition Particle3d.cpp:486
bool IsSimulationEnabled() const
Definition Particle3d.cpp:355
glm::vec3 mBaseVelocity
Definition Particle3d.h:144
bool ShouldAlwaysSimulate() const
Definition Particle3d.cpp:345
void SetParticleVelocity(int32_t index, glm::vec3 velocity)
Definition Particle3d.cpp:390
Particle3D()
Definition Particle3d.cpp:48
void SetBaseVelocity(glm::vec3 velocity)
Definition Particle3d.cpp:380
Material * GetMaterialOverride()
Definition Particle3d.cpp:315
bool IsEmissionEnabled() const
Definition Particle3d.cpp:251
glm::vec3 GetBaseVelocity() const
Definition Particle3d.cpp:385
ParticleSystemInstance * InstantiateParticleSystem()
Definition Particle3d.cpp:466
void Simulate(float deltaTime)
Definition Particle3d.cpp:215
virtual void GatherProxyDraws(std::vector< DebugDraw > &inoutDraws) override
Definition Particle3d.cpp:79
void SetTimeMultiplier(float timeMultiplier)
Definition Particle3d.cpp:320
void SetParticleSystem(ParticleSystem *particleSystem)
Definition Particle3d.cpp:281
void SpawnNewParticles(float deltaTime)
Definition Particle3d.cpp:518
void SetAlwaysSimulate(bool alwaysSimulate)
Definition Particle3d.cpp:340
void SetParticleOrientation(ParticleOrientation orientation)
Definition Particle3d.cpp:456
virtual void Destroy() override
Definition Particle3d.cpp:134
std::vector< Particle > & GetParticles()
Definition Particle3d.cpp:370
ParticleOrientation GetParticleOrientation()
Definition Particle3d.cpp:461
ParticleOrientation mOrientation
Definition Particle3d.h:143
float GetTimeMultiplier() const
Definition Particle3d.cpp:325
bool mEmit
Definition Particle3d.h:126
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Particle3d.cpp:32
bool GetUseLocalSpace() const
Definition Particle3d.cpp:335
void UpdateVertexBuffer()
Definition Particle3d.cpp:630
void EnableAutoDestroy(bool enable)
Definition Particle3d.cpp:266
const std::vector< VertexParticle > & GetVertices()
Definition Particle3d.cpp:375
virtual const char * GetTypeName() const override
Definition Particle3d.cpp:58
virtual void Start() override
Definition Particle3d.cpp:146
ParticleCompResource mResource
Definition Particle3d.h:147
bool mAutoDestroy
Definition Particle3d.h:128
float GetElapsedTime() const
Definition Particle3d.cpp:276
std::vector< Particle > mParticles
Definition Particle3d.h:129
virtual void Create() override
Definition Particle3d.cpp:127
void SetUseLocalSpace(bool useLocalSpace)
Definition Particle3d.cpp:330
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Particle3d.cpp:63
glm::vec3 GetParticlePosition(int32_t index)
Definition Particle3d.cpp:431
void EnableAutoEmit(bool enable)
Definition Particle3d.cpp:256
void SetMaterialOverride(Material *material)
Definition Particle3d.cpp:294
virtual Bounds GetLocalBounds() const override
Definition Particle3d.cpp:474
ParticleSystem * GetParticleSystem()
Definition Particle3d.cpp:289
std::vector< VertexParticle > mVertices
Definition Particle3d.h:130
DECLARE_NODE(Particle3D, Primitive3D)
bool mEnableSimulation
Definition Particle3d.h:142
void EnableEmission(bool enable)
Definition Particle3d.cpp:240
bool mAlwaysSimulate
Definition Particle3d.h:141
MaterialRef mMaterialOverride
Definition Particle3d.h:138
uint32_t GetNumParticles()
Definition Particle3d.cpp:360
float mTimeMultiplier
Definition Particle3d.h:139
void UpdateParticles(float deltaTime)
Definition Particle3d.cpp:500
float mElapsedTime
Definition Particle3d.h:125
glm::vec3 GetParticleVelocity(int32_t index)
Definition Particle3d.cpp:405
float mEmissionCounter
Definition Particle3d.h:131
Definition ParticleSystemInstance.h:6
Definition ParticleSystem.h:66
Definition Primitive3d.h:46
Definition EngineTypes.h:193
Definition EngineTypes.h:199
Definition GraphicsTypes.h:304
Definition Particle3d.h:21
glm::vec3 mVelocity
Definition Particle3d.h:25
float mRotation
Definition Particle3d.h:30
float mRotationSpeed
Definition Particle3d.h:29
float mLifetime
Definition Particle3d.h:26
glm::vec3 mPosition
Definition Particle3d.h:22
glm::vec2 mSize
Definition Particle3d.h:28
float mElapsedTime
Definition Particle3d.h:23