feat(player): join in progress + DISABLED en agotar vidas (Fase 1)
Habilita la regla 1 de la nova FSM de joc: durant PLAYING, qualsevol
slot DISABLED pot pulsar START per entrar a partida amb spawn aeri al
seu costat de la porta i vides reseteades. Quan un jugador esgota les
vides, `respawnFromDying` el deixa a DISABLED i publica `player_disabled`
al bus; GameScene i HUD reaccionen, deixant el slot disponible per a un
nou join. Afegeix prompts al HUD ("PULSA START / PER JUGAR" o
"ESPERA / PER JUGAR") segons l'estat de la RoomFsm.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
8921b9fd0c
commit
c13b11c501
12 files changed
+325
-56
No files matched your search
@@ -1270,11 +1270,30 @@ void Player::applyDyingMovement(float delta_time) {
|
||||
}
|
||||
}
|
||||
|
||||
void Player::resetForJoin() {
|
||||
lives_remaining_ = death_config.initial_lives;
|
||||
}
|
||||
|
||||
void Player::respawnFromDying() {
|
||||
// Vides: decreix sempre. Pot anar a negatius — no hi ha game over.
|
||||
// Vides: decreix una unitat. Si el comptador arriba a 0 el jugador
|
||||
// surt de partida (DISABLED) i la GameScene/HUD reaccionen via bus
|
||||
// — això habilita el flux de "join in progress" (l'altre jugador
|
||||
// pot pulsar START per entrar) i obrirà el camí al CONTINUE? +
|
||||
// GAME OVER en una fase posterior.
|
||||
--lives_remaining_;
|
||||
death_animation_complete_ = false;
|
||||
respawn_remaining_ms_ = 0.0F;
|
||||
if (lives_remaining_ <= 0) {
|
||||
disable();
|
||||
if (bus_ != nullptr) {
|
||||
bus_->publish(Event{
|
||||
.name = "player_disabled",
|
||||
.payload = std::monostate{},
|
||||
.player_id = id_,
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Cinemàtica idèntica a la d'INTRO de sala: el jugador cau des de
|
||||
// dalt fins al passadís d'spawn (`spawnFromAir` reseteja primer i
|
||||
// després posa AIRBORNE amb l'altura derivada de la geometria).
|
||||
|
||||
Reference in new issue
Block a user