refactor(room-fsm): timeline pur amb music_tail; fades INTRO/OUTRO via Transitions::FadeToBlack i sense callbacks de fi de música

This commit is contained in:
JailDesigner committed 2026-05-06 19:25:19 +02:00
1 parent 3f09858203
commit 29cb4c2211
4 files changed
+137 -97

No files matched your search

+20 -2
View File
@@ -19,9 +19,17 @@ namespace RoomFsm {
// Sub-fase i temps acumulat dins de l'estat actual. Es reseteja a
// {0, 0} quan es canvia d'estat. Significat de `phase` per estat:
// ROOM_INTRO: 0=fade_in, 1=text_delay, 2=text_enter, 3=text_hold, 4=text_exit
// ROOM_OUTRO: 0=text_enter, 1=text_hold, 2=text_exit, 3=fade_out, 4=black_hold
// ROOM_INTRO: 0=fade_in, 1=text_delay, 2=text_enter, 3=text_hold,
// 4=text_exit, 5=music_tail
// ROOM_OUTRO: 0=text_enter, 1=text_hold, 2=text_exit, 3=music_tail,
// 4=fade_out, 5=black_hold
// PLAYING: no s'usa.
// Les fases `music_tail` són la cua silenciosa que sincronitza el
// timeline visual amb el final del .ogg de música corresponent: el
// GameScene les calcula a `enterRoomIntro` / `setState(ROOM_OUTRO)`
// a partir de la durada precarregada del .ogg menys el sumatori de
// les fases de text. Si la música no arrenca, la cua és 0 i la fase
// es consumeix instantàniament (la transició no s'embussa mai).
struct Transition {
int phase{0};
int elapsed_ms{0};
@@ -47,6 +55,16 @@ namespace RoomFsm {
// sense recompilar — útil per donar respir abans del nou rètol.
int outro_black_hold_ms{0};
// Cua silenciosa entre el text d'INTRO/OUTRO i la fi del .ogg de
// música corresponent. NO es llig del YAML — el GameScene la
// calcula a `enterRoomIntro` / `setState(ROOM_OUTRO)` com
// `max(0, music_duration - text_total)`. Així el timeline acaba
// exactament quan la música drena i no cal cap callback de fi
// de música. 0 quan no hi ha música o quan el text dura més que
// la pista.
int intro_music_tail_ms{0};
int outro_music_tail_ms{0};
// 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