Sub-FSM nova `GameOverFsm` (CONTINUE_PROMPT → GAME_OVER → FADE_OUT → DONE) que viu en paral·lel a la `RoomFsm`. Es dispara quan tots els jugadors queden DISABLED durant PLAYING, mostra el rètol "Continuar?" amb countdown reusant el panel del room text, i si ningú pulsa START acaba en "Fi del Joc" + fade negre i sol·licita la transició a LOGO. Pulsar START durant CONTINUE? cancel·la el countdown i fa join (revive) del jugador. Després de GAME OVER, el HUD passa a "ESPERA / PER JUGAR" i el START queda bloquejat fins a la transició d'escena. Els helpers d'animació del room text (X i altura del panel) ara reben phase + elapsed_ms per paràmetre per poder ser reaprofitats per les dues sub-FSMs sense duplicar la lògica visual. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
71 lines
3.3 KiB
YAML
71 lines
3.3 KiB
YAML
# Configuració de la GameScene: timings i corbes de la FSM de sala
|
|
# (ROOM_INTRO i ROOM_OUTRO). Tots els valors són ms i tota la geometria
|
|
# i font del text es reutilitzen del tema UI (data/config/ui.yaml > pause +
|
|
# notification). Si manca el fitxer o alguna clau, GameScene cau als
|
|
# fallbacks compilats; veure `readSceneConfig` a game_scene.cpp.
|
|
|
|
room_intro:
|
|
fade_in_ms: 500 # negre opac → món visible
|
|
text_delay_ms: 500 # espera amb el món net abans de sortir el text
|
|
text_enter_ms: 400 # text esquerra → centre
|
|
text_hold_ms: 2000 # text quiet al centre
|
|
text_exit_ms: 400 # text centre → fora per l'esquerra
|
|
line_gap_px: -4 # px extra entre les dues línies (piràmide / sala)
|
|
# Delays d'spawn aeri **mesurats des de la fi de la música d'INTRO**
|
|
# (callback `Audio::setOnMusicEnded`). 0 = cau al moment exacte que
|
|
# `room_intro.ogg` acaba; valors > 0 escalonen els jugadors. En mode
|
|
# single-player s'usa només `player_spawn_delay_ms`.
|
|
player_spawn_delay_ms: 0
|
|
player2_spawn_delay_ms: 300
|
|
# Preset de reverb (catàleg a `data/config/sounds.yaml`) aplicat al primer
|
|
# LAND de cada jugador durant la cinemàtica d'entrada. La sala dona
|
|
# "més detall" sonor a l'INTRO; els salts del joc i els respawns
|
|
# post-mort cauen al so sec. Buit o absent = sense reverb.
|
|
land_reverb: stone_hall
|
|
|
|
room_outro:
|
|
text_enter_ms: 400
|
|
text_hold_ms: 2000
|
|
text_exit_ms: 400
|
|
fade_out_ms: 500 # món visible → negre opac
|
|
line_gap_px: -4 # px extra entre les dues línies (fase / completada)
|
|
black_hold_ms: 500 # pausa en negre abans d'entrar a la pròxima sala
|
|
|
|
text:
|
|
# Noms d'easing tal com els resol UiConfig::curveByName (vegeu
|
|
# `data/config/ui.yaml`). El text entra suau i surt accelerant.
|
|
enter_curve: outCubic
|
|
exit_curve: inCubic
|
|
|
|
# Panel translúcid pintat sota el rètol de transició (INTRO i OUTRO).
|
|
# Va centrat verticalment al centre del playfield i ocupa tota
|
|
# l'amplada del canvas. Creix d'altura amb la mateixa enter_curve del
|
|
# text i decreix amb l'exit_curve. `color` són tres canals RGB (0..255);
|
|
# `alpha` és la transparència del blend (0 = invisible, 255 = opac).
|
|
text_panel:
|
|
color: [36, 182, 170]
|
|
alpha: 128
|
|
height_px: 32
|
|
|
|
# Sub-FSM de game over: dispara CONTINUE? quan tots els jugadors
|
|
# queden fora de partida durant PLAYING, fa countdown, i si ningú
|
|
# pulsa START acaba en GAME OVER + fade-to-black + transició a LOGO.
|
|
# Tots els valors són ms (excepte `continue_count_steps`, que és el
|
|
# nombre de tics visibles del countdown). Si manca el fitxer o alguna
|
|
# clau, GameScene cau als fallbacks compilats (vegeu `GameOverFsm::Config`).
|
|
game_over:
|
|
# CONTINUE? — animació d'entrada i sortida idèntica al room text.
|
|
continue_text_enter_ms: 400
|
|
continue_text_hold_ms: 5000 # 5 s = `continue_count_steps` graons d'1 s
|
|
continue_text_exit_ms: 400
|
|
continue_count_steps: 5
|
|
# GAME OVER — apareix sense enter anim (panel ja amunt del CONTINUE?),
|
|
# es manté un temps i marxa amb la mateixa exit anim del room text.
|
|
game_over_text_hold_ms: 1500
|
|
game_over_text_exit_ms: 400
|
|
game_over_wait_ms: 400
|
|
# Fade final cap a LOGO. `black_hold_ms` és la pausa en negre opac
|
|
# abans que el GameScene demani la transició d'escena.
|
|
fade_out_ms: 500
|
|
black_hold_ms: 500
|