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;
|
continue;
|
||||||
}
|
}
|
||||||
const uint8_t BULLET_OWNER = bullet.getOwnerId();
|
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++) {
|
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
|
// 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 ***
|
// *** BALA D'ENEMIC → SHIP ***
|
||||||
// Regla "cos XOR trossos": l'impuls de la bala s'aplica al cos
|
// Mata d'un sol toc (decisió de disseny). El bullet va als trossos
|
||||||
// només si el ship sobreviu (fereix). Si el ship mor, el bullet
|
// via tocado; el cos no rep impuls (seria double-count amb la
|
||||||
// va directament als trossos (via tocado) i el cos no rep impuls
|
// velocitat que ja hereten els trossos).
|
||||||
// — els trossos ja porten la força de la bala, qualsevol impuls
|
|
||||||
// afegit al cos seria double-count.
|
|
||||||
const Vec2 BULLET_VEL = bullet.getBody().velocity;
|
const Vec2 BULLET_VEL = bullet.getBody().velocity;
|
||||||
if (ctx.ships[player_id].isHurt()) {
|
ctx.on_player_hit(player_id, BULLET_VEL);
|
||||||
// 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();
|
|
||||||
}
|
|
||||||
breakBullet(ctx.debris_manager, bullet);
|
breakBullet(ctx.debris_manager, bullet);
|
||||||
break; // una bala impacta una vegada per frame
|
break; // una bala impacta una vegada per frame
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user