feat(mummy): naix en SPAWN, llig spawn.duration_s del YAML
La mòmia ara entra a l'estat SPAWN al construir-se: visible al pixel_rect_ inicial, sense moviment ni dany, esperant que algú extern (GameScene) li armi el comptador via `triggerSpawnExit()`. La durada (`spawn.duration_s` al YAML, default 0) controla quan passa a ROAMING una vegada armat el comptador. Posat a 0.6s a mummy.yaml. Aquest commit encara no enganxa el trigger: la mòmia es queda quieta tota la partida — comportament visual intermedi, esperat. El commit següent posarà el trigger a GameScene al final del text-exit de ROOM_INTRO. Tests de smoke i whip ajustats: les mòmies construïdes en stand-alone necessiten `triggerSpawnExit()` + un update gran abans d'interactuar amb `enterHurt`/contacto. Helper `exitMummySpawn` afegit a cada fitxer. Guards defensius a `enterHurt` i `onPlayerContact`: encara que el filtre central a EntityManager salta DynamicHazards en SPAWN, blindem la crida directa per a futurs camins (whip propers, scripts...). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
a6b2b02930
commit
041447eaa4
4 files changed
+49
No files matched your search
@@ -32,6 +32,14 @@ namespace {
|
||||
|
||||
#define REQUIRE(cond) check((cond), #cond, __FILE__, __LINE__)
|
||||
|
||||
// Treu la mòmia de l'estat SPAWN inicial (Mummy::Mummy ara hi entra). Els
|
||||
// tests del whip necessiten que la mòmia estigui ACTIVE per reaccionar
|
||||
// al fueteig — sense això, `enterHurt` torna early per `isSpawning()`.
|
||||
void exitMummySpawn(Mummy& mummy) {
|
||||
mummy.triggerSpawnExit();
|
||||
mummy.update(mummy.getSpawnDurationS() + 0.001F);
|
||||
}
|
||||
|
||||
// Caja de jugador "estàndard" AEE: 16×32 amb cantonada (x, y).
|
||||
// El damage_rect del whip s'alinearà al feet box (els últims 16 px),
|
||||
// i el draw_rect respectarà els offsets de la taula del disseny.
|
||||
@@ -200,6 +208,7 @@ namespace {
|
||||
// = OY, la collision queda a [OY+12, OY+24], 8 px d'overlap.
|
||||
mummy_owned->setPixelRect({.x = OX + 24.0F, .y = OY, .w = 12.0F, .h = 24.0F});
|
||||
auto* mummy_raw = static_cast<Mummy*>(manager.add(std::move(mummy_owned)));
|
||||
exitMummySpawn(*mummy_raw);
|
||||
|
||||
auto whip = makeWhip(WhipAttack::Direction::EAST, BOX, 48.0F);
|
||||
whip->setWorldContext(&manager, nullptr);
|
||||
@@ -258,6 +267,7 @@ namespace {
|
||||
// = OY, la collision queda a [OY+12, OY+24], 8 px d'overlap.
|
||||
mummy_owned->setPixelRect({.x = OX + 24.0F, .y = OY, .w = 12.0F, .h = 24.0F});
|
||||
auto* mummy_raw = static_cast<Mummy*>(manager.add(std::move(mummy_owned)));
|
||||
exitMummySpawn(*mummy_raw);
|
||||
|
||||
auto whip = makeWhip(WhipAttack::Direction::EAST, BOX, 48.0F);
|
||||
whip->setWorldContext(&manager, nullptr);
|
||||
|
||||
Reference in new issue
Block a user