Install a forward/back exit pair. Async because it internally
awaits the two addExit calls — subclass overrides may run
an async cardinal-zone check.
Optionalopts: BidirectionalExitOptionsInstall an explicit exit. Async because subclasses (notably
CartesianLocation) may perform an async cardinal-zone check
via ZoneApi.resolveZoneForPath before accepting the exit.
The base implementation does only sync work; the async return
type lets overrides remain typesafe.
Declarative-content applier. Iterates the YAML-shape exits map
and installs each entry, lazily cloning destination Locations
(and doors) via StuffApi.singleton. Per-direction idempotency:
matching existing exit → no-op; mismatching exit → throws with a
diagnostic naming both seed paths. Per declarative-content-slate
§ exits on ExitableMixin.
OptionalcanOptional pre-traversal veto: "may this mover ENTER via via?"
OptionalcanOptional pre-traversal veto: "may this mover EXIT via via?"
OptionalgetOptional override for the bodies a Mover broadcasts when arriving
in this location through exit. Anything the implementation omits
falls back to MobileMixin's default.
OptionalgetOptional override for the bodies a Mover broadcasts when leaving
this location through exit. Anything the implementation omits
falls back to MobileMixin's default for that audience.
True iff this Exitable has at least one outbound exit awaiting
mutual-exit verification — the inverse pointer hasn't been wired
because the destination wasn't loaded the last time the verifier
ran. Movement consults this on the hot path to skip
verifyOutboundExits() entirely once every exit has settled.
Each authored exit is tracked individually; settled exits (wired, oneWay, blocked, non-cardinal, no resolvable destPath) are evicted from the pending set as the verifier observes them. The set is empty in the steady state.
OptionalonFired after the mover entered through via.
OptionalonFired after the mover exited through via.
Public shape added by ExitableMixin.
zoneis NOT declared here — it lives onStuffbase universally. Exitable just readsthis.zonewhen deriving cartesian exits.Movement messaging now lives on MobileMixin (the mover composes the Scene). Exitable provides OPTIONAL hook methods that a specific location may implement to override the bodies; default impls are absent. See MobileMixin's
MovementHookProviderfor the shape.