feat(level-manager): salts debug entre sales (només Debug)

Tecles [ i ] al keys.yaml (prev_room / next_room) que mouen
LevelManager::setIndex en ±1 i recarreguen la sala via loadRoom +
enterRoomIntro. Ignorades si la pausa està activa o l'editor obert
(qualsevol dels dos invalida l'estat editat).

Refactor de la FSM al mateix pas: l'avanç de sala (LevelManager +
loadRoom) ja no viu dins setState — el dispara updateRoomTransition
quan detecta el final de l'OUTRO via advanceToNextRoom. setState
torna a ser una transició pura, condició necessària perquè el salt
debug puga entrar a INTRO sense disparar un advance addicional.
Nou helper enterRoomIntro() reusable per la sortida de l'OUTRO i pels
salts; idempotent quan ja s'estava a INTRO.
This commit is contained in:
JailDesigner committed 2026-04-26 14:59:34 +02:00
1 parent d52cc1c509
commit b147590a39
3 files changed
+78 -15

No files matched your search

+11 -4
View File
@@ -217,12 +217,19 @@ class GameScene : public Scene {
void loadRoom(const std::string& yaml_path);
// Demana al LevelManager el següent nivell i el carrega via
// `loadRoom`. Si ja era a l'última entrada, fa loop a la primera
// (política temporal mentre no hi haja pantalla de fi de joc).
// Cridat des de `setState(ROOM_INTRO)` quan la transició anterior
// era OUTRO — és la conseqüència de creuar la porta.
// `loadRoom`, deixant la FSM al començament d'un nou cicle d'INTRO.
// Si ja era a l'última entrada, fa loop a la primera (política
// temporal mentre no hi haja pantalla de fi de joc). Cridat des de
// `updateRoomTransition` quan l'OUTRO arriba a la fase final.
void advanceToNextRoom();
// Inicia (o reinicia) el cicle d'entrada de sala: posa l'estat a
// ROOM_INTRO i reseteja `transition_`, `room_intro_elapsed_ms_` i el
// flag d'spawn aeri. Idempotent quan ja s'estava a INTRO (els
// timers tornen a començar des de zero — útil per als salts debug
// que recarreguen la sala estant ja en INTRO).
void enterRoomIntro();
#ifdef _DEBUG
// Editor modal del tilemap. Mútuament excloent amb la pausa: si la
// pausa no està IDLE la tecla de toggle de l'editor s'ignora, i