From 0cc1f7623af6c6870c5d0a0b8691e5db85adc1e8 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 21 May 2026 17:41:10 +0200 Subject: [PATCH] feat(fireworks): burst radial blanc al explotar enemic + tuning --- source/core/defaults/effects.hpp | 14 ++++++++++---- source/game/effects/firework_manager.hpp | 2 +- source/game/scenes/game_scene.cpp | 1 + source/game/systems/collision_system.cpp | 4 ++++ source/game/systems/collision_system.hpp | 2 ++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/source/core/defaults/effects.hpp b/source/core/defaults/effects.hpp index 65d3aeb..9ee0896 100644 --- a/source/core/defaults/effects.hpp +++ b/source/core/defaults/effects.hpp @@ -3,21 +3,27 @@ #pragma once +#include + namespace Defaults::FX::Firework { + // Color per defecte. La caller pot fer override (p.ex. heretar del pare), + // però per defecte no l'heretem — feel més neutre/lluminós. + constexpr SDL_Color DEFAULT_COLOR = {.r = 255, .g = 255, .b = 255, .a = 255}; + // Velocitat inicial radial al spawn (px/s) i variació entre punts. - constexpr float SPEED = 140.0F; + constexpr float SPEED = 250.0F; constexpr float SPEED_VARIATION = 30.0F; // ± // Quantitat de línies per burst (per defecte). - constexpr int N_POINTS = 8; + constexpr int N_POINTS = 100; // Distribució angular: jitter aleatori sobre el repartiment uniforme. constexpr float ANGULAR_JITTER_DEG = 12.0F; // Fase 1 (creixement): la línia neix amb longitud 0 i creix fins a max. constexpr float GROW_DURATION = 0.08F; // s - constexpr float MAX_LENGTH = 14.0F; // px + constexpr float MAX_LENGTH = 25.0F; // px // Fricció lineal (px/s²). Negativa per frenar. constexpr float FRICTION = -180.0F; @@ -34,6 +40,6 @@ namespace Defaults::FX::Firework { constexpr float RESTITUTION_BOUNDS = 0.7F; // Mida del pool. 8 punts × ~25 bursts simultanis. - constexpr int POOL_SIZE = 200; + constexpr int POOL_SIZE = 2000; } // namespace Defaults::FX::Firework diff --git a/source/game/effects/firework_manager.hpp b/source/game/effects/firework_manager.hpp index 864470e..189041e 100644 --- a/source/game/effects/firework_manager.hpp +++ b/source/game/effects/firework_manager.hpp @@ -27,7 +27,7 @@ namespace Effects { // n_points: nombre de línies. Default Defaults::FX::Firework::N_POINTS. // initial_brightness: 0..1. void spawn(const Vec2& origen, - SDL_Color color, + 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); diff --git a/source/game/scenes/game_scene.cpp b/source/game/scenes/game_scene.cpp index 71862f2..dfaf3cc 100644 --- a/source/game/scenes/game_scene.cpp +++ b/source/game/scenes/game_scene.cpp @@ -458,6 +458,7 @@ void GameScene::runCollisionDetections() { .score_per_player = score_per_player_, .lives_per_player = lives_per_player_, .debris_manager = debris_manager_, + .firework_manager = firework_manager_, .floating_score_manager = floating_score_manager_, .match_config = match_config_, .on_player_hit = [this](uint8_t pid) { tocado(pid); }, diff --git a/source/game/systems/collision_system.cpp b/source/game/systems/collision_system.cpp index f985b8c..926c344 100644 --- a/source/game/systems/collision_system.cpp +++ b/source/game/systems/collision_system.cpp @@ -76,6 +76,10 @@ namespace Systems::Collision { Defaults::Physics::Debris::ENEMY_LIFETIME, Defaults::Physics::Debris::ENEMY_FRICTION, Defaults::Physics::Debris::ENEMY_SEGMENT_MULTIPLIER); + + // Firework burst radial des del centro de l'enemic (efecte adicional al debris). + // No heretem color: el burst usa el blanc per defecte per a un feel més lluminós. + ctx.firework_manager.spawn(ENEMY_POS); } } // anonymous namespace diff --git a/source/game/systems/collision_system.hpp b/source/game/systems/collision_system.hpp index 46c172b..5836a52 100644 --- a/source/game/systems/collision_system.hpp +++ b/source/game/systems/collision_system.hpp @@ -19,6 +19,7 @@ #include "core/defaults.hpp" #include "core/system/game_config.hpp" #include "game/effects/debris_manager.hpp" +#include "game/effects/firework_manager.hpp" #include "game/effects/floating_score_manager.hpp" #include "game/entities/bullet.hpp" #include "game/entities/enemy.hpp" @@ -36,6 +37,7 @@ namespace Systems::Collision { std::array& score_per_player; std::array& lives_per_player; Effects::DebrisManager& debris_manager; + Effects::FireworkManager& firework_manager; Effects::FloatingScoreManager& floating_score_manager; const GameConfig::MatchConfig& match_config; // Trigger de muerte del jugador (GameScene::tocado).