From 9e745dc3fc908cf2092fd7a0733bf6869501455c Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 25 May 2026 22:47:31 +0200 Subject: [PATCH] tune(enemy): trossos parcials i firework petit en color wounded --- data/entities/big_pentagon/big_pentagon.yaml | 2 +- .../game/systems/enemy_event_dispatcher.cpp | 36 ++++++++++--------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/data/entities/big_pentagon/big_pentagon.yaml b/data/entities/big_pentagon/big_pentagon.yaml index fe90c61..5314dec 100644 --- a/data/entities/big_pentagon/big_pentagon.yaml +++ b/data/entities/big_pentagon/big_pentagon.yaml @@ -70,7 +70,7 @@ health: 10 events: on_hit: - action: decrease_health # primer: si arriba a 0 dispara on_no_health - - action: flash # feedback visual de damage parcial + #- action: flash # feedback visual de damage parcial - action: create_debris_partial # xip a 0.3x mida (sense ser letal) - action: create_fireworks_small # espurna a cada hit (12 punts, lent) - action: apply_impulse # empenta el cos (skip si will_die) diff --git a/source/game/systems/enemy_event_dispatcher.cpp b/source/game/systems/enemy_event_dispatcher.cpp index b28d8e7..6e3bbe4 100644 --- a/source/game/systems/enemy_event_dispatcher.cpp +++ b/source/game/systems/enemy_event_dispatcher.cpp @@ -25,9 +25,9 @@ namespace Systems::EnemyEvents { } // Helper compartit per CREATE_DEBRIS i CREATE_DEBRIS_PARTIAL: única - // crida a explode(), paràmetres alineats; només canvia piece_scale - // (1.0 = explosió completa, 0.3 = xip d'esquerda). - void spawnDebrisForEnemy(Systems::Collision::Context& ctx, const Enemy& enemy, const Bullet* bullet, float piece_scale) { + // crida a explode(), paràmetres alineats; només canvien piece_scale + // (1.0 explosió, 0.3 xip) i el color (cos vs hit-feedback). + void spawnDebrisForEnemy(Systems::Collision::Context& ctx, const Enemy& enemy, const Bullet* bullet, float piece_scale, SDL_Color color) { constexpr float SPEED_EXPLOSIO = 80.0F; const Vec2 INHERITED_VEL = enemy.getVelocityVector() * Defaults::Physics::Debris::ENEMY_VELOCITY_INHERITANCE; @@ -43,7 +43,7 @@ namespace Systems::EnemyEvents { 0.0F, 0.0F, Defaults::Sound::EXPLOSION, - enemy.getConfig().colors.normal, + color, Defaults::Physics::Debris::ENEMY_LIFETIME, Defaults::Physics::Debris::ENEMY_FRICTION, Defaults::Physics::Debris::ENEMY_SEGMENT_MULTIPLIER, @@ -52,11 +52,11 @@ namespace Systems::EnemyEvents { } // Helper compartit per CREATE_FIREWORKS i CREATE_FIREWORKS_SMALL: - // mateixa crida a spawn(), només canvien n_points, initial_speed i - // glow_color segons el "tamany" del burst (mort vs feedback per hit). - void spawnFireworksForEnemy(Systems::Collision::Context& ctx, const Enemy& enemy, int n_points, float initial_speed, SDL_Color glow_color) { + // mateixa crida a spawn(); els callers decideixen line_color, glow_color, + // n_points i initial_speed segons el "tamany" del burst (mort vs hit). + void spawnFireworksForEnemy(Systems::Collision::Context& ctx, const Enemy& enemy, int n_points, float initial_speed, SDL_Color line_color, SDL_Color glow_color) { ctx.firework_manager.spawn(enemy.getCenter(), - Defaults::FX::Firework::DEFAULT_COLOR, + line_color, initial_speed, n_points, Defaults::FX::Firework::INITIAL_BRIGHTNESS, @@ -120,20 +120,24 @@ namespace Systems::EnemyEvents { doAddScore(ctx, enemy, shooter_id); break; case EnemyActionType::CREATE_DEBRIS: - spawnDebrisForEnemy(ctx, enemy, bullet, 1.0F); + // Explosió de mort: trossos en color cos (correcte físicament). + spawnDebrisForEnemy(ctx, enemy, bullet, 1.0F, enemy.getConfig().colors.normal); break; case EnemyActionType::CREATE_DEBRIS_PARTIAL: - spawnDebrisForEnemy(ctx, enemy, bullet, Defaults::Enemies::Debris::PARTIAL_PIECE_SCALE); + // Xip d'impacte: trossos en color wounded (daurat) per + // diferenciar-los visualment del cos i marcar "damage". + spawnDebrisForEnemy(ctx, enemy, bullet, Defaults::Enemies::Debris::PARTIAL_PIECE_SCALE, enemy.getConfig().colors.wounded); break; case EnemyActionType::CREATE_FIREWORKS: - // Burst de mort: glow amb el color wounded (daurat) per - // marcar la mort com a esdeveniment "calent". - spawnFireworksForEnemy(ctx, enemy, Defaults::FX::Firework::N_POINTS, Defaults::FX::Firework::SPEED, enemy.getConfig().colors.wounded); + // Burst de mort: línia blanca + glow wounded (daurat) per + // marcar la mort com a esdeveniment "calent" i lluminós. + spawnFireworksForEnemy(ctx, enemy, Defaults::FX::Firework::N_POINTS, Defaults::FX::Firework::SPEED, Defaults::FX::Firework::DEFAULT_COLOR, enemy.getConfig().colors.wounded); break; case EnemyActionType::CREATE_FIREWORKS_SMALL: - // Burst d'impacte: glow amb el color de l'enemic, perquè - // l'espurna llegisca com a "tros del propi cos saltant". - spawnFireworksForEnemy(ctx, enemy, Defaults::Enemies::Fireworks::SMALL_N_POINTS, Defaults::Enemies::Fireworks::SMALL_SPEED, enemy.getConfig().colors.normal); + // Espurna d'impacte: línia + glow tots dos en wounded + // (daurat) per contrastar amb el cos i unificar la "tema + // de damage" amb el debris parcial. + spawnFireworksForEnemy(ctx, enemy, Defaults::Enemies::Fireworks::SMALL_N_POINTS, Defaults::Enemies::Fireworks::SMALL_SPEED, enemy.getConfig().colors.wounded, enemy.getConfig().colors.wounded); break; case EnemyActionType::APPLY_IMPULSE: if (!will_die) {