From e3af88ea8c2d79d3302983b21a04ab1a6550d9b5 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 21 May 2026 11:33:03 +0200 Subject: [PATCH] =?UTF-8?q?tune(enemy):=20m=C3=A9s=20empenta=20+=20cos=20i?= =?UTF-8?q?nert=20quan=20est=C3=A0=20herit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - IMPACT_MOMENTUM_FACTOR: 1.0 → 2.0 (doble del moment de la bala). Pentagon Δv = 140 px/s (≈4× la seva velocity base), prou clar. - Enemy::update: salta el switch de behavior (Pentagon zigzag, Quadrat tracking, Molinillo proximity-spin) mentre wounded_timer_>0. El enemic herit és un "cos mort" inert: només respon a la inèrcia del impulse rebut i a les col·lisions físiques resoltes per PhysicsWorld. Abans, el Quadrat renormalitzava la velocity cada 1s cap al ship, esborrant la inèrcia. Co-Authored-By: Claude Opus 4.7 (1M context) --- source/core/defaults/physics.hpp | 2 +- source/game/entities/enemy.cpp | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/source/core/defaults/physics.hpp b/source/core/defaults/physics.hpp index f6f5dad..0d415eb 100644 --- a/source/core/defaults/physics.hpp +++ b/source/core/defaults/physics.hpp @@ -15,7 +15,7 @@ namespace Defaults::Physics { // un factor de transferència [0..1]. 1.0 = transfereix tot el moment // (col·lisió perfectament inelàstica), 0.5 = transfereix la meitat. namespace Bullet { - constexpr float IMPACT_MOMENTUM_FACTOR = 1.0F; // Factor de transferència de moment bala→enemic + constexpr float IMPACT_MOMENTUM_FACTOR = 2.0F; // Factor de transferència de moment bala→enemic } // namespace Bullet // Explosions (debris physics) diff --git a/source/game/entities/enemy.cpp b/source/game/entities/enemy.cpp index d531a12..c0626be 100644 --- a/source/game/entities/enemy.cpp +++ b/source/game/entities/enemy.cpp @@ -201,17 +201,21 @@ void Enemy::update(float delta_time) { brightness_ = START + ((END - START) * SMOOTH_T); } - // Comportamiento por tipo (ajusta body_.velocity, NO mueve posición) - switch (type_) { - case EnemyType::PENTAGON: - behaviorPentagon(delta_time); - break; - case EnemyType::QUADRAT: - behaviorQuadrat(delta_time); - break; - case EnemyType::MOLINILLO: - behaviorMolinillo(delta_time); - break; + // Comportamiento por tipo (ajusta body_.velocity, NO mueve posición). + // Skip cuando está herido: el enemy és un "cos mort" inert, només + // respon a la inèrcia del impulse rebut i a les col·lisions físiques. + if (!isWounded()) { + switch (type_) { + case EnemyType::PENTAGON: + behaviorPentagon(delta_time); + break; + case EnemyType::QUADRAT: + behaviorQuadrat(delta_time); + break; + case EnemyType::MOLINILLO: + behaviorMolinillo(delta_time); + break; + } } // Animaciones (palpitación + rotación acelerada)