Polyphase Game Engine
Loading...
Searching...
No Matches
ParticleSystem.h
Go to the documentation of this file.
1#pragma once
2
3#include "Maths.h"
4#include <string>
5#include <vector>
6#include <map>
7
8#include "Enums.h"
9#include "Asset.h"
10#include "AssetRef.h"
11#include "Constants.h"
12#include "EngineTypes.h"
13#include "Vertex.h"
14#include "Maths.h"
15
18
19class Material;
20
21enum class ParticleLoopMode : uint32_t
22{
23 Once,
25 Custom,
26
27 Count
28};
29
31{
32 // Spawn Randomized Params
33 float mLifetimeMin = 1.0f;
34 float mLifetimeMax = 2.0f;
35
36 glm::vec3 mPositionMin = { -1.0f, -1.0f, -1.0f };
37 glm::vec3 mPositionMax = { 1.0f, 1.0f, 1.0f };
38
39 glm::vec3 mVelocityMin = { 0.0f, 1.0f, 0.0f };
40 glm::vec3 mVelocityMax = { 0.0f, 3.0f, 0.0f };
41
42 glm::vec2 mSizeMin = { 0.1f, 0.1f };
43 glm::vec2 mSizeMax = { 0.2f, 0.2f };
44
45 float mRotationMin = 0.0f;
46 float mRotationMax = 2.0f * PI;
47
48 float mRotationSpeedMin = 0.0f;
49 float mRotationSpeedMax = 0.0f;
50
51 // Constant Params
52 glm::vec3 mAcceleration = { 0.0f, 0.0f, 0.0f };
53
54 float mAlphaEase = 0.1f;
55 float mScaleEase = 0.0f;
56
57 // Over Lifetime Params
58 glm::vec4 mColorStart = { 1.0f, 1.0f, 0.0f, 1.0f };
59 glm::vec4 mColorEnd = { 1.0f, 0.0f, 0.0f, 0.0f };
60
61 glm::vec2 mScaleStart = { 1.0f, 1.0f };
62 glm::vec2 mScaleEnd = { 0.5f, 0.5f };
63};
64
66{
67public:
68
70
73
74 virtual void LoadStream(Stream& stream, Platform platform) override;
75 virtual void SaveStream(Stream& stream, Platform platform) override;
76 virtual void Create() override;
77 virtual void Destroy() override;
78 virtual bool Import(const std::string& path, ImportOptions* options) override;
79 virtual void GatherProperties(std::vector<Property>& outProps) override;
80 virtual glm::vec4 GetTypeColor() override;
81 virtual const char* GetTypeName() override;
82 virtual bool ShouldSnapshotForPie() const override { return true; }
83
84 void SetMaterial(Material* material);
85 Material* GetMaterial() const;
86
87 const ParticleParams& GetParams() const;
88 ParticleParams& GetParams();
89 void SetParams(const ParticleParams& params);
90
91 void SetDuration(float duration);
92 float GetDuration() const;
93
94 void SetSpawnRate(float spawnRate);
95 float GetSpawnRate() const;
96
97 void SetBurstCount(uint32_t burstCount);
98 uint32_t GetBurstCount() const;
99
100 void SetBurstWindow(float window);
101 float GetBurstWindow() const;
102
103 void SetMaxParticles(uint32_t maxParticles);
104 uint32_t GetMaxParticles() const;
105
106 void SetLoops(uint32_t loops);
107 uint32_t GetLoops() const;
108
109 void SetRadialVelocity(bool radial);
110 bool IsRadialVelocity() const;
111
112 void SetRadialSpawn(bool radial);
113 bool IsRadialSpawn() const;
114
115 void SetLockedRatio(bool lockedRatio);
116 bool IsRatioLocked() const;
117
118 Bounds GetBounds() const;
119
120 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
121
122protected:
123
124 float mDuration = 1.0f;
125 float mSpawnRate = 10.0f;
126 uint32_t mBurstCount = 0;
127 float mBurstWindow = 0.1f;
128 uint32_t mMaxParticles = 0;
129 uint32_t mLoops = 0;
131 bool mRadialVelocity = false;
132 bool mRadialSpawn = false;
133 bool mLockedRatio = true;
134
135 MaterialRef mMaterial = nullptr;
137
139
140 // Make sure you copy over any new params in ParticleSystemInstance::CopyParticleSystem()
141};
#define PI
Definition Easing.cpp:7
Platform
Definition EngineTypes.h:31
ParticleLoopMode
Definition ParticleSystem.h:22
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition AssetRef.h:18
Definition Asset.h:113
virtual bool Import(const std::string &path, ImportOptions *options=nullptr)
Definition Asset.cpp:244
virtual void Create()
Definition Asset.cpp:77
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:236
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:254
virtual const char * GetTypeName()
Definition Asset.cpp:259
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:249
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:222
virtual void Destroy()
Definition Asset.cpp:87
Definition Datum.h:164
Definition Asset.h:102
Definition Material.h:48
Definition ParticleSystem.h:66
Bounds mBounds
Definition ParticleSystem.h:136
DECLARE_ASSET(ParticleSystem, Asset)
virtual bool ShouldSnapshotForPie() const override
Definition ParticleSystem.h:82
ParticleParams mParams
Definition ParticleSystem.h:138
Definition Stream.h:21
Definition EngineTypes.h:193
Definition ParticleSystem.h:31
glm::vec3 mVelocityMin
Definition ParticleSystem.h:39
glm::vec3 mPositionMax
Definition ParticleSystem.h:37
glm::vec4 mColorEnd
Definition ParticleSystem.h:59
glm::vec3 mAcceleration
Definition ParticleSystem.h:52
glm::vec2 mScaleStart
Definition ParticleSystem.h:61
glm::vec2 mScaleEnd
Definition ParticleSystem.h:62
float mLifetimeMin
Definition ParticleSystem.h:33
float mRotationSpeedMax
Definition ParticleSystem.h:49
glm::vec2 mSizeMin
Definition ParticleSystem.h:42
glm::vec3 mPositionMin
Definition ParticleSystem.h:36
float mAlphaEase
Definition ParticleSystem.h:54
float mScaleEase
Definition ParticleSystem.h:55
glm::vec2 mSizeMax
Definition ParticleSystem.h:43
glm::vec3 mVelocityMax
Definition ParticleSystem.h:40
glm::vec4 mColorStart
Definition ParticleSystem.h:58
float mLifetimeMax
Definition ParticleSystem.h:34
float mRotationMin
Definition ParticleSystem.h:45
float mRotationMax
Definition ParticleSystem.h:46
float mRotationSpeedMin
Definition ParticleSystem.h:48