// firework_manager.hpp - Gestor de bursts radials (fireworks) // © 2026 JailDesigner #pragma once #include #include #include #include #include "core/defaults.hpp" #include "core/rendering/render_context.hpp" #include "core/types.hpp" #include "firework.hpp" namespace Effects { // Pool de partícules. spawn() emet un burst d'N línies radials des // d'`origen`. Cada partícula viu independent (update/draw/rebot). class FireworkManager { public: // Notificació opcional cada vegada que es genera un burst. using SpawnCallback = std::function; explicit FireworkManager(Rendering::Renderer* renderer); void setSpawnCallback(SpawnCallback callback) { spawn_callback_ = std::move(callback); } // Emet un burst radial: // origen: punt central del burst. // color: color de les línies (heretat del pare). // initial_speed: velocitat radial inicial (px/s). // n_points: nombre de línies. Default Defaults::FX::Firework::N_POINTS. // initial_brightness: 0..1. // glow: si true, cada partícula es renderitza amb halo neon. // glow_color: color del halo. Si alpha==0, agafa el color de la línia. void spawn(const Vec2& origen, SDL_Color color = Defaults::FX::Firework::DEFAULT_COLOR, float initial_speed = Defaults::FX::Firework::SPEED, int n_points = Defaults::FX::Firework::N_POINTS, float initial_brightness = Defaults::FX::Firework::INITIAL_BRIGHTNESS, bool glow = false, SDL_Color glow_color = {0, 0, 0, 0}); void update(float delta_time); void draw() const; void reset(); [[nodiscard]] auto getActiveCount() const -> int; private: Rendering::Renderer* renderer_; SpawnCallback spawn_callback_; static constexpr int POOL_SIZE = Defaults::FX::Firework::POOL_SIZE; std::array pool_; auto findFreeSlot() -> Firework*; }; } // namespace Effects