feat(room): allibera DynamicHazards del SPAWN al final del text-INTRO
GameScene ara crida `triggerHazardSpawnExit()` quan ROOM_INTRO entra a
la fase 5 (music_tail, immediatament després del text-exit): itera els
DynamicHazards de la sala i els arma el comptador `spawn.duration_s`.
Així la cinemàtica queda:
fade-in → text-enter → text-hold → text-exit
└─> mòmies surten "del terra" (durada `spawn.duration_s` del YAML)
└─> jugadors cauen del cel (delay player_spawn_delay_ms)
`respawnPlayersInstant` (salt debug a sala) també crida el trigger
perquè les mòmies no quedin congelades quan es curt-circuita la
cinemàtica.
Flag `hazards_spawn_triggered_` garanteix idempotència dins el cicle;
es reseteja a `enterRoomIntro` i al `setState(ROOM_INTRO)` defensiu.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
041447eaa4
commit
3b378e2b29
2 files changed
+45
No files matched your search
@@ -118,6 +118,17 @@ class GameScene : public Scene {
|
||||
// el futur.
|
||||
void triggerPlayerSpawn(std::size_t slot_index);
|
||||
|
||||
// Allibera tots els DynamicHazards de la sala (típicament mòmies)
|
||||
// del seu estat SPAWN inicial: arma el comptador via
|
||||
// `DynamicHazard::triggerSpawnExit()`. Es crida a `updateRoomTransition`
|
||||
// quan ROOM_INTRO entra a la fase 5 (post text-exit), perquè les mòmies
|
||||
// surten visualment "del terra" just després que el text desapareix
|
||||
// i abans que caiguin els jugadors. Idempotent dins el cicle
|
||||
// (`hazards_spawn_triggered_`); reset a `enterRoomIntro`. També
|
||||
// cridada des de `respawnPlayersInstant` perquè el salt debug
|
||||
// a sala no deixi les mòmies congelades.
|
||||
void triggerHazardSpawnExit();
|
||||
|
||||
// Cos del callback de fi de música d'INTRO. Idempotent: si ja s'ha
|
||||
// disparat aquest cicle (`intro_completed_`), no fa res. Marca el
|
||||
// flag, reseteja el timer post-callback i intenta spawn dels slots
|
||||
@@ -202,6 +213,10 @@ class GameScene : public Scene {
|
||||
// i a `setState(ROOM_INTRO)` (camí defensiu no canònic).
|
||||
std::array<bool, 2> players_spawned_in_intro_{false, false};
|
||||
|
||||
// Idempotència de `triggerHazardSpawnExit` dins d'un cicle d'INTRO.
|
||||
// Reset a `enterRoomIntro` i a `setState(ROOM_INTRO)`.
|
||||
bool hazards_spawn_triggered_{false};
|
||||
|
||||
// Vista plana de punters crus — la fa servir Player com a llista
|
||||
// d'obstacles mòbils a la callback de col·lisió. Es construeix un sol
|
||||
// cop al ctor (els punters són estables perquè `players_` no es
|
||||
|
||||
Reference in new issue
Block a user