From d69adb5666fd6f73edbc6d410afcdf23c24e7c6b Mon Sep 17 00:00:00 2001 From: Jaro Date: Fri, 8 Nov 2024 19:20:05 +0100 Subject: particle updated --- src/crepe/api/ParticleEmitter.h | 72 ++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 26 deletions(-) (limited to 'src/crepe/api/ParticleEmitter.h') diff --git a/src/crepe/api/ParticleEmitter.h b/src/crepe/api/ParticleEmitter.h index 5939723..f931e8c 100644 --- a/src/crepe/api/ParticleEmitter.h +++ b/src/crepe/api/ParticleEmitter.h @@ -5,38 +5,58 @@ #include "Component.h" #include "Particle.h" +#include "Transform.h" + +class Sprite; namespace crepe { class ParticleEmitter : public Component { public: - ParticleEmitter(game_object_id_t id, uint32_t max_particles, - uint32_t emission_rate, uint32_t speed, - uint32_t speed_offset, uint32_t angle, uint32_t angleOffset, - float begin_lifespan, float end_lifespan); - ~ParticleEmitter(); - - //! position of the emitter - Position position; - //! maximum number of particles - uint32_t max_particles; - //! rate of particle emission - uint32_t emission_rate; - //! base speed of the particles - uint32_t speed; - //! offset for random speed variation - uint32_t speed_offset; - //! min angle of particle emission - uint32_t min_angle; - //! max angle of particle emission - uint32_t max_angle; - //! begin Lifespan of particle (only visual) - float begin_lifespan; - //! begin Lifespan of particle - float end_lifespan; + struct ParticleBoundary{ + //! boundary width (midpoint is emitter location) + double boundary_width = 0.0; + //! boundary height (midpoint is emitter location) + double boundary_height = 0.0; + //! boundary offset from particle emitter location + Vector2 boundary_offset; + //! reset on exit or stop velocity and set max postion + bool reset_on_exit = false; + }; - //! collection of particles - std::vector particles; + struct ParticleEmitterData{ + //! position of the emitter + Vector2 position; + //! maximum number of particles + uint32_t max_particles = 0; + //! rate of particle emission per update (Lowest value = 0.001 any lower is ignored) + double emission_rate = 0; + //! min speed of the particles + double min_speed = 0; + //! min speed of the particles + double max_speed = 0; + //! min angle of particle emission + double min_angle = 0; + //! max angle of particle emission + double max_angle = 0; + //! begin Lifespan of particle (only visual) + double begin_lifespan = 0.0; + //! end Lifespan of particle + double end_lifespan = 0.0; + //! force over time (physics) + Vector2 force_over_time; + //! particle boundary + ParticleBoundary boundary; + //! collection of particles + std::vector particles; + //! sprite reference + const Sprite* sprite; + }; +public: + ParticleEmitter(uint32_t game_object_id, const ParticleEmitterData& data); + ~ParticleEmitter(); +public: + ParticleEmitterData data; }; } // namespace crepe -- cgit v1.2.3