feat(fireworks): burst radial blanc al explotar enemic + tuning

This commit is contained in:
2026-05-21 17:41:10 +02:00
parent 56ce1a3236
commit 0cc1f7623a
5 changed files with 18 additions and 5 deletions
+10 -4
View File
@@ -3,21 +3,27 @@
#pragma once #pragma once
#include <SDL3/SDL.h>
namespace Defaults::FX::Firework { 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. // 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; // ± constexpr float SPEED_VARIATION = 30.0F; // ±
// Quantitat de línies per burst (per defecte). // 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. // Distribució angular: jitter aleatori sobre el repartiment uniforme.
constexpr float ANGULAR_JITTER_DEG = 12.0F; constexpr float ANGULAR_JITTER_DEG = 12.0F;
// Fase 1 (creixement): la línia neix amb longitud 0 i creix fins a max. // Fase 1 (creixement): la línia neix amb longitud 0 i creix fins a max.
constexpr float GROW_DURATION = 0.08F; // s 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. // Fricció lineal (px/s²). Negativa per frenar.
constexpr float FRICTION = -180.0F; constexpr float FRICTION = -180.0F;
@@ -34,6 +40,6 @@ namespace Defaults::FX::Firework {
constexpr float RESTITUTION_BOUNDS = 0.7F; constexpr float RESTITUTION_BOUNDS = 0.7F;
// Mida del pool. 8 punts × ~25 bursts simultanis. // Mida del pool. 8 punts × ~25 bursts simultanis.
constexpr int POOL_SIZE = 200; constexpr int POOL_SIZE = 2000;
} // namespace Defaults::FX::Firework } // namespace Defaults::FX::Firework
+1 -1
View File
@@ -27,7 +27,7 @@ namespace Effects {
// n_points: nombre de línies. Default Defaults::FX::Firework::N_POINTS. // n_points: nombre de línies. Default Defaults::FX::Firework::N_POINTS.
// initial_brightness: 0..1. // initial_brightness: 0..1.
void spawn(const Vec2& origen, void spawn(const Vec2& origen,
SDL_Color color, SDL_Color color = Defaults::FX::Firework::DEFAULT_COLOR,
float initial_speed = Defaults::FX::Firework::SPEED, float initial_speed = Defaults::FX::Firework::SPEED,
int n_points = Defaults::FX::Firework::N_POINTS, int n_points = Defaults::FX::Firework::N_POINTS,
float initial_brightness = Defaults::FX::Firework::INITIAL_BRIGHTNESS); float initial_brightness = Defaults::FX::Firework::INITIAL_BRIGHTNESS);
+1
View File
@@ -458,6 +458,7 @@ void GameScene::runCollisionDetections() {
.score_per_player = score_per_player_, .score_per_player = score_per_player_,
.lives_per_player = lives_per_player_, .lives_per_player = lives_per_player_,
.debris_manager = debris_manager_, .debris_manager = debris_manager_,
.firework_manager = firework_manager_,
.floating_score_manager = floating_score_manager_, .floating_score_manager = floating_score_manager_,
.match_config = match_config_, .match_config = match_config_,
.on_player_hit = [this](uint8_t pid) { tocado(pid); }, .on_player_hit = [this](uint8_t pid) { tocado(pid); },
+4
View File
@@ -76,6 +76,10 @@ namespace Systems::Collision {
Defaults::Physics::Debris::ENEMY_LIFETIME, Defaults::Physics::Debris::ENEMY_LIFETIME,
Defaults::Physics::Debris::ENEMY_FRICTION, Defaults::Physics::Debris::ENEMY_FRICTION,
Defaults::Physics::Debris::ENEMY_SEGMENT_MULTIPLIER); 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 } // anonymous namespace
+2
View File
@@ -19,6 +19,7 @@
#include "core/defaults.hpp" #include "core/defaults.hpp"
#include "core/system/game_config.hpp" #include "core/system/game_config.hpp"
#include "game/effects/debris_manager.hpp" #include "game/effects/debris_manager.hpp"
#include "game/effects/firework_manager.hpp"
#include "game/effects/floating_score_manager.hpp" #include "game/effects/floating_score_manager.hpp"
#include "game/entities/bullet.hpp" #include "game/entities/bullet.hpp"
#include "game/entities/enemy.hpp" #include "game/entities/enemy.hpp"
@@ -36,6 +37,7 @@ namespace Systems::Collision {
std::array<int, 2>& score_per_player; std::array<int, 2>& score_per_player;
std::array<int, 2>& lives_per_player; std::array<int, 2>& lives_per_player;
Effects::DebrisManager& debris_manager; Effects::DebrisManager& debris_manager;
Effects::FireworkManager& firework_manager;
Effects::FloatingScoreManager& floating_score_manager; Effects::FloatingScoreManager& floating_score_manager;
const GameConfig::MatchConfig& match_config; const GameConfig::MatchConfig& match_config;
// Trigger de muerte del jugador (GameScene::tocado). // Trigger de muerte del jugador (GameScene::tocado).