Skip to content

Particles

Lightweight particle emitter system that integrates with the scene system.

Header: #include <asw/modules/particles.h>Namespace: asw

ParticleConfig

Configuration struct for particle emitters.

cpp
struct ParticleConfig;
FieldTypeDefaultDescription
lifetime_minfloat1.0Minimum particle lifetime (seconds)
lifetime_maxfloat2.0Maximum particle lifetime (seconds)
speed_minfloat50.0Minimum particle speed
speed_maxfloat100.0Maximum particle speed
angle_minfloat0.0Minimum emission angle (radians)
angle_maxfloat6.2832Maximum emission angle (radians, full circle)
color_startColor{255, 255, 255, 255}Color at birth
color_endColor{255, 255, 255, 0}Color at death
alpha_startfloat1.0Opacity at birth
alpha_endfloat0.0Opacity at death
size_startfloat4.0Size at birth
size_endfloat1.0Size at death
gravityVec2<float>{0, 0}Gravity applied to particles
textureTexturenullptrOptional texture (nullptr = filled circle)

ParticleEmitter

A GameObject-derived emitter that can be added to scenes.

cpp
class ParticleEmitter : public game::GameObject;

Constructors

cpp
ParticleEmitter();
explicit ParticleEmitter(const ParticleConfig& config, uint32_t maxParticles = 256);
ParameterTypeDefaultDescription
configconst ParticleConfig&Particle configuration
maxParticlesuint32_t256Maximum number of particles in the pool

Methods

set_emission_rate

cpp
void set_emission_rate(float rate);

Set the emission rate in particles per second. Set to 0 to disable automatic emission.

emit

cpp
void emit(uint32_t count);

Emit a burst of particles at the emitter's current position.

start

cpp
void start();

Start continuous emission at the configured rate.

stop

cpp
void stop();

Stop continuous emission.

update

cpp
void update(float dt) override;

Update all alive particles. Called automatically when in a scene.

draw

cpp
void draw() override;

Draw all alive particles. Called automatically when in a scene.

get_alive_count

cpp
uint32_t get_alive_count() const;

Get the number of currently alive particles.

Example

cpp
// Configure particles
asw::ParticleConfig config;
config.lifetime_min = 0.5f;
config.lifetime_max = 1.5f;
config.speed_min = 80.0f;
config.speed_max = 150.0f;
config.color_start = {255, 200, 50, 255};
config.color_end = {255, 50, 0, 0};
config.size_start = 6.0f;
config.size_end = 1.0f;
config.gravity = {0.0f, 100.0f};

// Create emitter in a scene
auto emitter = create_object<asw::ParticleEmitter>(config, 512);
emitter->transform.position = {200.0f, 300.0f};
emitter->set_emission_rate(50.0f);
emitter->start();

// Or emit a one-shot burst
emitter->emit(30);

Released under the MIT License.