feat(em): spawn diferit de DynamicHazards (pending_actors_)
`loadFromLevel` ja no instancia immediatament les DynamicHazards del
YAML del mapa: les acumula a `pending_actors_` (estructura {type,
spawn_node}). El loader decideix per la categoria semàntica de la
plantilla (`type:` del YAML d'entity: "dynamic_hazard" → pending; la
resta → addSpawn d'instant).
Dues APIs noves consumeixen pending_actors_:
- `spawnPendingActors()` — itera la cua, instancia tots via addSpawn
i arma `triggerSpawnExit()` a cada un. Vacia la cua. El path
d'aparició massiva al final del text-exit de ROOM_INTRO.
- `spawnActor(type, col, row)` — instancia un únic actor on-demand
des d'un spawn YAML sintètic. Pensat per a futurs generadors
(StaticHazards que produeixen DynamicHazards en runtime: gotes,
roques, etc.). Cada actor neix ja en EMERGING.
`GameScene::triggerHazardSpawnExit` ara és un wrapper de
`spawnPendingActors()` — el dispar segueix en la subfase actual
(fase 5 de ROOM_INTRO) i a `respawnPlayersInstant`. El canvi de timing
ve en el commit següent.
`reload` també buida pending_actors_. Log: "N map entities + M actors
pending des de PATH" — visible per a diagnòstic.
Sense canvis de comportament observables al joc: les mòmies segueixen
apareixent al final del text-exit, però ara la "aparició" és la seua
instanciació real (abans ja existien quietes des del fade-in).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
62f4b857ef
commit
6a6a1a52c7
3 files changed
+106
-13
No files matched your search
@@ -687,16 +687,12 @@ void GameScene::respawnPlayersInstant() {
|
||||
#endif
|
||||
|
||||
void GameScene::triggerHazardSpawnExit() {
|
||||
int count = 0;
|
||||
// `getActors()` retorna directament `DynamicHazard*` — sense
|
||||
// dynamic_cast (els actors viuen en el seu sac dedicat).
|
||||
for (auto* actor : entity_manager_.getActors()) {
|
||||
if (actor->isSpawning()) {
|
||||
actor->triggerSpawnExit();
|
||||
++count;
|
||||
}
|
||||
}
|
||||
Log::info("ROOM", "INTRO: hazard spawn-exit armat ({} DynamicHazards)", count);
|
||||
// Instancia els actors diferits (els que `loadFromLevel` ha empès a
|
||||
// `pending_actors_`) i els arma el `triggerSpawnExit()` perquè entrin
|
||||
// ja en EMERGING. L'aparició visual de la mòmia és aquesta crida.
|
||||
const std::size_t PENDING = entity_manager_.pendingActorCount();
|
||||
entity_manager_.spawnPendingActors();
|
||||
Log::info("ROOM", "INTRO: spawn diferit de {} actors", PENDING);
|
||||
}
|
||||
|
||||
void GameScene::triggerPlayerSpawn(std::size_t slot_index) {
|
||||
|
||||
Reference in new issue
Block a user