@sharpee/world-model 3.1.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/annotations/index.d.ts +1 -1
- package/annotations/index.d.ts.map +1 -1
- package/annotations/index.js +1 -1
- package/annotations/index.js.map +1 -1
- package/behaviors/attack.d.ts +21 -4
- package/behaviors/attack.d.ts.map +1 -1
- package/behaviors/attack.js +37 -33
- package/behaviors/attack.js.map +1 -1
- package/behaviors/behavior.d.ts +3 -3
- package/behaviors/behavior.d.ts.map +1 -1
- package/behaviors/index.d.ts +21 -21
- package/behaviors/index.d.ts.map +1 -1
- package/behaviors/index.js +33 -33
- package/behaviors/index.js.map +1 -1
- package/capabilities/action-interceptor.d.ts +3 -3
- package/capabilities/action-interceptor.d.ts.map +1 -1
- package/capabilities/capability-behavior.d.ts +3 -3
- package/capabilities/capability-behavior.d.ts.map +1 -1
- package/capabilities/capability-binding.d.ts +3 -3
- package/capabilities/capability-binding.d.ts.map +1 -1
- package/capabilities/capability-helpers.d.ts +2 -2
- package/capabilities/capability-helpers.d.ts.map +1 -1
- package/capabilities/entity-builder.d.ts +2 -2
- package/capabilities/entity-builder.d.ts.map +1 -1
- package/capabilities/index.d.ts +9 -9
- package/capabilities/index.d.ts.map +1 -1
- package/capabilities/index.js +26 -26
- package/capabilities/index.js.map +1 -1
- package/capabilities/interceptor-binding.d.ts +2 -2
- package/capabilities/interceptor-binding.d.ts.map +1 -1
- package/capabilities/interceptor-helpers.d.ts +2 -2
- package/capabilities/interceptor-helpers.d.ts.map +1 -1
- package/commands/command-types.d.ts +2 -2
- package/commands/command-types.d.ts.map +1 -1
- package/commands/index.d.ts +3 -3
- package/commands/index.d.ts.map +1 -1
- package/commands/index.js +3 -3
- package/commands/index.js.map +1 -1
- package/commands/parsed-command.d.ts +13 -0
- package/commands/parsed-command.d.ts.map +1 -1
- package/commands/validated-command.d.ts +16 -2
- package/commands/validated-command.d.ts.map +1 -1
- package/constants/index.d.ts +3 -3
- package/constants/index.d.ts.map +1 -1
- package/constants/index.js +3 -3
- package/constants/index.js.map +1 -1
- package/entities/entity-store.d.ts +1 -1
- package/entities/entity-store.d.ts.map +1 -1
- package/entities/entity-store.js +2 -2
- package/entities/entity-store.js.map +1 -1
- package/entities/if-entity.d.ts +3 -3
- package/entities/if-entity.d.ts.map +1 -1
- package/entities/if-entity.js +38 -34
- package/entities/if-entity.js.map +1 -1
- package/entities/index.d.ts +6 -6
- package/entities/index.d.ts.map +1 -1
- package/entities/index.js +10 -10
- package/entities/index.js.map +1 -1
- package/entities/trait-rehydrator.d.ts +43 -0
- package/entities/trait-rehydrator.d.ts.map +1 -0
- package/entities/trait-rehydrator.js +45 -0
- package/entities/trait-rehydrator.js.map +1 -0
- package/entities/wall-entity.d.ts +2 -2
- package/entities/wall-entity.d.ts.map +1 -1
- package/entities/wall-entity.js +2 -2
- package/entities/wall-entity.js.map +1 -1
- package/examples/event-handler-registration.d.ts +1 -1
- package/examples/event-handler-registration.d.ts.map +1 -1
- package/examples/event-handler-registration.js +24 -24
- package/examples/event-handler-registration.js.map +1 -1
- package/extensions/base-extension.d.ts +3 -3
- package/extensions/base-extension.d.ts.map +1 -1
- package/extensions/index.d.ts +4 -4
- package/extensions/index.d.ts.map +1 -1
- package/extensions/index.js +11 -11
- package/extensions/index.js.map +1 -1
- package/extensions/loader.d.ts +1 -1
- package/extensions/loader.d.ts.map +1 -1
- package/extensions/loader.js +2 -2
- package/extensions/loader.js.map +1 -1
- package/extensions/manager.d.ts +1 -1
- package/extensions/manager.d.ts.map +1 -1
- package/extensions/manager.js +2 -2
- package/extensions/manager.js.map +1 -1
- package/extensions/registry.d.ts +2 -2
- package/extensions/registry.d.ts.map +1 -1
- package/extensions/registry.js +4 -4
- package/extensions/registry.js.map +1 -1
- package/extensions/types.d.ts +2 -2
- package/extensions/types.d.ts.map +1 -1
- package/index.d.ts +58 -59
- package/index.d.ts.map +1 -1
- package/index.js +62 -63
- package/index.js.map +1 -1
- package/interfaces/command-executor.d.ts +1 -1
- package/interfaces/command-executor.d.ts.map +1 -1
- package/interfaces/command-processor.d.ts +1 -1
- package/interfaces/command-processor.d.ts.map +1 -1
- package/interfaces/command-validator.d.ts +1 -1
- package/interfaces/command-validator.d.ts.map +1 -1
- package/interfaces/index.d.ts +4 -4
- package/interfaces/index.d.ts.map +1 -1
- package/interfaces/index.js +4 -4
- package/interfaces/index.js.map +1 -1
- package/interfaces/parser.d.ts +1 -1
- package/interfaces/parser.d.ts.map +1 -1
- package/package.json +3 -3
- package/scope/index.d.ts +3 -3
- package/scope/index.d.ts.map +1 -1
- package/scope/index.js +3 -3
- package/scope/index.js.map +1 -1
- package/scope/scope-evaluator.d.ts +2 -2
- package/scope/scope-evaluator.d.ts.map +1 -1
- package/scope/scope-registry.d.ts +1 -1
- package/scope/scope-registry.d.ts.map +1 -1
- package/state-adjectives.d.ts +1 -1
- package/state-adjectives.d.ts.map +1 -1
- package/state-adjectives.js +5 -5
- package/state-adjectives.js.map +1 -1
- package/state-clauses.d.ts +1 -1
- package/state-clauses.d.ts.map +1 -1
- package/state-clauses.js +5 -5
- package/state-clauses.js.map +1 -1
- package/test-structure.d.ts +1 -1
- package/test-structure.d.ts.map +1 -1
- package/test-structure.js +7 -7
- package/test-structure.js.map +1 -1
- package/traits/acoustic/acousticDampenerTrait.d.ts +1 -1
- package/traits/acoustic/acousticDampenerTrait.d.ts.map +1 -1
- package/traits/acoustic/acousticDampenerTrait.js +3 -3
- package/traits/acoustic/acousticDampenerTrait.js.map +1 -1
- package/traits/acoustic/acousticTrait.d.ts +1 -1
- package/traits/acoustic/acousticTrait.d.ts.map +1 -1
- package/traits/acoustic/acousticTrait.js +3 -3
- package/traits/acoustic/acousticTrait.js.map +1 -1
- package/traits/acoustic/index.d.ts +2 -2
- package/traits/acoustic/index.d.ts.map +1 -1
- package/traits/acoustic/index.js +5 -5
- package/traits/acoustic/index.js.map +1 -1
- package/traits/actor/actorBehavior.d.ts +4 -4
- package/traits/actor/actorBehavior.d.ts.map +1 -1
- package/traits/actor/actorBehavior.js +38 -34
- package/traits/actor/actorBehavior.js.map +1 -1
- package/traits/actor/actorTrait.d.ts +1 -1
- package/traits/actor/actorTrait.d.ts.map +1 -1
- package/traits/actor/actorTrait.js +3 -3
- package/traits/actor/actorTrait.js.map +1 -1
- package/traits/actor/index.d.ts +2 -2
- package/traits/actor/index.d.ts.map +1 -1
- package/traits/actor/index.js +6 -6
- package/traits/actor/index.js.map +1 -1
- package/traits/all-traits.d.ts +30 -33
- package/traits/all-traits.d.ts.map +1 -1
- package/traits/all-traits.js +56 -62
- package/traits/all-traits.js.map +1 -1
- package/traits/attached/attachedTrait.d.ts +1 -1
- package/traits/attached/attachedTrait.d.ts.map +1 -1
- package/traits/attached/attachedTrait.js +3 -3
- package/traits/attached/attachedTrait.js.map +1 -1
- package/traits/attached/index.d.ts +1 -1
- package/traits/attached/index.d.ts.map +1 -1
- package/traits/attached/index.js +1 -1
- package/traits/attached/index.js.map +1 -1
- package/traits/breakable/breakableBehavior.d.ts +3 -3
- package/traits/breakable/breakableBehavior.d.ts.map +1 -1
- package/traits/breakable/breakableBehavior.js +10 -10
- package/traits/breakable/breakableBehavior.js.map +1 -1
- package/traits/breakable/breakableTrait.d.ts +1 -1
- package/traits/breakable/breakableTrait.d.ts.map +1 -1
- package/traits/breakable/index.d.ts +2 -2
- package/traits/breakable/index.d.ts.map +1 -1
- package/traits/breakable/index.js +4 -4
- package/traits/breakable/index.js.map +1 -1
- package/traits/button/buttonTrait.d.ts +1 -1
- package/traits/button/buttonTrait.d.ts.map +1 -1
- package/traits/button/buttonTrait.js +3 -3
- package/traits/button/buttonTrait.js.map +1 -1
- package/traits/button/index.d.ts +1 -1
- package/traits/button/index.d.ts.map +1 -1
- package/traits/button/index.js +1 -1
- package/traits/button/index.js.map +1 -1
- package/traits/character-model/characterModelTrait.d.ts +2 -2
- package/traits/character-model/characterModelTrait.d.ts.map +1 -1
- package/traits/character-model/characterModelTrait.js +16 -16
- package/traits/character-model/characterModelTrait.js.map +1 -1
- package/traits/character-model/index.d.ts +2 -2
- package/traits/character-model/index.d.ts.map +1 -1
- package/traits/character-model/index.js +3 -3
- package/traits/character-model/index.js.map +1 -1
- package/traits/climbable/climbableBehavior.d.ts +1 -1
- package/traits/climbable/climbableBehavior.d.ts.map +1 -1
- package/traits/climbable/climbableBehavior.js +9 -9
- package/traits/climbable/climbableBehavior.js.map +1 -1
- package/traits/climbable/climbableTrait.d.ts +1 -1
- package/traits/climbable/climbableTrait.d.ts.map +1 -1
- package/traits/climbable/climbableTrait.js +4 -4
- package/traits/climbable/climbableTrait.js.map +1 -1
- package/traits/climbable/index.d.ts +2 -2
- package/traits/climbable/index.d.ts.map +1 -1
- package/traits/climbable/index.js +2 -2
- package/traits/climbable/index.js.map +1 -1
- package/traits/clothing/clothingTrait.d.ts +2 -2
- package/traits/clothing/clothingTrait.d.ts.map +1 -1
- package/traits/clothing/clothingTrait.js +3 -3
- package/traits/clothing/clothingTrait.js.map +1 -1
- package/traits/clothing/index.d.ts +1 -1
- package/traits/clothing/index.d.ts.map +1 -1
- package/traits/clothing/index.js +1 -1
- package/traits/clothing/index.js.map +1 -1
- package/traits/combatant/combatantBehavior.d.ts +3 -3
- package/traits/combatant/combatantBehavior.d.ts.map +1 -1
- package/traits/combatant/combatantBehavior.js +26 -26
- package/traits/combatant/combatantBehavior.js.map +1 -1
- package/traits/combatant/combatantTrait.d.ts +1 -1
- package/traits/combatant/combatantTrait.d.ts.map +1 -1
- package/traits/combatant/index.d.ts +2 -2
- package/traits/combatant/index.d.ts.map +1 -1
- package/traits/combatant/index.js +4 -4
- package/traits/combatant/index.js.map +1 -1
- package/traits/concealment/concealedStateTrait.d.ts +3 -3
- package/traits/concealment/concealedStateTrait.d.ts.map +1 -1
- package/traits/concealment/concealedStateTrait.js +2 -2
- package/traits/concealment/concealedStateTrait.js.map +1 -1
- package/traits/concealment/concealedVisibilityBehavior.d.ts +2 -2
- package/traits/concealment/concealedVisibilityBehavior.d.ts.map +1 -1
- package/traits/concealment/concealedVisibilityBehavior.js +3 -3
- package/traits/concealment/concealedVisibilityBehavior.js.map +1 -1
- package/traits/concealment/concealmentTrait.d.ts +1 -1
- package/traits/concealment/concealmentTrait.d.ts.map +1 -1
- package/traits/concealment/index.d.ts +3 -3
- package/traits/concealment/index.d.ts.map +1 -1
- package/traits/concealment/index.js +3 -3
- package/traits/concealment/index.js.map +1 -1
- package/traits/container/container-utils.d.ts +2 -2
- package/traits/container/container-utils.d.ts.map +1 -1
- package/traits/container/container-utils.js +14 -14
- package/traits/container/container-utils.js.map +1 -1
- package/traits/container/containerBehavior.d.ts +7 -2
- package/traits/container/containerBehavior.d.ts.map +1 -1
- package/traits/container/containerBehavior.js +26 -26
- package/traits/container/containerBehavior.js.map +1 -1
- package/traits/container/containerTrait.d.ts +1 -1
- package/traits/container/containerTrait.d.ts.map +1 -1
- package/traits/container/containerTrait.js +3 -3
- package/traits/container/containerTrait.js.map +1 -1
- package/traits/container/index.d.ts +3 -3
- package/traits/container/index.d.ts.map +1 -1
- package/traits/container/index.js +9 -9
- package/traits/container/index.js.map +1 -1
- package/traits/cuttable/cuttableBehavior.d.ts +2 -2
- package/traits/cuttable/cuttableBehavior.d.ts.map +1 -1
- package/traits/cuttable/cuttableBehavior.js +6 -6
- package/traits/cuttable/cuttableBehavior.js.map +1 -1
- package/traits/cuttable/cuttableTrait.d.ts +1 -1
- package/traits/cuttable/cuttableTrait.d.ts.map +1 -1
- package/traits/cuttable/cuttableTrait.js +3 -3
- package/traits/cuttable/cuttableTrait.js.map +1 -1
- package/traits/cuttable/index.d.ts +2 -2
- package/traits/cuttable/index.d.ts.map +1 -1
- package/traits/cuttable/index.js +2 -2
- package/traits/cuttable/index.js.map +1 -1
- package/traits/deadly-room/deadlyRoomBehavior.d.ts +2 -2
- package/traits/deadly-room/deadlyRoomBehavior.d.ts.map +1 -1
- package/traits/deadly-room/deadlyRoomBehavior.js +4 -4
- package/traits/deadly-room/deadlyRoomBehavior.js.map +1 -1
- package/traits/deadly-room/deadlyRoomTrait.d.ts +1 -1
- package/traits/deadly-room/deadlyRoomTrait.d.ts.map +1 -1
- package/traits/deadly-room/index.d.ts +2 -2
- package/traits/deadly-room/index.d.ts.map +1 -1
- package/traits/deadly-room/index.js +4 -4
- package/traits/deadly-room/index.js.map +1 -1
- package/traits/destructible/destructibleBehavior.d.ts +3 -3
- package/traits/destructible/destructibleBehavior.d.ts.map +1 -1
- package/traits/destructible/destructibleBehavior.js +12 -12
- package/traits/destructible/destructibleBehavior.js.map +1 -1
- package/traits/destructible/destructibleTrait.d.ts +1 -1
- package/traits/destructible/destructibleTrait.d.ts.map +1 -1
- package/traits/destructible/index.d.ts +2 -2
- package/traits/destructible/index.d.ts.map +1 -1
- package/traits/destructible/index.js +4 -4
- package/traits/destructible/index.js.map +1 -1
- package/traits/diggable/diggableBehavior.d.ts +2 -2
- package/traits/diggable/diggableBehavior.d.ts.map +1 -1
- package/traits/diggable/diggableBehavior.js +6 -6
- package/traits/diggable/diggableBehavior.js.map +1 -1
- package/traits/diggable/diggableTrait.d.ts +1 -1
- package/traits/diggable/diggableTrait.d.ts.map +1 -1
- package/traits/diggable/diggableTrait.js +3 -3
- package/traits/diggable/diggableTrait.js.map +1 -1
- package/traits/diggable/index.d.ts +2 -2
- package/traits/diggable/index.d.ts.map +1 -1
- package/traits/diggable/index.js +2 -2
- package/traits/diggable/index.js.map +1 -1
- package/traits/door/doorBehavior.d.ts +2 -2
- package/traits/door/doorBehavior.d.ts.map +1 -1
- package/traits/door/doorBehavior.js +11 -11
- package/traits/door/doorBehavior.js.map +1 -1
- package/traits/door/doorTrait.d.ts +1 -1
- package/traits/door/doorTrait.d.ts.map +1 -1
- package/traits/door/doorTrait.js +3 -3
- package/traits/door/doorTrait.js.map +1 -1
- package/traits/door/index.d.ts +2 -2
- package/traits/door/index.d.ts.map +1 -1
- package/traits/door/index.js +4 -4
- package/traits/door/index.js.map +1 -1
- package/traits/edible/edibleBehavior.d.ts +3 -3
- package/traits/edible/edibleBehavior.d.ts.map +1 -1
- package/traits/edible/edibleBehavior.js +20 -20
- package/traits/edible/edibleBehavior.js.map +1 -1
- package/traits/edible/edibleTrait.d.ts +1 -1
- package/traits/edible/edibleTrait.d.ts.map +1 -1
- package/traits/edible/edibleTrait.js +3 -3
- package/traits/edible/edibleTrait.js.map +1 -1
- package/traits/edible/index.d.ts +2 -2
- package/traits/edible/index.d.ts.map +1 -1
- package/traits/edible/index.js +2 -2
- package/traits/edible/index.js.map +1 -1
- package/traits/enterable/enterableTrait.d.ts +1 -1
- package/traits/enterable/enterableTrait.d.ts.map +1 -1
- package/traits/enterable/enterableTrait.js +4 -4
- package/traits/enterable/enterableTrait.js.map +1 -1
- package/traits/enterable/index.d.ts +1 -1
- package/traits/enterable/index.d.ts.map +1 -1
- package/traits/enterable/index.js +1 -1
- package/traits/enterable/index.js.map +1 -1
- package/traits/equipped/equippedTrait.d.ts +1 -1
- package/traits/equipped/equippedTrait.d.ts.map +1 -1
- package/traits/equipped/index.d.ts +1 -1
- package/traits/equipped/index.d.ts.map +1 -1
- package/traits/equipped/index.js +2 -2
- package/traits/equipped/index.js.map +1 -1
- package/traits/exit/exitBehavior.d.ts +2 -2
- package/traits/exit/exitBehavior.d.ts.map +1 -1
- package/traits/exit/exitBehavior.js +27 -27
- package/traits/exit/exitBehavior.js.map +1 -1
- package/traits/exit/exitTrait.d.ts +1 -1
- package/traits/exit/exitTrait.d.ts.map +1 -1
- package/traits/exit/exitTrait.js +3 -3
- package/traits/exit/exitTrait.js.map +1 -1
- package/traits/exit/index.d.ts +2 -2
- package/traits/exit/index.d.ts.map +1 -1
- package/traits/exit/index.js +4 -4
- package/traits/exit/index.js.map +1 -1
- package/traits/health/healthBehavior.d.ts +2 -2
- package/traits/health/healthBehavior.d.ts.map +1 -1
- package/traits/health/healthBehavior.js +4 -4
- package/traits/health/healthBehavior.js.map +1 -1
- package/traits/health/healthTrait.d.ts +1 -1
- package/traits/health/healthTrait.d.ts.map +1 -1
- package/traits/health/index.d.ts +2 -2
- package/traits/health/index.d.ts.map +1 -1
- package/traits/health/index.js +4 -4
- package/traits/health/index.js.map +1 -1
- package/traits/identity/identityBehavior.d.ts +2 -2
- package/traits/identity/identityBehavior.d.ts.map +1 -1
- package/traits/identity/identityBehavior.js +16 -16
- package/traits/identity/identityBehavior.js.map +1 -1
- package/traits/identity/identityTrait.d.ts +8 -1
- package/traits/identity/identityTrait.d.ts.map +1 -1
- package/traits/identity/identityTrait.js +10 -3
- package/traits/identity/identityTrait.js.map +1 -1
- package/traits/identity/index.d.ts +3 -2
- package/traits/identity/index.d.ts.map +1 -1
- package/traits/identity/index.js +3 -2
- package/traits/identity/index.js.map +1 -1
- package/traits/identity/name-vocabulary.d.ts +31 -0
- package/traits/identity/name-vocabulary.d.ts.map +1 -0
- package/traits/identity/name-vocabulary.js +57 -0
- package/traits/identity/name-vocabulary.js.map +1 -0
- package/traits/implementations.d.ts +65 -42
- package/traits/implementations.d.ts.map +1 -1
- package/traits/implementations.js +163 -129
- package/traits/implementations.js.map +1 -1
- package/traits/index.d.ts +47 -48
- package/traits/index.d.ts.map +1 -1
- package/traits/index.js +47 -48
- package/traits/index.js.map +1 -1
- package/traits/light-source/index.d.ts +2 -2
- package/traits/light-source/index.d.ts.map +1 -1
- package/traits/light-source/index.js +4 -4
- package/traits/light-source/index.js.map +1 -1
- package/traits/light-source/lightSourceBehavior.d.ts +2 -2
- package/traits/light-source/lightSourceBehavior.d.ts.map +1 -1
- package/traits/light-source/lightSourceBehavior.js +16 -16
- package/traits/light-source/lightSourceBehavior.js.map +1 -1
- package/traits/light-source/lightSourceTrait.d.ts +1 -1
- package/traits/light-source/lightSourceTrait.d.ts.map +1 -1
- package/traits/light-source/lightSourceTrait.js +3 -3
- package/traits/light-source/lightSourceTrait.js.map +1 -1
- package/traits/listener/index.d.ts +1 -1
- package/traits/listener/index.d.ts.map +1 -1
- package/traits/listener/index.js +2 -2
- package/traits/listener/index.js.map +1 -1
- package/traits/listener/listenerTrait.d.ts +1 -1
- package/traits/listener/listenerTrait.d.ts.map +1 -1
- package/traits/listener/listenerTrait.js +3 -3
- package/traits/listener/listenerTrait.js.map +1 -1
- package/traits/lockable/index.d.ts +2 -2
- package/traits/lockable/index.d.ts.map +1 -1
- package/traits/lockable/index.js +2 -2
- package/traits/lockable/index.js.map +1 -1
- package/traits/lockable/lockableBehavior.d.ts +2 -2
- package/traits/lockable/lockableBehavior.d.ts.map +1 -1
- package/traits/lockable/lockableBehavior.js +19 -19
- package/traits/lockable/lockableBehavior.js.map +1 -1
- package/traits/lockable/lockableTrait.d.ts +1 -1
- package/traits/lockable/lockableTrait.d.ts.map +1 -1
- package/traits/lockable/lockableTrait.js +3 -3
- package/traits/lockable/lockableTrait.js.map +1 -1
- package/traits/moveable-scenery/index.d.ts +1 -1
- package/traits/moveable-scenery/index.d.ts.map +1 -1
- package/traits/moveable-scenery/index.js +1 -1
- package/traits/moveable-scenery/index.js.map +1 -1
- package/traits/moveable-scenery/moveableSceneryTrait.d.ts +1 -1
- package/traits/moveable-scenery/moveableSceneryTrait.d.ts.map +1 -1
- package/traits/moveable-scenery/moveableSceneryTrait.js +3 -3
- package/traits/moveable-scenery/moveableSceneryTrait.js.map +1 -1
- package/traits/npc/index.d.ts +1 -1
- package/traits/npc/index.d.ts.map +1 -1
- package/traits/npc/index.js +2 -2
- package/traits/npc/index.js.map +1 -1
- package/traits/npc/npcTrait.d.ts +1 -1
- package/traits/npc/npcTrait.d.ts.map +1 -1
- package/traits/obstructor-protocol.d.ts +3 -3
- package/traits/obstructor-protocol.d.ts.map +1 -1
- package/traits/open-inventory/index.d.ts +1 -1
- package/traits/open-inventory/index.d.ts.map +1 -1
- package/traits/open-inventory/index.js +2 -2
- package/traits/open-inventory/index.js.map +1 -1
- package/traits/open-inventory/openInventoryTrait.d.ts +1 -1
- package/traits/open-inventory/openInventoryTrait.d.ts.map +1 -1
- package/traits/open-inventory/openInventoryTrait.js +3 -3
- package/traits/open-inventory/openInventoryTrait.js.map +1 -1
- package/traits/openable/index.d.ts +2 -2
- package/traits/openable/index.d.ts.map +1 -1
- package/traits/openable/index.js +2 -2
- package/traits/openable/index.js.map +1 -1
- package/traits/openable/openableBehavior.d.ts +2 -2
- package/traits/openable/openableBehavior.d.ts.map +1 -1
- package/traits/openable/openableBehavior.js +13 -13
- package/traits/openable/openableBehavior.js.map +1 -1
- package/traits/openable/openableTrait.d.ts +1 -1
- package/traits/openable/openableTrait.d.ts.map +1 -1
- package/traits/openable/openableTrait.js +3 -3
- package/traits/openable/openableTrait.js.map +1 -1
- package/traits/pullable/index.d.ts +1 -1
- package/traits/pullable/index.d.ts.map +1 -1
- package/traits/pullable/index.js +1 -1
- package/traits/pullable/index.js.map +1 -1
- package/traits/pullable/pullableTrait.d.ts +1 -1
- package/traits/pullable/pullableTrait.d.ts.map +1 -1
- package/traits/pullable/pullableTrait.js +3 -3
- package/traits/pullable/pullableTrait.js.map +1 -1
- package/traits/pushable/index.d.ts +1 -1
- package/traits/pushable/index.d.ts.map +1 -1
- package/traits/pushable/index.js +1 -1
- package/traits/pushable/index.js.map +1 -1
- package/traits/pushable/pushableTrait.d.ts +1 -1
- package/traits/pushable/pushableTrait.d.ts.map +1 -1
- package/traits/pushable/pushableTrait.js +3 -3
- package/traits/pushable/pushableTrait.js.map +1 -1
- package/traits/readable/index.d.ts +2 -2
- package/traits/readable/index.d.ts.map +1 -1
- package/traits/readable/index.js +4 -4
- package/traits/readable/index.js.map +1 -1
- package/traits/readable/readableBehavior.d.ts +1 -1
- package/traits/readable/readableBehavior.d.ts.map +1 -1
- package/traits/readable/readableBehavior.js +10 -10
- package/traits/readable/readableBehavior.js.map +1 -1
- package/traits/readable/readableTrait.d.ts +1 -1
- package/traits/readable/readableTrait.d.ts.map +1 -1
- package/traits/readable/readableTrait.js +3 -3
- package/traits/readable/readableTrait.js.map +1 -1
- package/traits/region/index.d.ts +1 -1
- package/traits/region/index.d.ts.map +1 -1
- package/traits/region/index.js +2 -2
- package/traits/region/index.js.map +1 -1
- package/traits/region/regionTrait.d.ts +1 -1
- package/traits/region/regionTrait.d.ts.map +1 -1
- package/traits/region/regionTrait.js +3 -3
- package/traits/region/regionTrait.js.map +1 -1
- package/traits/room/index.d.ts +2 -2
- package/traits/room/index.d.ts.map +1 -1
- package/traits/room/index.js +4 -4
- package/traits/room/index.js.map +1 -1
- package/traits/room/roomBehavior.d.ts +4 -4
- package/traits/room/roomBehavior.d.ts.map +1 -1
- package/traits/room/roomBehavior.js +25 -25
- package/traits/room/roomBehavior.js.map +1 -1
- package/traits/room/roomTrait.d.ts +2 -2
- package/traits/room/roomTrait.d.ts.map +1 -1
- package/traits/room/roomTrait.js +3 -3
- package/traits/room/roomTrait.js.map +1 -1
- package/traits/scene/index.d.ts +1 -1
- package/traits/scene/index.d.ts.map +1 -1
- package/traits/scene/index.js +2 -2
- package/traits/scene/index.js.map +1 -1
- package/traits/scene/sceneTrait.d.ts +1 -1
- package/traits/scene/sceneTrait.d.ts.map +1 -1
- package/traits/scene/sceneTrait.js +3 -3
- package/traits/scene/sceneTrait.js.map +1 -1
- package/traits/scenery/index.d.ts +2 -2
- package/traits/scenery/index.d.ts.map +1 -1
- package/traits/scenery/index.js +4 -4
- package/traits/scenery/index.js.map +1 -1
- package/traits/scenery/sceneryBehavior.d.ts +1 -1
- package/traits/scenery/sceneryBehavior.d.ts.map +1 -1
- package/traits/scenery/sceneryBehavior.js +5 -5
- package/traits/scenery/sceneryBehavior.js.map +1 -1
- package/traits/scenery/sceneryTrait.d.ts +1 -1
- package/traits/scenery/sceneryTrait.d.ts.map +1 -1
- package/traits/scenery/sceneryTrait.js +3 -3
- package/traits/scenery/sceneryTrait.js.map +1 -1
- package/traits/story-info/index.d.ts +1 -1
- package/traits/story-info/index.d.ts.map +1 -1
- package/traits/story-info/index.js +2 -2
- package/traits/story-info/index.js.map +1 -1
- package/traits/story-info/storyInfoTrait.d.ts +1 -1
- package/traits/story-info/storyInfoTrait.d.ts.map +1 -1
- package/traits/supporter/index.d.ts +2 -2
- package/traits/supporter/index.d.ts.map +1 -1
- package/traits/supporter/index.js +4 -4
- package/traits/supporter/index.js.map +1 -1
- package/traits/supporter/supporterBehavior.d.ts +3 -3
- package/traits/supporter/supporterBehavior.d.ts.map +1 -1
- package/traits/supporter/supporterBehavior.js +15 -15
- package/traits/supporter/supporterBehavior.js.map +1 -1
- package/traits/supporter/supporterTrait.d.ts +1 -1
- package/traits/supporter/supporterTrait.d.ts.map +1 -1
- package/traits/supporter/supporterTrait.js +3 -3
- package/traits/supporter/supporterTrait.js.map +1 -1
- package/traits/switchable/index.d.ts +2 -2
- package/traits/switchable/index.d.ts.map +1 -1
- package/traits/switchable/index.js +2 -2
- package/traits/switchable/index.js.map +1 -1
- package/traits/switchable/switchableBehavior.d.ts +2 -2
- package/traits/switchable/switchableBehavior.d.ts.map +1 -1
- package/traits/switchable/switchableBehavior.js +18 -18
- package/traits/switchable/switchableBehavior.js.map +1 -1
- package/traits/switchable/switchableTrait.d.ts +1 -1
- package/traits/switchable/switchableTrait.d.ts.map +1 -1
- package/traits/switchable/switchableTrait.js +3 -3
- package/traits/switchable/switchableTrait.js.map +1 -1
- package/traits/trait-types.d.ts +0 -1
- package/traits/trait-types.d.ts.map +1 -1
- package/traits/trait-types.js +0 -2
- package/traits/trait-types.js.map +1 -1
- package/traits/trait.d.ts +1 -1
- package/traits/trait.d.ts.map +1 -1
- package/traits/vehicle/index.d.ts +2 -2
- package/traits/vehicle/index.d.ts.map +1 -1
- package/traits/vehicle/index.js +2 -2
- package/traits/vehicle/index.js.map +1 -1
- package/traits/vehicle/vehicleBehavior.d.ts +2 -2
- package/traits/vehicle/vehicleBehavior.d.ts.map +1 -1
- package/traits/vehicle/vehicleBehavior.js +7 -7
- package/traits/vehicle/vehicleBehavior.js.map +1 -1
- package/traits/vehicle/vehicleTrait.d.ts +1 -1
- package/traits/vehicle/vehicleTrait.d.ts.map +1 -1
- package/traits/vehicle/vehicleTrait.js +4 -4
- package/traits/vehicle/vehicleTrait.js.map +1 -1
- package/traits/weapon/index.d.ts +2 -2
- package/traits/weapon/index.d.ts.map +1 -1
- package/traits/weapon/index.js +4 -4
- package/traits/weapon/index.js.map +1 -1
- package/traits/weapon/weaponBehavior.d.ts +11 -4
- package/traits/weapon/weaponBehavior.d.ts.map +1 -1
- package/traits/weapon/weaponBehavior.js +24 -19
- package/traits/weapon/weaponBehavior.js.map +1 -1
- package/traits/weapon/weaponTrait.d.ts +1 -1
- package/traits/weapon/weaponTrait.d.ts.map +1 -1
- package/traits/wearable/index.d.ts +2 -2
- package/traits/wearable/index.d.ts.map +1 -1
- package/traits/wearable/index.js +2 -2
- package/traits/wearable/index.js.map +1 -1
- package/traits/wearable/wearableBehavior.d.ts +1 -1
- package/traits/wearable/wearableBehavior.d.ts.map +1 -1
- package/traits/wearable/wearableBehavior.js +11 -11
- package/traits/wearable/wearableBehavior.js.map +1 -1
- package/traits/wearable/wearableTrait.d.ts +1 -1
- package/traits/wearable/wearableTrait.d.ts.map +1 -1
- package/traits/wearable/wearableTrait.js +3 -3
- package/traits/wearable/wearableTrait.js.map +1 -1
- package/world/AuthorModel.d.ts +28 -17
- package/world/AuthorModel.d.ts.map +1 -1
- package/world/AuthorModel.js +31 -4
- package/world/AuthorModel.js.map +1 -1
- package/world/ScoreLedger.d.ts +75 -3
- package/world/ScoreLedger.d.ts.map +1 -1
- package/world/ScoreLedger.js +77 -3
- package/world/ScoreLedger.js.map +1 -1
- package/world/SharedDataStore.d.ts +2 -2
- package/world/SharedDataStore.d.ts.map +1 -1
- package/world/SharedDataStore.js +2 -2
- package/world/SharedDataStore.js.map +1 -1
- package/world/VisibilityBehavior.d.ts +59 -3
- package/world/VisibilityBehavior.d.ts.map +1 -1
- package/world/VisibilityBehavior.js +192 -100
- package/world/VisibilityBehavior.js.map +1 -1
- package/world/WorldEventSystem.d.ts +1 -1
- package/world/WorldEventSystem.d.ts.map +1 -1
- package/world/WorldModel.d.ts +75 -18
- package/world/WorldModel.d.ts.map +1 -1
- package/world/WorldModel.js +179 -113
- package/world/WorldModel.js.map +1 -1
- package/world/WorldSerializer.d.ts +4 -4
- package/world/WorldSerializer.d.ts.map +1 -1
- package/world/WorldSerializer.js +2 -2
- package/world/WorldSerializer.js.map +1 -1
- package/world/band.d.ts +22 -0
- package/world/band.d.ts.map +1 -0
- package/world/band.js +36 -0
- package/world/band.js.map +1 -0
- package/world/default-trait-registry.d.ts +1 -1
- package/world/default-trait-registry.d.ts.map +1 -1
- package/world/default-trait-registry.js +3 -3
- package/world/default-trait-registry.js.map +1 -1
- package/world/index.d.ts +10 -9
- package/world/index.d.ts.map +1 -1
- package/world/index.js +20 -16
- package/world/index.js.map +1 -1
- package/world/wall-creation.d.ts +2 -2
- package/world/wall-creation.d.ts.map +1 -1
- package/world/wall-creation.js +6 -6
- package/world/wall-creation.js.map +1 -1
- package/world/wall-validation.d.ts +2 -2
- package/world/wall-validation.d.ts.map +1 -1
- package/world/wall-validation.js +3 -3
- package/world/wall-validation.js.map +1 -1
package/world/WorldModel.js
CHANGED
|
@@ -2,37 +2,36 @@
|
|
|
2
2
|
// WorldModel.ts - Core world model interface and implementation for Sharpee IF Platform
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.WorldModel = void 0;
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const interceptor_binding_1 = require("../capabilities/interceptor-binding");
|
|
5
|
+
const if_entity_js_1 = require("../entities/if-entity.js");
|
|
6
|
+
const entity_types_js_1 = require("../entities/entity-types.js");
|
|
7
|
+
const wall_creation_js_1 = require("./wall-creation.js");
|
|
8
|
+
const trait_types_js_1 = require("../traits/trait-types.js");
|
|
9
|
+
const index_js_1 = require("../traits/room/index.js");
|
|
10
|
+
const roomBehavior_js_1 = require("../traits/room/roomBehavior.js");
|
|
11
|
+
const regionTrait_js_1 = require("../traits/region/regionTrait.js");
|
|
12
|
+
const sceneTrait_js_1 = require("../traits/scene/sceneTrait.js");
|
|
13
|
+
const index_js_2 = require("../traits/door/index.js");
|
|
14
|
+
const index_js_3 = require("../traits/scenery/index.js");
|
|
15
|
+
const default_trait_registry_js_1 = require("./default-trait-registry.js");
|
|
16
|
+
const identityTrait_js_1 = require("../traits/identity/identityTrait.js");
|
|
17
|
+
const openableTrait_js_1 = require("../traits/openable/openableTrait.js");
|
|
18
|
+
const lockableTrait_js_1 = require("../traits/lockable/lockableTrait.js");
|
|
19
|
+
const wearableBehavior_js_1 = require("../traits/wearable/wearableBehavior.js");
|
|
20
|
+
const exitTrait_js_1 = require("../traits/exit/exitTrait.js");
|
|
21
|
+
const directions_js_1 = require("../constants/directions.js");
|
|
22
|
+
const SpatialIndex_js_1 = require("./SpatialIndex.js");
|
|
23
|
+
const VisibilityBehavior_js_1 = require("./VisibilityBehavior.js");
|
|
24
|
+
const WorldSerializer_js_1 = require("./WorldSerializer.js");
|
|
25
|
+
const container_utils_js_1 = require("../traits/container/container-utils.js");
|
|
26
|
+
const capability_binding_js_1 = require("../capabilities/capability-binding.js");
|
|
27
|
+
const interceptor_binding_js_1 = require("../capabilities/interceptor-binding.js");
|
|
29
28
|
const if_domain_1 = require("@sharpee/if-domain");
|
|
30
|
-
const
|
|
31
|
-
const
|
|
29
|
+
const scope_registry_js_1 = require("../scope/scope-registry.js");
|
|
30
|
+
const scope_evaluator_js_1 = require("../scope/scope-evaluator.js");
|
|
32
31
|
// Event system — extracted to WorldEventSystem.ts, re-exported for backward compat
|
|
33
|
-
const
|
|
32
|
+
const WorldEventSystem_js_1 = require("./WorldEventSystem.js");
|
|
34
33
|
// Score Ledger (ADR-129)
|
|
35
|
-
const
|
|
34
|
+
const ScoreLedger_js_1 = require("./ScoreLedger.js");
|
|
36
35
|
// Type prefixes for entity ID generation
|
|
37
36
|
const TYPE_PREFIXES = {
|
|
38
37
|
'room': 'r',
|
|
@@ -66,16 +65,22 @@ class WorldModel {
|
|
|
66
65
|
// wiring re-established by story init, not save-game state). Distinct
|
|
67
66
|
// from both maps above despite the shared "wiring" flavor.
|
|
68
67
|
interceptorBindings = new Map();
|
|
68
|
+
/**
|
|
69
|
+
* ADR-240: the per-world evaluator registry — named world-evaluators
|
|
70
|
+
* consulted at point of use (live derived state; no cached derivations).
|
|
71
|
+
* Lives and dies with this WorldModel instance, like the binding maps.
|
|
72
|
+
*/
|
|
73
|
+
evaluators = new Map();
|
|
69
74
|
// Score Ledger (ADR-129)
|
|
70
|
-
scoreLedger = new
|
|
75
|
+
scoreLedger = new ScoreLedger_js_1.ScoreLedger();
|
|
71
76
|
// Scene condition closures (ADR-149) — not serialized
|
|
72
77
|
sceneConditions = new Map();
|
|
73
78
|
// ID generation
|
|
74
79
|
idCounters = new Map();
|
|
75
80
|
// Event system (ADR-086, ADR-094) — delegates to WorldEventSystem
|
|
76
|
-
eventSystem = new
|
|
81
|
+
eventSystem = new WorldEventSystem_js_1.WorldEventSystem();
|
|
77
82
|
// Persistence — delegates to WorldSerializer
|
|
78
|
-
serializer = new
|
|
83
|
+
serializer = new WorldSerializer_js_1.WorldSerializer();
|
|
79
84
|
platformEvents;
|
|
80
85
|
// Scope system
|
|
81
86
|
scopeRegistry;
|
|
@@ -89,12 +94,12 @@ class WorldModel {
|
|
|
89
94
|
strictMode: false,
|
|
90
95
|
...config
|
|
91
96
|
};
|
|
92
|
-
this.spatialIndex = new
|
|
97
|
+
this.spatialIndex = new SpatialIndex_js_1.SpatialIndex();
|
|
93
98
|
this.platformEvents = platformEvents;
|
|
94
99
|
this.eventSystem.setWorldRef(this);
|
|
95
100
|
// Initialize scope system
|
|
96
|
-
this.scopeRegistry = new
|
|
97
|
-
this.scopeEvaluator = new
|
|
101
|
+
this.scopeRegistry = new scope_registry_js_1.ScopeRegistry();
|
|
102
|
+
this.scopeEvaluator = new scope_evaluator_js_1.RuleScopeEvaluator(this.scopeRegistry);
|
|
98
103
|
// Initialize vocabulary system (ADR-082)
|
|
99
104
|
this.grammarVocabularyProvider = new if_domain_1.GrammarVocabularyProvider();
|
|
100
105
|
// Register default scope rules
|
|
@@ -195,7 +200,7 @@ class WorldModel {
|
|
|
195
200
|
// Registration is idempotent: re-registering a (traitType, capability) key
|
|
196
201
|
// overwrites the previous binding rather than throwing (AC-4).
|
|
197
202
|
registerCapabilityBehavior(traitType, capability, behavior, options) {
|
|
198
|
-
const key = (0,
|
|
203
|
+
const key = (0, capability_binding_js_1.capabilityBindingKey)(traitType, capability);
|
|
199
204
|
this.capabilityBindings.set(key, {
|
|
200
205
|
traitType,
|
|
201
206
|
capability,
|
|
@@ -206,8 +211,18 @@ class WorldModel {
|
|
|
206
211
|
validateBinding: options?.validateBinding
|
|
207
212
|
});
|
|
208
213
|
}
|
|
214
|
+
// Evaluator Registry (ADR-240 — live derived state). Same ownership model
|
|
215
|
+
// as the binding maps above: per-world, idempotent last-wins, never
|
|
216
|
+
// serialized (registrars re-register on every load).
|
|
217
|
+
registerEvaluator(key, fn) {
|
|
218
|
+
this.evaluators.set(key, fn);
|
|
219
|
+
}
|
|
220
|
+
evaluate(key) {
|
|
221
|
+
const fn = this.evaluators.get(key);
|
|
222
|
+
return fn ? fn(this) : undefined;
|
|
223
|
+
}
|
|
209
224
|
getBehaviorBinding(traitType, capability) {
|
|
210
|
-
return this.capabilityBindings.get((0,
|
|
225
|
+
return this.capabilityBindings.get((0, capability_binding_js_1.capabilityBindingKey)(traitType, capability));
|
|
211
226
|
}
|
|
212
227
|
getAllCapabilityBindings() {
|
|
213
228
|
return this.capabilityBindings;
|
|
@@ -234,7 +249,7 @@ class WorldModel {
|
|
|
234
249
|
// Registration is idempotent: re-registering a (traitType, actionId) key
|
|
235
250
|
// overwrites the previous binding rather than throwing (AC-4).
|
|
236
251
|
registerActionInterceptor(traitType, actionId, interceptor, options) {
|
|
237
|
-
const key = (0,
|
|
252
|
+
const key = (0, interceptor_binding_js_1.interceptorBindingKey)(traitType, actionId);
|
|
238
253
|
this.interceptorBindings.set(key, {
|
|
239
254
|
traitType,
|
|
240
255
|
actionId,
|
|
@@ -248,7 +263,7 @@ class WorldModel {
|
|
|
248
263
|
// a static constructor property across module copies).
|
|
249
264
|
const candidates = [];
|
|
250
265
|
for (const trait of entity.traits.values()) {
|
|
251
|
-
const binding = this.interceptorBindings.get((0,
|
|
266
|
+
const binding = this.interceptorBindings.get((0, interceptor_binding_js_1.interceptorBindingKey)(trait.type, actionId));
|
|
252
267
|
if (binding) {
|
|
253
268
|
candidates.push({ trait, binding });
|
|
254
269
|
}
|
|
@@ -268,7 +283,7 @@ class WorldModel {
|
|
|
268
283
|
};
|
|
269
284
|
}
|
|
270
285
|
getInterceptorBinding(traitType, actionId) {
|
|
271
|
-
return this.interceptorBindings.get((0,
|
|
286
|
+
return this.interceptorBindings.get((0, interceptor_binding_js_1.interceptorBindingKey)(traitType, actionId));
|
|
272
287
|
}
|
|
273
288
|
getAllActionInterceptors() {
|
|
274
289
|
return this.interceptorBindings;
|
|
@@ -291,12 +306,12 @@ class WorldModel {
|
|
|
291
306
|
// Entity Management
|
|
292
307
|
createEntity(displayName, type = 'object', opts) {
|
|
293
308
|
// Validate entity type
|
|
294
|
-
if (!(0,
|
|
295
|
-
throw new Error(`Unknown entity type: '${type}'. Valid types are: ${Object.values(
|
|
309
|
+
if (!(0, entity_types_js_1.isEntityType)(type)) {
|
|
310
|
+
throw new Error(`Unknown entity type: '${type}'. Valid types are: ${Object.values(entity_types_js_1.EntityType).join(', ')}`);
|
|
296
311
|
}
|
|
297
312
|
// Generate ID based on type
|
|
298
313
|
const id = this.generateId(type);
|
|
299
|
-
const entity = new
|
|
314
|
+
const entity = new if_entity_js_1.IFEntity(id, type, {
|
|
300
315
|
attributes: {
|
|
301
316
|
displayName: displayName,
|
|
302
317
|
name: displayName, // For compatibility
|
|
@@ -309,7 +324,7 @@ class WorldModel {
|
|
|
309
324
|
// unless the caller opts out. Each factory yields a fresh instance; an author can
|
|
310
325
|
// override later via add() (replace-on-same-type).
|
|
311
326
|
if (opts?.defaultTraits !== false) {
|
|
312
|
-
const factories =
|
|
327
|
+
const factories = default_trait_registry_js_1.DEFAULT_TRAITS.get(type);
|
|
313
328
|
if (factories) {
|
|
314
329
|
for (const factory of factories) {
|
|
315
330
|
entity.add(factory());
|
|
@@ -397,22 +412,25 @@ class WorldModel {
|
|
|
397
412
|
if (options.visibleOnly) {
|
|
398
413
|
// Filter to only visible entities
|
|
399
414
|
entities = entities.filter(e => {
|
|
400
|
-
const scenery = e.getTrait(
|
|
415
|
+
const scenery = e.getTrait(index_js_3.SceneryTrait);
|
|
401
416
|
return !scenery || scenery.visible !== false;
|
|
402
417
|
});
|
|
403
418
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
entities = entities.filter(e => {
|
|
407
|
-
const wearable = e.getTrait(wearableTrait_1.WearableTrait);
|
|
408
|
-
const clothing = e.getTrait(clothingTrait_1.ClothingTrait);
|
|
409
|
-
const wornFromWearable = wearable && wearable.isWorn;
|
|
410
|
-
const wornFromClothing = clothing && clothing.isWorn;
|
|
411
|
-
return !(wornFromWearable || wornFromClothing);
|
|
412
|
-
});
|
|
413
|
-
}
|
|
419
|
+
// ADR-247: worn items are contents — returned unconditionally. Callers
|
|
420
|
+
// needing the carried/worn split use getCarriedAndWorn(), not a filter.
|
|
414
421
|
return entities;
|
|
415
422
|
}
|
|
423
|
+
getCarriedAndWorn(holderId) {
|
|
424
|
+
// ADR-247: the one partition method. `carried` is held-not-worn (the
|
|
425
|
+
// old filtered-default semantics); `worn` is the worn subset. For a
|
|
426
|
+
// holder with no wearables, `worn` is empty.
|
|
427
|
+
const carried = [];
|
|
428
|
+
const worn = [];
|
|
429
|
+
for (const e of this.getContents(holderId)) {
|
|
430
|
+
(wearableBehavior_js_1.WearableBehavior.isWorn(e) ? worn : carried).push(e);
|
|
431
|
+
}
|
|
432
|
+
return { carried, worn };
|
|
433
|
+
}
|
|
416
434
|
moveEntity(entityId, targetId) {
|
|
417
435
|
if (!this.canMoveEntity(entityId, targetId)) {
|
|
418
436
|
this.emitPlatformEvent('move_entity_failed', {
|
|
@@ -454,12 +472,12 @@ class WorldModel {
|
|
|
454
472
|
return false;
|
|
455
473
|
}
|
|
456
474
|
// Check if target can contain - using our new utility
|
|
457
|
-
if (!(0,
|
|
475
|
+
if (!(0, container_utils_js_1.canContain)(target)) {
|
|
458
476
|
return false;
|
|
459
477
|
}
|
|
460
478
|
// Check container constraints
|
|
461
|
-
if (target.hasTrait(
|
|
462
|
-
const openable = target.getTrait(
|
|
479
|
+
if (target.hasTrait(trait_types_js_1.TraitType.CONTAINER) && target.hasTrait(trait_types_js_1.TraitType.OPENABLE)) {
|
|
480
|
+
const openable = target.getTrait(openableTrait_js_1.OpenableTrait);
|
|
463
481
|
if (openable && !openable.isOpen) {
|
|
464
482
|
return false;
|
|
465
483
|
}
|
|
@@ -474,7 +492,7 @@ class WorldModel {
|
|
|
474
492
|
if (!parent)
|
|
475
493
|
return undefined;
|
|
476
494
|
const parentEntity = this.getEntity(parent);
|
|
477
|
-
if (parentEntity?.hasTrait(
|
|
495
|
+
if (parentEntity?.hasTrait(trait_types_js_1.TraitType.ROOM)) {
|
|
478
496
|
return parentEntity;
|
|
479
497
|
}
|
|
480
498
|
current = parent;
|
|
@@ -489,16 +507,9 @@ class WorldModel {
|
|
|
489
507
|
if (visited.has(id) || depth > this.config.maxDepth)
|
|
490
508
|
return;
|
|
491
509
|
visited.add(id);
|
|
492
|
-
//
|
|
493
|
-
//
|
|
494
|
-
const
|
|
495
|
-
visibleOnly: options.visibleOnly,
|
|
496
|
-
includeWorn: options.includeWorn
|
|
497
|
-
} : {
|
|
498
|
-
visibleOnly: options.visibleOnly,
|
|
499
|
-
includeWorn: true // Always include worn items when recursing
|
|
500
|
-
};
|
|
501
|
-
const contents = this.getContents(id, contentsOptions);
|
|
510
|
+
// ADR-247: worn items are always included now, so root and recursive
|
|
511
|
+
// calls share one options shape (visibleOnly still varies by caller).
|
|
512
|
+
const contents = this.getContents(id, { visibleOnly: options.visibleOnly });
|
|
502
513
|
result.push(...contents);
|
|
503
514
|
if (options.recursive) {
|
|
504
515
|
contents.forEach(item => traverse(item.id, depth + 1, false));
|
|
@@ -617,7 +628,7 @@ class WorldModel {
|
|
|
617
628
|
return [];
|
|
618
629
|
const fromRoom = this.getEntity(fromRoomId);
|
|
619
630
|
const toRoom = this.getEntity(toRoomId);
|
|
620
|
-
if (!fromRoom?.hasTrait(
|
|
631
|
+
if (!fromRoom?.hasTrait(trait_types_js_1.TraitType.ROOM) || !toRoom?.hasTrait(trait_types_js_1.TraitType.ROOM)) {
|
|
621
632
|
return null;
|
|
622
633
|
}
|
|
623
634
|
// Simple BFS pathfinding
|
|
@@ -632,7 +643,7 @@ class WorldModel {
|
|
|
632
643
|
const room = this.getEntity(roomId);
|
|
633
644
|
if (!room)
|
|
634
645
|
continue;
|
|
635
|
-
const roomTrait = room.getTrait(
|
|
646
|
+
const roomTrait = room.getTrait(index_js_1.RoomTrait);
|
|
636
647
|
const exits = roomTrait?.exits || {};
|
|
637
648
|
for (const [direction, exitInfo] of Object.entries(exits)) {
|
|
638
649
|
let targetRoom;
|
|
@@ -651,12 +662,12 @@ class WorldModel {
|
|
|
651
662
|
continue;
|
|
652
663
|
pathElement = exitInfo.via;
|
|
653
664
|
// Get destination based on entity type
|
|
654
|
-
if (exitEntity.hasTrait(
|
|
655
|
-
const door = exitEntity.getTrait(
|
|
665
|
+
if (exitEntity.hasTrait(trait_types_js_1.TraitType.DOOR)) {
|
|
666
|
+
const door = exitEntity.getTrait(index_js_2.DoorTrait);
|
|
656
667
|
targetRoom = door?.room1 === roomId ? door?.room2 : door?.room1;
|
|
657
668
|
}
|
|
658
|
-
else if (exitEntity.hasTrait(
|
|
659
|
-
targetRoom = exitEntity.getTrait(
|
|
669
|
+
else if (exitEntity.hasTrait(trait_types_js_1.TraitType.EXIT)) {
|
|
670
|
+
targetRoom = exitEntity.getTrait(exitTrait_js_1.ExitTrait)?.to;
|
|
660
671
|
}
|
|
661
672
|
else {
|
|
662
673
|
// Not a valid door/exit entity
|
|
@@ -719,6 +730,22 @@ class WorldModel {
|
|
|
719
730
|
getMaxScore() {
|
|
720
731
|
return this.scoreLedger.getMax();
|
|
721
732
|
}
|
|
733
|
+
// Rank ladder (ADR-260) — delegates to ScoreLedger
|
|
734
|
+
setRanks(ranks) {
|
|
735
|
+
this.scoreLedger.setRanks(ranks);
|
|
736
|
+
}
|
|
737
|
+
getRanks() {
|
|
738
|
+
return this.scoreLedger.getRanks();
|
|
739
|
+
}
|
|
740
|
+
getRank() {
|
|
741
|
+
return this.scoreLedger.getRank();
|
|
742
|
+
}
|
|
743
|
+
setScoringEnabled(enabled) {
|
|
744
|
+
this.scoreLedger.setScoringEnabled(enabled);
|
|
745
|
+
}
|
|
746
|
+
isScoringEnabled() {
|
|
747
|
+
return this.scoreLedger.isScoringEnabled();
|
|
748
|
+
}
|
|
722
749
|
// Persistence — delegates to WorldSerializer
|
|
723
750
|
toJSON() {
|
|
724
751
|
return this.serializer.serialize(this.getSerializableState(), this.scoreLedger);
|
|
@@ -901,6 +928,22 @@ class WorldModel {
|
|
|
901
928
|
priority: 100,
|
|
902
929
|
source: 'core'
|
|
903
930
|
});
|
|
931
|
+
// A door is present at BOTH of its rooms (ADR-234 AC-3; David's ruling
|
|
932
|
+
// 2026-07-18): referenceable from either side. Only the door enters
|
|
933
|
+
// scope this way — the far room and its contents never do.
|
|
934
|
+
this.addScopeRule({
|
|
935
|
+
id: 'default_door_visibility',
|
|
936
|
+
fromLocations: '*',
|
|
937
|
+
includeEntities: (context) => this.findByTrait(trait_types_js_1.TraitType.DOOR)
|
|
938
|
+
.filter((door) => {
|
|
939
|
+
const doorTrait = door.get(trait_types_js_1.TraitType.DOOR);
|
|
940
|
+
return doorTrait !== undefined
|
|
941
|
+
&& (doorTrait.room1 === context.currentLocation || doorTrait.room2 === context.currentLocation);
|
|
942
|
+
})
|
|
943
|
+
.map((door) => door.id),
|
|
944
|
+
priority: 50,
|
|
945
|
+
source: 'core'
|
|
946
|
+
});
|
|
904
947
|
}
|
|
905
948
|
/**
|
|
906
949
|
* Get physically visible entities using VisibilityBehavior (line-of-sight)
|
|
@@ -922,7 +965,7 @@ class WorldModel {
|
|
|
922
965
|
const observer = this.getEntity(observerId);
|
|
923
966
|
if (!observer)
|
|
924
967
|
return [];
|
|
925
|
-
return
|
|
968
|
+
return VisibilityBehavior_js_1.VisibilityBehavior.getVisible(observer, this);
|
|
926
969
|
}
|
|
927
970
|
/**
|
|
928
971
|
* Get entities in scope for command resolution using the scope system
|
|
@@ -965,22 +1008,49 @@ class WorldModel {
|
|
|
965
1008
|
const target = this.getEntity(targetId);
|
|
966
1009
|
if (!observer || !target)
|
|
967
1010
|
return false;
|
|
968
|
-
return
|
|
1011
|
+
return VisibilityBehavior_js_1.VisibilityBehavior.canSee(observer, target, this);
|
|
969
1012
|
}
|
|
970
1013
|
// ========== Convenience Creators ==========
|
|
971
1014
|
/**
|
|
972
1015
|
* Create a bidirectional connection between two rooms.
|
|
973
1016
|
* Sets exits in both directions (e.g. NORTH on room1, SOUTH on room2).
|
|
1017
|
+
*
|
|
1018
|
+
* With `doorId` (ADR-237 D4) this is the platform's one door-wiring
|
|
1019
|
+
* implementation: the door id is stamped on both exits (`via`) and the
|
|
1020
|
+
* door entity is placed in room1 for scope resolution. Throws if the id
|
|
1021
|
+
* resolves to no entity or to an entity without DoorTrait, or if the
|
|
1022
|
+
* trait's room pair disagrees with the rooms passed — the primitive owns
|
|
1023
|
+
* the invariant that DoorTrait and the exits never disagree.
|
|
974
1024
|
*/
|
|
975
|
-
connectRooms(room1Id, room2Id, direction) {
|
|
1025
|
+
connectRooms(room1Id, room2Id, direction, doorId) {
|
|
976
1026
|
const room1 = this.getEntity(room1Id);
|
|
977
1027
|
const room2 = this.getEntity(room2Id);
|
|
978
1028
|
if (!room1 || !room2) {
|
|
979
1029
|
throw new Error(`connectRooms: both rooms must exist (${room1Id}, ${room2Id})`);
|
|
980
1030
|
}
|
|
981
|
-
const opposite = (0,
|
|
982
|
-
|
|
983
|
-
|
|
1031
|
+
const opposite = (0, directions_js_1.getOppositeDirection)(direction);
|
|
1032
|
+
if (doorId === undefined) {
|
|
1033
|
+
roomBehavior_js_1.RoomBehavior.setExit(room1, direction, room2Id);
|
|
1034
|
+
roomBehavior_js_1.RoomBehavior.setExit(room2, opposite, room1Id);
|
|
1035
|
+
return;
|
|
1036
|
+
}
|
|
1037
|
+
const door = this.getEntity(doorId);
|
|
1038
|
+
if (!door) {
|
|
1039
|
+
throw new Error(`connectRooms: door must exist (${doorId})`);
|
|
1040
|
+
}
|
|
1041
|
+
const doorTrait = door.get(trait_types_js_1.TraitType.DOOR);
|
|
1042
|
+
if (!doorTrait) {
|
|
1043
|
+
throw new Error(`connectRooms: \`${doorId}\` has no DoorTrait — compose the trait before wiring`);
|
|
1044
|
+
}
|
|
1045
|
+
// DoorTrait's constructor requires both rooms, so the pair is always
|
|
1046
|
+
// pre-set: verify it names the rooms being wired (room1 = placement).
|
|
1047
|
+
if (doorTrait.room1 !== room1Id || doorTrait.room2 !== room2Id) {
|
|
1048
|
+
throw new Error(`connectRooms: DoorTrait on \`${doorId}\` connects (${doorTrait.room1}, ${doorTrait.room2}), not (${room1Id}, ${room2Id})`);
|
|
1049
|
+
}
|
|
1050
|
+
roomBehavior_js_1.RoomBehavior.setExit(room1, direction, room2Id, doorId);
|
|
1051
|
+
roomBehavior_js_1.RoomBehavior.setExit(room2, opposite, room1Id, doorId);
|
|
1052
|
+
// Place door in room1 for scope resolution
|
|
1053
|
+
this.moveEntity(doorId, room1Id);
|
|
984
1054
|
}
|
|
985
1055
|
/**
|
|
986
1056
|
* Create a door entity and wire it into both rooms' exit data.
|
|
@@ -992,30 +1062,26 @@ class WorldModel {
|
|
|
992
1062
|
if (!room1 || !room2) {
|
|
993
1063
|
throw new Error(`createDoor: both rooms must exist (${opts.room1Id}, ${opts.room2Id})`);
|
|
994
1064
|
}
|
|
995
|
-
const door = this.createEntity(displayName,
|
|
996
|
-
door.add(new
|
|
1065
|
+
const door = this.createEntity(displayName, entity_types_js_1.EntityType.DOOR);
|
|
1066
|
+
door.add(new identityTrait_js_1.IdentityTrait({
|
|
997
1067
|
name: displayName,
|
|
998
1068
|
aliases: opts.aliases,
|
|
999
1069
|
description: opts.description,
|
|
1000
1070
|
}));
|
|
1001
|
-
door.add(new
|
|
1071
|
+
door.add(new index_js_2.DoorTrait({
|
|
1002
1072
|
room1: opts.room1Id,
|
|
1003
1073
|
room2: opts.room2Id,
|
|
1004
1074
|
}));
|
|
1005
|
-
door.add(new
|
|
1006
|
-
door.add(new
|
|
1075
|
+
door.add(new index_js_3.SceneryTrait());
|
|
1076
|
+
door.add(new openableTrait_js_1.OpenableTrait({ isOpen: opts.isOpen ?? false }));
|
|
1007
1077
|
if (opts.isLocked !== undefined || opts.keyId) {
|
|
1008
|
-
door.add(new
|
|
1078
|
+
door.add(new lockableTrait_js_1.LockableTrait({
|
|
1009
1079
|
isLocked: opts.isLocked ?? true,
|
|
1010
1080
|
...(opts.keyId ? { keyId: opts.keyId } : {}),
|
|
1011
1081
|
}));
|
|
1012
1082
|
}
|
|
1013
|
-
//
|
|
1014
|
-
|
|
1015
|
-
roomBehavior_1.RoomBehavior.setExit(room1, opts.direction, opts.room2Id, door.id);
|
|
1016
|
-
roomBehavior_1.RoomBehavior.setExit(room2, opposite, opts.room1Id, door.id);
|
|
1017
|
-
// Place door in room1 for scope resolution
|
|
1018
|
-
this.moveEntity(door.id, opts.room1Id);
|
|
1083
|
+
// One wiring path (ADR-237 D4)
|
|
1084
|
+
this.connectRooms(opts.room1Id, opts.room2Id, opts.direction, door.id);
|
|
1019
1085
|
return door;
|
|
1020
1086
|
}
|
|
1021
1087
|
// ── Wall Adjacency (ADR-173) ─────────────────────────────────────
|
|
@@ -1028,7 +1094,7 @@ class WorldModel {
|
|
|
1028
1094
|
* @throws Error on any validation failure (per ADR-173 §"Rejection rules").
|
|
1029
1095
|
*/
|
|
1030
1096
|
createWall(spec) {
|
|
1031
|
-
return (0,
|
|
1097
|
+
return (0, wall_creation_js_1.createWall)(this.wallCreationSurface(), spec);
|
|
1032
1098
|
}
|
|
1033
1099
|
/**
|
|
1034
1100
|
* Creates N walls between `from` and each room in `to` (ADR-173
|
|
@@ -1036,7 +1102,7 @@ class WorldModel {
|
|
|
1036
1102
|
* on the K-th pair leaves walls 0..K-1 in the world.
|
|
1037
1103
|
*/
|
|
1038
1104
|
createWalls(spec) {
|
|
1039
|
-
return (0,
|
|
1105
|
+
return (0, wall_creation_js_1.createWalls)(this.wallCreationSurface(), spec);
|
|
1040
1106
|
}
|
|
1041
1107
|
/**
|
|
1042
1108
|
* Adapter exposing the narrow surface `wall-creation` requires
|
|
@@ -1046,7 +1112,7 @@ class WorldModel {
|
|
|
1046
1112
|
return {
|
|
1047
1113
|
getEntity: (id) => this.getEntity(id),
|
|
1048
1114
|
getLocation: (entityId) => this.getLocation(entityId),
|
|
1049
|
-
generateWallId: () => this.generateId(
|
|
1115
|
+
generateWallId: () => this.generateId(entity_types_js_1.EntityType.WALL),
|
|
1050
1116
|
registerWall: (wall) => {
|
|
1051
1117
|
this.entities.set(wall.id, wall);
|
|
1052
1118
|
},
|
|
@@ -1068,14 +1134,14 @@ class WorldModel {
|
|
|
1068
1134
|
if (options.parentRegionId && !this.hasEntity(options.parentRegionId)) {
|
|
1069
1135
|
throw new Error(`createRegion: parent region '${options.parentRegionId}' not found`);
|
|
1070
1136
|
}
|
|
1071
|
-
const entity = new
|
|
1137
|
+
const entity = new if_entity_js_1.IFEntity(id, entity_types_js_1.EntityType.REGION, {
|
|
1072
1138
|
attributes: {
|
|
1073
1139
|
displayName: options.name,
|
|
1074
1140
|
name: options.name,
|
|
1075
|
-
entityType:
|
|
1141
|
+
entityType: entity_types_js_1.EntityType.REGION,
|
|
1076
1142
|
},
|
|
1077
1143
|
});
|
|
1078
|
-
entity.add(new
|
|
1144
|
+
entity.add(new regionTrait_js_1.RegionTrait(options));
|
|
1079
1145
|
this.entities.set(id, entity);
|
|
1080
1146
|
return entity;
|
|
1081
1147
|
}
|
|
@@ -1091,7 +1157,7 @@ class WorldModel {
|
|
|
1091
1157
|
if (!room) {
|
|
1092
1158
|
throw new Error(`assignRoom: room '${roomId}' not found`);
|
|
1093
1159
|
}
|
|
1094
|
-
const roomTrait = room.get(
|
|
1160
|
+
const roomTrait = room.get(trait_types_js_1.TraitType.ROOM);
|
|
1095
1161
|
if (!roomTrait) {
|
|
1096
1162
|
throw new Error(`assignRoom: entity '${roomId}' does not have RoomTrait`);
|
|
1097
1163
|
}
|
|
@@ -1099,7 +1165,7 @@ class WorldModel {
|
|
|
1099
1165
|
if (!region) {
|
|
1100
1166
|
throw new Error(`assignRoom: region '${regionId}' not found`);
|
|
1101
1167
|
}
|
|
1102
|
-
if (!region.hasTrait(
|
|
1168
|
+
if (!region.hasTrait(trait_types_js_1.TraitType.REGION)) {
|
|
1103
1169
|
throw new Error(`assignRoom: entity '${regionId}' is not a region`);
|
|
1104
1170
|
}
|
|
1105
1171
|
roomTrait.regionId = regionId;
|
|
@@ -1120,14 +1186,14 @@ class WorldModel {
|
|
|
1120
1186
|
// If the entity is a room, use its regionId directly.
|
|
1121
1187
|
// Otherwise, resolve the containing room.
|
|
1122
1188
|
let roomRegionId;
|
|
1123
|
-
if (entity.type ===
|
|
1124
|
-
roomRegionId = entity.get(
|
|
1189
|
+
if (entity.type === entity_types_js_1.EntityType.ROOM) {
|
|
1190
|
+
roomRegionId = entity.get(trait_types_js_1.TraitType.ROOM)?.regionId;
|
|
1125
1191
|
}
|
|
1126
1192
|
else {
|
|
1127
1193
|
const room = this.getContainingRoom(entityId);
|
|
1128
1194
|
if (!room)
|
|
1129
1195
|
return false;
|
|
1130
|
-
roomRegionId = room.get(
|
|
1196
|
+
roomRegionId = room.get(trait_types_js_1.TraitType.ROOM)?.regionId;
|
|
1131
1197
|
}
|
|
1132
1198
|
if (!roomRegionId)
|
|
1133
1199
|
return false;
|
|
@@ -1146,10 +1212,10 @@ class WorldModel {
|
|
|
1146
1212
|
const fromRoom = this.getEntity(fromRoomId);
|
|
1147
1213
|
const toRoom = this.getEntity(toRoomId);
|
|
1148
1214
|
const fromChain = fromRoom
|
|
1149
|
-
? this.getRegionAncestry(fromRoom.get(
|
|
1215
|
+
? this.getRegionAncestry(fromRoom.get(trait_types_js_1.TraitType.ROOM)?.regionId)
|
|
1150
1216
|
: [];
|
|
1151
1217
|
const toChain = toRoom
|
|
1152
|
-
? this.getRegionAncestry(toRoom.get(
|
|
1218
|
+
? this.getRegionAncestry(toRoom.get(trait_types_js_1.TraitType.ROOM)?.regionId)
|
|
1153
1219
|
: [];
|
|
1154
1220
|
// Convert to sets for fast lookup
|
|
1155
1221
|
const fromSet = new Set(fromChain);
|
|
@@ -1176,7 +1242,7 @@ class WorldModel {
|
|
|
1176
1242
|
const region = this.getEntity(currentId);
|
|
1177
1243
|
if (!region)
|
|
1178
1244
|
break;
|
|
1179
|
-
const trait = region.get(
|
|
1245
|
+
const trait = region.get(trait_types_js_1.TraitType.REGION);
|
|
1180
1246
|
if (!trait)
|
|
1181
1247
|
break;
|
|
1182
1248
|
chain.push(currentId);
|
|
@@ -1199,7 +1265,7 @@ class WorldModel {
|
|
|
1199
1265
|
const region = this.getEntity(currentId);
|
|
1200
1266
|
if (!region)
|
|
1201
1267
|
return false;
|
|
1202
|
-
const trait = region.get(
|
|
1268
|
+
const trait = region.get(trait_types_js_1.TraitType.REGION);
|
|
1203
1269
|
if (!trait)
|
|
1204
1270
|
return false;
|
|
1205
1271
|
currentId = trait.parentRegionId;
|
|
@@ -1218,14 +1284,14 @@ class WorldModel {
|
|
|
1218
1284
|
if (this.hasEntity(id)) {
|
|
1219
1285
|
throw new Error(`createScene: entity '${id}' already exists`);
|
|
1220
1286
|
}
|
|
1221
|
-
const entity = new
|
|
1287
|
+
const entity = new if_entity_js_1.IFEntity(id, entity_types_js_1.EntityType.SCENE, {
|
|
1222
1288
|
attributes: {
|
|
1223
1289
|
displayName: options.name,
|
|
1224
1290
|
name: options.name,
|
|
1225
|
-
entityType:
|
|
1291
|
+
entityType: entity_types_js_1.EntityType.SCENE,
|
|
1226
1292
|
},
|
|
1227
1293
|
});
|
|
1228
|
-
entity.add(new
|
|
1294
|
+
entity.add(new sceneTrait_js_1.SceneTrait({
|
|
1229
1295
|
name: options.name,
|
|
1230
1296
|
recurring: options.recurring,
|
|
1231
1297
|
}));
|
|
@@ -1267,7 +1333,7 @@ class WorldModel {
|
|
|
1267
1333
|
const entity = this.getEntity(sceneId);
|
|
1268
1334
|
if (!entity)
|
|
1269
1335
|
return false;
|
|
1270
|
-
return entity.get(
|
|
1336
|
+
return entity.get(trait_types_js_1.TraitType.SCENE)?.state === 'active';
|
|
1271
1337
|
}
|
|
1272
1338
|
/**
|
|
1273
1339
|
* Returns true if the scene has reached the 'ended' state.
|
|
@@ -1280,7 +1346,7 @@ class WorldModel {
|
|
|
1280
1346
|
const entity = this.getEntity(sceneId);
|
|
1281
1347
|
if (!entity)
|
|
1282
1348
|
return false;
|
|
1283
|
-
return entity.get(
|
|
1349
|
+
return entity.get(trait_types_js_1.TraitType.SCENE)?.state === 'ended';
|
|
1284
1350
|
}
|
|
1285
1351
|
/**
|
|
1286
1352
|
* Returns true if the scene has ever been active (beganAtTurn is set).
|
|
@@ -1291,7 +1357,7 @@ class WorldModel {
|
|
|
1291
1357
|
const entity = this.getEntity(sceneId);
|
|
1292
1358
|
if (!entity)
|
|
1293
1359
|
return false;
|
|
1294
|
-
return entity.get(
|
|
1360
|
+
return entity.get(trait_types_js_1.TraitType.SCENE)?.beganAtTurn !== undefined;
|
|
1295
1361
|
}
|
|
1296
1362
|
}
|
|
1297
1363
|
exports.WorldModel = WorldModel;
|