tune(enemy): més empenta + cos inert quan està herit

- 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) <noreply@anthropic.com>
This commit is contained in:
2026-05-21 11:33:03 +02:00
parent ff5dfab94d
commit e3af88ea8c
2 changed files with 16 additions and 12 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ namespace Defaults::Physics {
// un factor de transferència [0..1]. 1.0 = transfereix tot el moment // un factor de transferència [0..1]. 1.0 = transfereix tot el moment
// (col·lisió perfectament inelàstica), 0.5 = transfereix la meitat. // (col·lisió perfectament inelàstica), 0.5 = transfereix la meitat.
namespace Bullet { 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 } // namespace Bullet
// Explosions (debris physics) // Explosions (debris physics)
+15 -11
View File
@@ -201,17 +201,21 @@ void Enemy::update(float delta_time) {
brightness_ = START + ((END - START) * SMOOTH_T); brightness_ = START + ((END - START) * SMOOTH_T);
} }
// Comportamiento por tipo (ajusta body_.velocity, NO mueve posición) // Comportamiento por tipo (ajusta body_.velocity, NO mueve posición).
switch (type_) { // Skip cuando está herido: el enemy és un "cos mort" inert, només
case EnemyType::PENTAGON: // respon a la inèrcia del impulse rebut i a les col·lisions físiques.
behaviorPentagon(delta_time); if (!isWounded()) {
break; switch (type_) {
case EnemyType::QUADRAT: case EnemyType::PENTAGON:
behaviorQuadrat(delta_time); behaviorPentagon(delta_time);
break; break;
case EnemyType::MOLINILLO: case EnemyType::QUADRAT:
behaviorMolinillo(delta_time); behaviorQuadrat(delta_time);
break; break;
case EnemyType::MOLINILLO:
behaviorMolinillo(delta_time);
break;
}
} }
// Animaciones (palpitación + rotación acelerada) // Animaciones (palpitación + rotación acelerada)