refactor(mummy): generalitza el filtre de cruces a isBlockedAheadInDir
This commit is contained in:
1 parent
11a909b58d
commit
9ac0c0cb74
2 files changed
+30
-21
No files matched your search
@@ -87,24 +87,30 @@ class Mummy : public DynamicHazard {
|
||||
// `perpendiculars` (girs) i `uturn` (inversa). La direcció actual s'exclou
|
||||
// perquè ja sabem que està bloquejada. Cada candidata es valida amb
|
||||
// `Map::insidePlayfield` + `Map::collides` sobre la caja resultant. Si
|
||||
// `avoid_decals` és true i hi ha `EntityManager` injectat, també es
|
||||
// `avoid_blocked` és true i hi ha `EntityManager` injectat, també es
|
||||
// descarten les direccions que apunten a un tile amb un decal trigger
|
||||
// (Hole o futurs pinchos plans/charcos). El caller és responsable de
|
||||
// re-cridar amb `avoid_decals=false` com a fallback si totes les
|
||||
// re-cridar amb `avoid_blocked=false` com a fallback si totes les
|
||||
// direccions filtrades estan bloquejades.
|
||||
struct DirectionPools {
|
||||
std::vector<Direction> perp;
|
||||
std::vector<Direction> uturn;
|
||||
};
|
||||
[[nodiscard]] auto collectDirectionPools(float step, bool avoid_decals = true) const -> DirectionPools;
|
||||
[[nodiscard]] auto collectDirectionPools(float step, bool avoid_blocked = true) const -> DirectionPools;
|
||||
|
||||
// True si el tile cardinal contigu en la direcció (signe de dx, signe
|
||||
// de dy) conté un decal trigger (`is_floor_decal_ && triggers_on_overlap_`)
|
||||
// de dy) està bloquejat per qualsevol motiu: fora del playfield, ocupat
|
||||
// per geometria estàtica (sarcs, door_corridor tancat) via `Map::collides`,
|
||||
// o conté un decal trigger (`is_floor_decal_ && triggers_on_overlap_`)
|
||||
// segons `EntityManager::findFloorTriggerAt`. Captura `Hole` i qualsevol
|
||||
// futur decal trigger sense hardcodejar tipus. Si `entity_manager_` no
|
||||
// està injectat (smoke tests sense manager), retorna false silenciosament
|
||||
// — la mòmia es comporta com abans del feature.
|
||||
[[nodiscard]] auto isDecalAheadInDir(float dx_signed, float dy_signed) const -> bool;
|
||||
// futur decal trigger sense hardcodejar tipus, i evita que la mòmia
|
||||
// triï a un creuament una direcció que el frame següent toparia (cas
|
||||
// típic: a la intersecció anterior al límit nord del playfield, on el
|
||||
// pas immediat encara hi cap però el tile sencer següent ja està fora).
|
||||
// Si `entity_manager_` no està injectat (smoke tests sense manager),
|
||||
// el filtre de decals és silenciós però els altres dos (playfield i
|
||||
// collides) segueixen actius.
|
||||
[[nodiscard]] auto isBlockedAheadInDir(float dx_signed, float dy_signed) const -> bool;
|
||||
|
||||
// Canvi de direcció + selecció de l'animació corresponent (un cardinal
|
||||
// per branch). Tots els camins que trien nova direcció (ctor amb
|
||||
|
||||
Reference in new issue
Block a user