ASW Lib
A.D.S. Games SDL Wrapper Library. A library targeted at Allegro4 users who want to switch to SDL3 and use modern c++.
Loading...
Searching...
No Matches
particles.h
Go to the documentation of this file.
1
8
9#ifndef ASW_PARTICLES_H
10#define ASW_PARTICLES_H
11
12#include <vector>
13
14#include "./color.h"
15#include "./game.h"
16#include "./geometry.h"
17#include "./types.h"
18
19namespace asw {
20
24 // Lifetime in seconds
25 float lifetime_min { 1.0F };
26 float lifetime_max { 2.0F };
27
28 // Speed in pixels per second
29 float speed_min { 50.0F };
30 float speed_max { 100.0F };
31
32 // Direction (radians)
33 float angle_min { 0.0F };
34 float angle_max { 6.2832F }; // Full circle
35
36 // Visual
37 Color color_start { 255, 255, 255, 255 };
38 Color color_end { 255, 255, 255, 0 };
39 float alpha_start { 1.0F };
40 float alpha_end { 0.0F };
41 float size_start { 4.0F };
42 float size_end { 1.0F };
43
44 // Physics in pixels per second squared
45 Vec2<float> gravity { 0.0F, 0.0F };
46
47 // Optional texture (nullptr = use circleFill)
48 Texture texture { nullptr };
49};
50
54public:
57 ParticleEmitter() = default;
58
64 explicit ParticleEmitter(const ParticleConfig& config, uint32_t maxParticles = 256);
65
70 void set_emission_rate(float rate);
71
76 void emit(uint32_t count);
77
80 void start();
81
84 void stop();
85
90 void update(float dt) override;
91
94 void draw() override;
95
100 uint32_t get_alive_count() const;
101
102private:
103 struct Particle {
106 float lifetime { 0.0F };
107 float age { 0.0F };
108 float size { 0.0F };
109 float rotation { 0.0F };
110 bool alive { false };
111 };
112
113 void spawn_particle();
114
116 std::vector<Particle> particles;
117 uint32_t alive_count { 0 };
118
119 // Emission rate in particles per second
120 float emission_rate { 0.0F };
121 float emission_accumulator { 0.0F };
122 bool emitting { false };
123};
124
125} // namespace asw
126
127#endif // ASW_PARTICLES_H
Particle emitter that integrates with the scene system.
Definition particles.h:53
void draw() override
Draw alive particles.
Definition particles.cpp:75
std::vector< Particle > particles
Definition particles.h:116
ParticleConfig config
Definition particles.h:115
uint32_t get_alive_count() const
Get the number of alive particles.
ParticleEmitter()=default
Create a default ParticleEmitter with no particles.
void emit(uint32_t count)
Emit a burst of particles at current position.
Definition particles.cpp:30
void set_emission_rate(float rate)
Set emission rate (particles per second), 0 to disable auto-emit.
Definition particles.cpp:25
void start()
Start continuous emission.
Definition particles.cpp:37
void update(float dt) override
Update particles.
Definition particles.cpp:47
void stop()
Stop continuous emission.
Definition particles.cpp:42
A 2D vector in space.
Definition geometry.h:21
Game Object.
Definition game.h:42
Common geometry types.
std::shared_ptr< SDL_Texture > Texture
Alias for a shared pointer to an SDL_Texture.
Definition types.h:38
RGBA color struct with 8-bit channels.
Definition color.h:11
Configuration for particle emitters.
Definition particles.h:23
Vec2< float > gravity
Definition particles.h:45
Types used throughout the ASW library.