@sharpee/world-model 3.1.0 → 3.3.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 +23 -17
- package/world/AuthorModel.d.ts.map +1 -1
- package/world/AuthorModel.js +15 -4
- package/world/AuthorModel.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 +65 -18
- package/world/WorldModel.d.ts.map +1 -1
- package/world/WorldModel.js +163 -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/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 +9 -9
- package/world/index.d.ts.map +1 -1
- package/world/index.js +17 -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
|
|
@@ -901,6 +912,22 @@ class WorldModel {
|
|
|
901
912
|
priority: 100,
|
|
902
913
|
source: 'core'
|
|
903
914
|
});
|
|
915
|
+
// A door is present at BOTH of its rooms (ADR-234 AC-3; David's ruling
|
|
916
|
+
// 2026-07-18): referenceable from either side. Only the door enters
|
|
917
|
+
// scope this way — the far room and its contents never do.
|
|
918
|
+
this.addScopeRule({
|
|
919
|
+
id: 'default_door_visibility',
|
|
920
|
+
fromLocations: '*',
|
|
921
|
+
includeEntities: (context) => this.findByTrait(trait_types_js_1.TraitType.DOOR)
|
|
922
|
+
.filter((door) => {
|
|
923
|
+
const doorTrait = door.get(trait_types_js_1.TraitType.DOOR);
|
|
924
|
+
return doorTrait !== undefined
|
|
925
|
+
&& (doorTrait.room1 === context.currentLocation || doorTrait.room2 === context.currentLocation);
|
|
926
|
+
})
|
|
927
|
+
.map((door) => door.id),
|
|
928
|
+
priority: 50,
|
|
929
|
+
source: 'core'
|
|
930
|
+
});
|
|
904
931
|
}
|
|
905
932
|
/**
|
|
906
933
|
* Get physically visible entities using VisibilityBehavior (line-of-sight)
|
|
@@ -922,7 +949,7 @@ class WorldModel {
|
|
|
922
949
|
const observer = this.getEntity(observerId);
|
|
923
950
|
if (!observer)
|
|
924
951
|
return [];
|
|
925
|
-
return
|
|
952
|
+
return VisibilityBehavior_js_1.VisibilityBehavior.getVisible(observer, this);
|
|
926
953
|
}
|
|
927
954
|
/**
|
|
928
955
|
* Get entities in scope for command resolution using the scope system
|
|
@@ -965,22 +992,49 @@ class WorldModel {
|
|
|
965
992
|
const target = this.getEntity(targetId);
|
|
966
993
|
if (!observer || !target)
|
|
967
994
|
return false;
|
|
968
|
-
return
|
|
995
|
+
return VisibilityBehavior_js_1.VisibilityBehavior.canSee(observer, target, this);
|
|
969
996
|
}
|
|
970
997
|
// ========== Convenience Creators ==========
|
|
971
998
|
/**
|
|
972
999
|
* Create a bidirectional connection between two rooms.
|
|
973
1000
|
* Sets exits in both directions (e.g. NORTH on room1, SOUTH on room2).
|
|
1001
|
+
*
|
|
1002
|
+
* With `doorId` (ADR-237 D4) this is the platform's one door-wiring
|
|
1003
|
+
* implementation: the door id is stamped on both exits (`via`) and the
|
|
1004
|
+
* door entity is placed in room1 for scope resolution. Throws if the id
|
|
1005
|
+
* resolves to no entity or to an entity without DoorTrait, or if the
|
|
1006
|
+
* trait's room pair disagrees with the rooms passed — the primitive owns
|
|
1007
|
+
* the invariant that DoorTrait and the exits never disagree.
|
|
974
1008
|
*/
|
|
975
|
-
connectRooms(room1Id, room2Id, direction) {
|
|
1009
|
+
connectRooms(room1Id, room2Id, direction, doorId) {
|
|
976
1010
|
const room1 = this.getEntity(room1Id);
|
|
977
1011
|
const room2 = this.getEntity(room2Id);
|
|
978
1012
|
if (!room1 || !room2) {
|
|
979
1013
|
throw new Error(`connectRooms: both rooms must exist (${room1Id}, ${room2Id})`);
|
|
980
1014
|
}
|
|
981
|
-
const opposite = (0,
|
|
982
|
-
|
|
983
|
-
|
|
1015
|
+
const opposite = (0, directions_js_1.getOppositeDirection)(direction);
|
|
1016
|
+
if (doorId === undefined) {
|
|
1017
|
+
roomBehavior_js_1.RoomBehavior.setExit(room1, direction, room2Id);
|
|
1018
|
+
roomBehavior_js_1.RoomBehavior.setExit(room2, opposite, room1Id);
|
|
1019
|
+
return;
|
|
1020
|
+
}
|
|
1021
|
+
const door = this.getEntity(doorId);
|
|
1022
|
+
if (!door) {
|
|
1023
|
+
throw new Error(`connectRooms: door must exist (${doorId})`);
|
|
1024
|
+
}
|
|
1025
|
+
const doorTrait = door.get(trait_types_js_1.TraitType.DOOR);
|
|
1026
|
+
if (!doorTrait) {
|
|
1027
|
+
throw new Error(`connectRooms: \`${doorId}\` has no DoorTrait — compose the trait before wiring`);
|
|
1028
|
+
}
|
|
1029
|
+
// DoorTrait's constructor requires both rooms, so the pair is always
|
|
1030
|
+
// pre-set: verify it names the rooms being wired (room1 = placement).
|
|
1031
|
+
if (doorTrait.room1 !== room1Id || doorTrait.room2 !== room2Id) {
|
|
1032
|
+
throw new Error(`connectRooms: DoorTrait on \`${doorId}\` connects (${doorTrait.room1}, ${doorTrait.room2}), not (${room1Id}, ${room2Id})`);
|
|
1033
|
+
}
|
|
1034
|
+
roomBehavior_js_1.RoomBehavior.setExit(room1, direction, room2Id, doorId);
|
|
1035
|
+
roomBehavior_js_1.RoomBehavior.setExit(room2, opposite, room1Id, doorId);
|
|
1036
|
+
// Place door in room1 for scope resolution
|
|
1037
|
+
this.moveEntity(doorId, room1Id);
|
|
984
1038
|
}
|
|
985
1039
|
/**
|
|
986
1040
|
* Create a door entity and wire it into both rooms' exit data.
|
|
@@ -992,30 +1046,26 @@ class WorldModel {
|
|
|
992
1046
|
if (!room1 || !room2) {
|
|
993
1047
|
throw new Error(`createDoor: both rooms must exist (${opts.room1Id}, ${opts.room2Id})`);
|
|
994
1048
|
}
|
|
995
|
-
const door = this.createEntity(displayName,
|
|
996
|
-
door.add(new
|
|
1049
|
+
const door = this.createEntity(displayName, entity_types_js_1.EntityType.DOOR);
|
|
1050
|
+
door.add(new identityTrait_js_1.IdentityTrait({
|
|
997
1051
|
name: displayName,
|
|
998
1052
|
aliases: opts.aliases,
|
|
999
1053
|
description: opts.description,
|
|
1000
1054
|
}));
|
|
1001
|
-
door.add(new
|
|
1055
|
+
door.add(new index_js_2.DoorTrait({
|
|
1002
1056
|
room1: opts.room1Id,
|
|
1003
1057
|
room2: opts.room2Id,
|
|
1004
1058
|
}));
|
|
1005
|
-
door.add(new
|
|
1006
|
-
door.add(new
|
|
1059
|
+
door.add(new index_js_3.SceneryTrait());
|
|
1060
|
+
door.add(new openableTrait_js_1.OpenableTrait({ isOpen: opts.isOpen ?? false }));
|
|
1007
1061
|
if (opts.isLocked !== undefined || opts.keyId) {
|
|
1008
|
-
door.add(new
|
|
1062
|
+
door.add(new lockableTrait_js_1.LockableTrait({
|
|
1009
1063
|
isLocked: opts.isLocked ?? true,
|
|
1010
1064
|
...(opts.keyId ? { keyId: opts.keyId } : {}),
|
|
1011
1065
|
}));
|
|
1012
1066
|
}
|
|
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);
|
|
1067
|
+
// One wiring path (ADR-237 D4)
|
|
1068
|
+
this.connectRooms(opts.room1Id, opts.room2Id, opts.direction, door.id);
|
|
1019
1069
|
return door;
|
|
1020
1070
|
}
|
|
1021
1071
|
// ── Wall Adjacency (ADR-173) ─────────────────────────────────────
|
|
@@ -1028,7 +1078,7 @@ class WorldModel {
|
|
|
1028
1078
|
* @throws Error on any validation failure (per ADR-173 §"Rejection rules").
|
|
1029
1079
|
*/
|
|
1030
1080
|
createWall(spec) {
|
|
1031
|
-
return (0,
|
|
1081
|
+
return (0, wall_creation_js_1.createWall)(this.wallCreationSurface(), spec);
|
|
1032
1082
|
}
|
|
1033
1083
|
/**
|
|
1034
1084
|
* Creates N walls between `from` and each room in `to` (ADR-173
|
|
@@ -1036,7 +1086,7 @@ class WorldModel {
|
|
|
1036
1086
|
* on the K-th pair leaves walls 0..K-1 in the world.
|
|
1037
1087
|
*/
|
|
1038
1088
|
createWalls(spec) {
|
|
1039
|
-
return (0,
|
|
1089
|
+
return (0, wall_creation_js_1.createWalls)(this.wallCreationSurface(), spec);
|
|
1040
1090
|
}
|
|
1041
1091
|
/**
|
|
1042
1092
|
* Adapter exposing the narrow surface `wall-creation` requires
|
|
@@ -1046,7 +1096,7 @@ class WorldModel {
|
|
|
1046
1096
|
return {
|
|
1047
1097
|
getEntity: (id) => this.getEntity(id),
|
|
1048
1098
|
getLocation: (entityId) => this.getLocation(entityId),
|
|
1049
|
-
generateWallId: () => this.generateId(
|
|
1099
|
+
generateWallId: () => this.generateId(entity_types_js_1.EntityType.WALL),
|
|
1050
1100
|
registerWall: (wall) => {
|
|
1051
1101
|
this.entities.set(wall.id, wall);
|
|
1052
1102
|
},
|
|
@@ -1068,14 +1118,14 @@ class WorldModel {
|
|
|
1068
1118
|
if (options.parentRegionId && !this.hasEntity(options.parentRegionId)) {
|
|
1069
1119
|
throw new Error(`createRegion: parent region '${options.parentRegionId}' not found`);
|
|
1070
1120
|
}
|
|
1071
|
-
const entity = new
|
|
1121
|
+
const entity = new if_entity_js_1.IFEntity(id, entity_types_js_1.EntityType.REGION, {
|
|
1072
1122
|
attributes: {
|
|
1073
1123
|
displayName: options.name,
|
|
1074
1124
|
name: options.name,
|
|
1075
|
-
entityType:
|
|
1125
|
+
entityType: entity_types_js_1.EntityType.REGION,
|
|
1076
1126
|
},
|
|
1077
1127
|
});
|
|
1078
|
-
entity.add(new
|
|
1128
|
+
entity.add(new regionTrait_js_1.RegionTrait(options));
|
|
1079
1129
|
this.entities.set(id, entity);
|
|
1080
1130
|
return entity;
|
|
1081
1131
|
}
|
|
@@ -1091,7 +1141,7 @@ class WorldModel {
|
|
|
1091
1141
|
if (!room) {
|
|
1092
1142
|
throw new Error(`assignRoom: room '${roomId}' not found`);
|
|
1093
1143
|
}
|
|
1094
|
-
const roomTrait = room.get(
|
|
1144
|
+
const roomTrait = room.get(trait_types_js_1.TraitType.ROOM);
|
|
1095
1145
|
if (!roomTrait) {
|
|
1096
1146
|
throw new Error(`assignRoom: entity '${roomId}' does not have RoomTrait`);
|
|
1097
1147
|
}
|
|
@@ -1099,7 +1149,7 @@ class WorldModel {
|
|
|
1099
1149
|
if (!region) {
|
|
1100
1150
|
throw new Error(`assignRoom: region '${regionId}' not found`);
|
|
1101
1151
|
}
|
|
1102
|
-
if (!region.hasTrait(
|
|
1152
|
+
if (!region.hasTrait(trait_types_js_1.TraitType.REGION)) {
|
|
1103
1153
|
throw new Error(`assignRoom: entity '${regionId}' is not a region`);
|
|
1104
1154
|
}
|
|
1105
1155
|
roomTrait.regionId = regionId;
|
|
@@ -1120,14 +1170,14 @@ class WorldModel {
|
|
|
1120
1170
|
// If the entity is a room, use its regionId directly.
|
|
1121
1171
|
// Otherwise, resolve the containing room.
|
|
1122
1172
|
let roomRegionId;
|
|
1123
|
-
if (entity.type ===
|
|
1124
|
-
roomRegionId = entity.get(
|
|
1173
|
+
if (entity.type === entity_types_js_1.EntityType.ROOM) {
|
|
1174
|
+
roomRegionId = entity.get(trait_types_js_1.TraitType.ROOM)?.regionId;
|
|
1125
1175
|
}
|
|
1126
1176
|
else {
|
|
1127
1177
|
const room = this.getContainingRoom(entityId);
|
|
1128
1178
|
if (!room)
|
|
1129
1179
|
return false;
|
|
1130
|
-
roomRegionId = room.get(
|
|
1180
|
+
roomRegionId = room.get(trait_types_js_1.TraitType.ROOM)?.regionId;
|
|
1131
1181
|
}
|
|
1132
1182
|
if (!roomRegionId)
|
|
1133
1183
|
return false;
|
|
@@ -1146,10 +1196,10 @@ class WorldModel {
|
|
|
1146
1196
|
const fromRoom = this.getEntity(fromRoomId);
|
|
1147
1197
|
const toRoom = this.getEntity(toRoomId);
|
|
1148
1198
|
const fromChain = fromRoom
|
|
1149
|
-
? this.getRegionAncestry(fromRoom.get(
|
|
1199
|
+
? this.getRegionAncestry(fromRoom.get(trait_types_js_1.TraitType.ROOM)?.regionId)
|
|
1150
1200
|
: [];
|
|
1151
1201
|
const toChain = toRoom
|
|
1152
|
-
? this.getRegionAncestry(toRoom.get(
|
|
1202
|
+
? this.getRegionAncestry(toRoom.get(trait_types_js_1.TraitType.ROOM)?.regionId)
|
|
1153
1203
|
: [];
|
|
1154
1204
|
// Convert to sets for fast lookup
|
|
1155
1205
|
const fromSet = new Set(fromChain);
|
|
@@ -1176,7 +1226,7 @@ class WorldModel {
|
|
|
1176
1226
|
const region = this.getEntity(currentId);
|
|
1177
1227
|
if (!region)
|
|
1178
1228
|
break;
|
|
1179
|
-
const trait = region.get(
|
|
1229
|
+
const trait = region.get(trait_types_js_1.TraitType.REGION);
|
|
1180
1230
|
if (!trait)
|
|
1181
1231
|
break;
|
|
1182
1232
|
chain.push(currentId);
|
|
@@ -1199,7 +1249,7 @@ class WorldModel {
|
|
|
1199
1249
|
const region = this.getEntity(currentId);
|
|
1200
1250
|
if (!region)
|
|
1201
1251
|
return false;
|
|
1202
|
-
const trait = region.get(
|
|
1252
|
+
const trait = region.get(trait_types_js_1.TraitType.REGION);
|
|
1203
1253
|
if (!trait)
|
|
1204
1254
|
return false;
|
|
1205
1255
|
currentId = trait.parentRegionId;
|
|
@@ -1218,14 +1268,14 @@ class WorldModel {
|
|
|
1218
1268
|
if (this.hasEntity(id)) {
|
|
1219
1269
|
throw new Error(`createScene: entity '${id}' already exists`);
|
|
1220
1270
|
}
|
|
1221
|
-
const entity = new
|
|
1271
|
+
const entity = new if_entity_js_1.IFEntity(id, entity_types_js_1.EntityType.SCENE, {
|
|
1222
1272
|
attributes: {
|
|
1223
1273
|
displayName: options.name,
|
|
1224
1274
|
name: options.name,
|
|
1225
|
-
entityType:
|
|
1275
|
+
entityType: entity_types_js_1.EntityType.SCENE,
|
|
1226
1276
|
},
|
|
1227
1277
|
});
|
|
1228
|
-
entity.add(new
|
|
1278
|
+
entity.add(new sceneTrait_js_1.SceneTrait({
|
|
1229
1279
|
name: options.name,
|
|
1230
1280
|
recurring: options.recurring,
|
|
1231
1281
|
}));
|
|
@@ -1267,7 +1317,7 @@ class WorldModel {
|
|
|
1267
1317
|
const entity = this.getEntity(sceneId);
|
|
1268
1318
|
if (!entity)
|
|
1269
1319
|
return false;
|
|
1270
|
-
return entity.get(
|
|
1320
|
+
return entity.get(trait_types_js_1.TraitType.SCENE)?.state === 'active';
|
|
1271
1321
|
}
|
|
1272
1322
|
/**
|
|
1273
1323
|
* Returns true if the scene has reached the 'ended' state.
|
|
@@ -1280,7 +1330,7 @@ class WorldModel {
|
|
|
1280
1330
|
const entity = this.getEntity(sceneId);
|
|
1281
1331
|
if (!entity)
|
|
1282
1332
|
return false;
|
|
1283
|
-
return entity.get(
|
|
1333
|
+
return entity.get(trait_types_js_1.TraitType.SCENE)?.state === 'ended';
|
|
1284
1334
|
}
|
|
1285
1335
|
/**
|
|
1286
1336
|
* Returns true if the scene has ever been active (beganAtTurn is set).
|
|
@@ -1291,7 +1341,7 @@ class WorldModel {
|
|
|
1291
1341
|
const entity = this.getEntity(sceneId);
|
|
1292
1342
|
if (!entity)
|
|
1293
1343
|
return false;
|
|
1294
|
-
return entity.get(
|
|
1344
|
+
return entity.get(trait_types_js_1.TraitType.SCENE)?.beganAtTurn !== undefined;
|
|
1295
1345
|
}
|
|
1296
1346
|
}
|
|
1297
1347
|
exports.WorldModel = WorldModel;
|