feat(outro): pausa en negre opac entre sales (5a fase de OUTRO)

Nova fase 4 a ROOM_OUTRO: black_hold. Va just després del fade_out;
durant aquesta fase la pantalla queda completament en negre opac i
la FSM espera abans de transitar a INTRO. Permet donar respir entre
el final del rètol Fase/Completada i el rellançament del Piramide/Sala
de la sala següent, sense necessitat d'un estat nou.

Implementacio:
- RoomFsm::Config guanya outro_black_hold_ms (default 0 — backward
  compatible). YAML key room_outro.black_hold_ms al data/scenes/game.yaml
  (default visible 500 ms; lo afines sense recompilar).
- L'array DURS de l'OUTRO passa de 4 a 5 elements; el while-loop
  consumeix la fase exactament igual.
- renderRoomFade detecta fase 4 i dibuixa alpha=255 fix; sense aquesta
  branca, el fade s'apagaria a final de la fase 3 i el món tornaria
  a ser visible durant la pausa.
- renderRoomText no canvia: phases 3 i 4 ja queden fora del rang
  0..2 on dibuixa el rètol.

Backward compat: black_hold_ms=0 fa que el while-loop avance
immediatament la fase i recauen tots els tests existents (T7 i
companys) sense modificacions.
This commit is contained in:
JailDesigner committed 2026-04-26 17:39:02 +02:00
1 parent 7982df922b
commit 98303f7ce8
4 files changed
+25 -5

No files matched your search

+6 -1
View File
@@ -20,7 +20,7 @@ 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
// ROOM_OUTRO: 0=text_enter, 1=text_hold, 2=text_exit, 3=fade_out, 4=black_hold
// PLAYING: no s'usa.
struct Transition {
int phase{0};
@@ -41,6 +41,11 @@ namespace RoomFsm {
int outro_text_hold_ms{1000};
int outro_text_exit_ms{500};
int outro_fade_out_ms{500};
// Pausa en negre opac entre el final de l'OUTRO i el començament
// de l'INTRO de la sala següent. 0 = sense pausa (transició
// immediata, comportament històric). El YAML pot sobreescriure
// 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. Independent del