#pragma once #include #include "rendering/gl_renderer.hpp" #include "utils/globals.hpp" #include "utils/light.hpp" namespace Nimbin { class Camera; class GameObject; struct Particle { SDL_FColor color { 1.0f, 1.0f, 1.0f, 1.0f }; Vec3 pos{}; Vec3 vel{}; double age { 0.0 }; double lifetime { 1.5 }; float yaw { 0.0f }; float spin { 0.0f }; bool alive { true }; }; class ParticleSystem { DynArray _particles; public: void update(double dt, const DynArray& solid_colliders, float world_scale); void clear (); bool empty () const { return _particles.empty(); } void draw (GlRenderer& gl, const Camera& cam, const Light& light) const; void emit_FireworkBurst(const Vec3& center, SDL_FColor color, int count = 80); }; } // namespace Nimbin