diff options
Diffstat (limited to 'src/crepe/Particle.h')
-rw-r--r-- | src/crepe/Particle.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/crepe/Particle.h b/src/crepe/Particle.h new file mode 100644 index 0000000..ee0cd66 --- /dev/null +++ b/src/crepe/Particle.h @@ -0,0 +1,63 @@ +#pragma once + +#include <cstdint> + +#include "types.h" + +namespace crepe { + +/** + * \brief Represents a particle in the particle emitter. + * + * This class stores information about a single particle, including its position, velocity, + * lifespan, and other properties. Particles can be updated over time to simulate movement and + * can also be reset or stopped. + */ +class Particle { +public: + //! Position of the particle in 2D space. + vec2 position; + //! Velocity vector indicating the speed and direction of the particle. + vec2 velocity; + //! Accumulated force affecting the particle over time. + vec2 force_over_time; + //! Total lifespan of the particle in milliseconds. + float lifespan; + //! Active state of the particle; true if it is in use, false otherwise. + bool active = false; + //! The time the particle has been alive, in milliseconds. + float time_in_life = 0; + //! The angle at which the particle is oriented or moving. + float angle = 0; + + /** + * \brief Resets the particle with new properties. + * + * This method initializes the particle with a specific lifespan, position, velocity, and + * angle, marking it as active and resetting its life counter. + * + * \param lifespan The lifespan of the particle in amount of updates. + * \param position The starting position of the particle. + * \param velocity The initial velocity of the particle. + * \param angle The angle of the particle's trajectory or orientation. + */ + void reset(unsigned int lifespan, const vec2 & position, const vec2 & velocity, + float angle); + /** + * \brief Updates the particle's state. + * + * Advances the particle's position based on its velocity and applies accumulated forces. + * Deactivates the particle if its lifespan has expired. + * \param dt The amount of fixed delta time that has passed. + */ + void update(double dt); + /** + * \brief Stops the particle's movement. + * + * Sets the particle's velocity to zero, effectively halting any further + * movement. + */ + void stop_movement(); +}; + +} // namespace crepe |