feat(audio): cicle de música per estat (INTRO/PLAYING/OUTRO) amb callback de fi i spawn escalonat

This commit is contained in:
JailDesigner committed 2026-04-28 19:41:38 +02:00
1 parent 91f664c4d5
commit 404db74889
13 files changed
+199 -128

No files matched your search

+10 -21
View File
@@ -47,23 +47,19 @@ namespace RoomFsm {
// sense recompilar — útil per donar respir abans del nou rètol.
int outro_black_hold_ms{0};
// Mil·lisegons des de l'inici de ROOM_INTRO en què cau la
// cinemàtica d'spawn aeri dels jugadors actius. Específic per a
// l'entrada de sala — el respawn post-mort tindrà el seu propi
// timing quan toqui dissenyar-lo. Un valor habitual: la suma de
// fade_in + text_delay + text_enter + text_hold, perquè els
// players caiguin just quan el rètol comença a sortir. El
// fallback compilat (500 ms) deixa el spawn al final del fade-in
// si el YAML no defineix res — només pensat com a degradació.
int player_spawn_delay_ms{500};
// Mil·lisegons des del callback de fi de la música d'INTRO
// (`room_intro.ogg`) en què cau l'spawn aeri del primer slot
// actiu. 0 = cau al moment exacte que la música acaba. El
// respawn post-mort tindrà el seu propi timing quan toqui
// dissenyar-lo.
int player_spawn_delay_ms{0};
// Delay independent per al segon jugador, **només quan els dos
// slots estan actius** (mode BOTH). En single-player (P1 o P2
// sols) s'usa sempre `player_spawn_delay_ms` per al jugador
// actiu. Si el YAML no fixa aquest valor, el `loadConfig` el
// copia de `player_spawn_delay_ms` perquè els dos players caiguin
// alhora — comportament històric del joc.
int player2_spawn_delay_ms{500};
// sols) s'usa sempre `player_spawn_delay_ms`. Si el YAML no
// fixa aquest valor, `loadConfig` el copia de `player_spawn_delay_ms`
// perquè els dos players caiguin alhora — comportament neutre.
int player2_spawn_delay_ms{0};
// Píxels extra entre les dues línies del text d'INTRO (piràmide
// damunt, sala davall). Es sumen al `lineHeight` natural del
@@ -87,13 +83,6 @@ namespace RoomFsm {
// cinemàtica d'entrada sona igual que un salt qualsevol).
std::string intro_land_reverb_preset;
// Clau d'un so puntual (data/sounds/<key>) que GameScene
// dispara just quan la cinemàtica d'INTRO arriba a la fase
// d'entrada del text (phase == 2). Buit o absent = sense so.
// Convenció Resource::Cache: el basename val tant de clau com
// de path (loadSound ho fa servir igual que el land_sound).
std::string intro_text_sound;
// Panel translúcid sota el rètol de transició (INTRO i OUTRO).
// Centrat verticalment al centre del playfield, ocupa tota
// l'amplada del canvas. Creix d'altura 0 → height_px durant la