fix(col·lisions): les bales d'enemic deixen de comptar com a foc amic (out-of-bounds a lives_per_player) i maten d'un toc
This commit is contained in:
@@ -145,6 +145,12 @@ namespace Systems::Collision {
|
||||
continue;
|
||||
}
|
||||
const uint8_t BULLET_OWNER = bullet.getOwnerId();
|
||||
// Les bales d'enemic NO són friendly fire: les gestiona
|
||||
// detectEnemyBulletShip. Sense aquest filtre, owner >= ENEMY_OWNER_BASE
|
||||
// entraria ací i faria un out-of-bounds a lives_per_player[owner].
|
||||
if (BULLET_OWNER >= Defaults::Entities::ENEMY_OWNER_BASE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (uint8_t player_id = 0; player_id < 2; player_id++) {
|
||||
// Una bala mai no impacta al seu propi shooter: les bales d'aquest joc no
|
||||
@@ -208,22 +214,11 @@ namespace Systems::Collision {
|
||||
}
|
||||
|
||||
// *** BALA D'ENEMIC → SHIP ***
|
||||
// Regla "cos XOR trossos": l'impuls de la bala s'aplica al cos
|
||||
// només si el ship sobreviu (fereix). Si el ship mor, el bullet
|
||||
// va directament als trossos (via tocado) i el cos no rep impuls
|
||||
// — els trossos ja porten la força de la bala, qualsevol impuls
|
||||
// afegit al cos seria double-count.
|
||||
// Mata d'un sol toc (decisió de disseny). El bullet va als trossos
|
||||
// via tocado; el cos no rep impuls (seria double-count amb la
|
||||
// velocitat que ja hereten els trossos).
|
||||
const Vec2 BULLET_VEL = bullet.getBody().velocity;
|
||||
if (ctx.ships[player_id].isHurt()) {
|
||||
// Segon impacte durant HURT → mort.
|
||||
ctx.on_player_hit(player_id, BULLET_VEL);
|
||||
} else {
|
||||
// Fereix: el cos sobreviu, rep l'impuls. No hi ha debris encara.
|
||||
const Vec2 IMPULSE = BULLET_VEL *
|
||||
(bullet.getBody().mass * bullet.getConfig().physics.impact_momentum_factor);
|
||||
ctx.ships[player_id].getBody().applyImpulse(IMPULSE);
|
||||
ctx.ships[player_id].hurt();
|
||||
}
|
||||
ctx.on_player_hit(player_id, BULLET_VEL);
|
||||
breakBullet(ctx.debris_manager, bullet);
|
||||
break; // una bala impacta una vegada per frame
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user