diff options
Diffstat (limited to 'src/libjin/graphics/particles/je_particle.h')
-rw-r--r-- | src/libjin/graphics/particles/je_particle.h | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/src/libjin/graphics/particles/je_particle.h b/src/libjin/graphics/particles/je_particle.h new file mode 100644 index 0000000..70a2653 --- /dev/null +++ b/src/libjin/graphics/particles/je_particle.h @@ -0,0 +1,166 @@ +#ifndef __JE_PARTICLE_H__ +#define __JE_PARTICLE_H__ + +#include "../../math/je_transform.h" +#include "../../math/je_vector2.hpp" +#include "../je_color.h" +#include "../je_graphic.h" + +namespace JinEngine +{ + namespace Graphics + { + namespace Particles + { + + class ParticleEmitter; + + /// + /// + /// + struct LifeTimeDef + { + bool enableRandom = false; + Struct(life, + struct + { + float floor, ceil; + } random; + float life = 1.0f; + ); + }; + + struct ScaleOverTimeDef + { + bool enable = false; + float start = 1; + float end = 1; + }; + + struct ColorOverTimeDef + { + bool enable = false; + Color colorStart = Color::WHITE; + Color colorEnd = Color::WHITE; + }; + + struct linearAccelarationDef + { + Math::Vector2<float> linearAccelaration; + }; + + struct RadialAccelarationDef + { + float radialAccelaration = 0.f; + }; + + struct AngularSpeedDef + { + bool enableRandom = false; + Struct(angularSpeed, + struct + { + float floor = 0; + float ceil = 0; + } random; + float angularSpeed = 0; + ); + }; + + /// + /// + /// + struct ParticleDef + { + private: + friend class ParticleEmitter; + + public: + // Basic definitions. + LifeTimeDef lifeTimeDef; ///< + linearAccelarationDef linearAccelarationDef; ///< + RadialAccelarationDef radialAccelarationDef; ///< + AngularSpeedDef angularSpeedDef; ///< + // Optional definitions. + ScaleOverTimeDef sizeOverTimeDef; ///< + ColorOverTimeDef colorOverTimeDef; ///< + }; + + /// + /// A single particle contains various properties of particle, such as position, accelaration, color + /// and other attributes changed over time. + /// + struct Particle + { + /// + /// Default constructor. + /// + Particle(const Graphic* graphic); + + /// + /// Reset to default. + /// + void reset(); + + /// + /// + /// + void update(float dt); + + /// + /// + /// + void render(); + + ////////////////////////////////////////////////////////////////////////////////////////////////// + + /// + /// Whole life time. + /// + float lifeTime = 1.0f; + + /// + /// Current life time. + /// + float life = 0.0f; + + const Graphic* graphic; + + /// + /// Color over lifetime. + /// + Color color = Color::WHITE; + Color colorStart = Color::WHITE; + Color colorEnd = Color::WHITE; + + /// + /// Position scale rotation origin. + /// + Math::Transform transform; + + /// + /// Speeds. + /// + Math::Vector2<float> speed; + Math::Vector2<float> linearAcceleration; + float angularSpeed; + float radialAcceleration = 0; + + /// + /// Size over lifetime. + /// + float scaleBegin = 1; + float scaleEnd = 1; + + /// + /// Is particle still alive? Alive is equivalent to NOT available in particle pool. + /// + bool alive = true; + + }; + + } // namespace Particles + } // namespace Graphics +} // namespace JinEngine + +#endif
\ No newline at end of file |