@sharpee/world-model 0.9.60-beta
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/README.md +61 -0
- package/dist/behaviors/attack.d.ts +52 -0
- package/dist/behaviors/attack.d.ts.map +1 -0
- package/dist/behaviors/attack.js +161 -0
- package/dist/behaviors/attack.js.map +1 -0
- package/dist/behaviors/behavior.d.ts +67 -0
- package/dist/behaviors/behavior.d.ts.map +1 -0
- package/dist/behaviors/behavior.js +80 -0
- package/dist/behaviors/behavior.js.map +1 -0
- package/dist/behaviors/index.d.ts +21 -0
- package/dist/behaviors/index.d.ts.map +1 -0
- package/dist/behaviors/index.js +39 -0
- package/dist/behaviors/index.js.map +1 -0
- package/dist/capabilities/capability-behavior.d.ts +112 -0
- package/dist/capabilities/capability-behavior.d.ts.map +1 -0
- package/dist/capabilities/capability-behavior.js +9 -0
- package/dist/capabilities/capability-behavior.js.map +1 -0
- package/dist/capabilities/capability-defaults.d.ts +67 -0
- package/dist/capabilities/capability-defaults.d.ts.map +1 -0
- package/dist/capabilities/capability-defaults.js +81 -0
- package/dist/capabilities/capability-defaults.js.map +1 -0
- package/dist/capabilities/capability-helpers.d.ts +76 -0
- package/dist/capabilities/capability-helpers.d.ts.map +1 -0
- package/dist/capabilities/capability-helpers.js +112 -0
- package/dist/capabilities/capability-helpers.js.map +1 -0
- package/dist/capabilities/capability-registry.d.ts +115 -0
- package/dist/capabilities/capability-registry.d.ts.map +1 -0
- package/dist/capabilities/capability-registry.js +136 -0
- package/dist/capabilities/capability-registry.js.map +1 -0
- package/dist/capabilities/entity-builder.d.ts +79 -0
- package/dist/capabilities/entity-builder.d.ts.map +1 -0
- package/dist/capabilities/entity-builder.js +116 -0
- package/dist/capabilities/entity-builder.js.map +1 -0
- package/dist/capabilities/index.d.ts +13 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +40 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/types.d.ts +35 -0
- package/dist/capabilities/types.d.ts.map +1 -0
- package/dist/capabilities/types.js +16 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/commands/command-types.d.ts +30 -0
- package/dist/commands/command-types.d.ts.map +1 -0
- package/dist/commands/command-types.js +6 -0
- package/dist/commands/command-types.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +23 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/parsed-command.d.ts +204 -0
- package/dist/commands/parsed-command.d.ts.map +1 -0
- package/dist/commands/parsed-command.js +25 -0
- package/dist/commands/parsed-command.js.map +1 -0
- package/dist/commands/validated-command.d.ts +52 -0
- package/dist/commands/validated-command.d.ts.map +1 -0
- package/dist/commands/validated-command.js +8 -0
- package/dist/commands/validated-command.js.map +1 -0
- package/dist/constants/action-failures.d.ts +54 -0
- package/dist/constants/action-failures.d.ts.map +1 -0
- package/dist/constants/action-failures.js +68 -0
- package/dist/constants/action-failures.js.map +1 -0
- package/dist/constants/directions.d.ts +32 -0
- package/dist/constants/directions.d.ts.map +1 -0
- package/dist/constants/directions.js +53 -0
- package/dist/constants/directions.js.map +1 -0
- package/dist/constants/if-events.d.ts +5 -0
- package/dist/constants/if-events.d.ts.map +1 -0
- package/dist/constants/if-events.js +10 -0
- package/dist/constants/if-events.js.map +1 -0
- package/dist/constants/index.d.ts +9 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +25 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/entities/entity-store.d.ts +66 -0
- package/dist/entities/entity-store.d.ts.map +1 -0
- package/dist/entities/entity-store.js +116 -0
- package/dist/entities/entity-store.js.map +1 -0
- package/dist/entities/entity-types.d.ts +40 -0
- package/dist/entities/entity-types.d.ts.map +1 -0
- package/dist/entities/entity-types.js +56 -0
- package/dist/entities/entity-types.js.map +1 -0
- package/dist/entities/if-entity.d.ts +259 -0
- package/dist/entities/if-entity.d.ts.map +1 -0
- package/dist/entities/if-entity.js +498 -0
- package/dist/entities/if-entity.js.map +1 -0
- package/dist/entities/index.d.ts +5 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +13 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/events/types.d.ts +45 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +9 -0
- package/dist/events/types.js.map +1 -0
- package/dist/examples/event-handler-registration.d.ts +14 -0
- package/dist/examples/event-handler-registration.d.ts.map +1 -0
- package/dist/examples/event-handler-registration.js +158 -0
- package/dist/examples/event-handler-registration.js.map +1 -0
- package/dist/extensions/base-extension.d.ts +69 -0
- package/dist/extensions/base-extension.d.ts.map +1 -0
- package/dist/extensions/base-extension.js +83 -0
- package/dist/extensions/base-extension.js.map +1 -0
- package/dist/extensions/index.d.ts +11 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +39 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/loader.d.ts +52 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +177 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/manager.d.ts +68 -0
- package/dist/extensions/manager.d.ts.map +1 -0
- package/dist/extensions/manager.js +164 -0
- package/dist/extensions/manager.js.map +1 -0
- package/dist/extensions/registry.d.ts +100 -0
- package/dist/extensions/registry.d.ts.map +1 -0
- package/dist/extensions/registry.js +193 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/types.d.ts +226 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +28 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/command-executor.d.ts +17 -0
- package/dist/interfaces/command-executor.d.ts.map +1 -0
- package/dist/interfaces/command-executor.js +6 -0
- package/dist/interfaces/command-executor.js.map +1 -0
- package/dist/interfaces/command-processor.d.ts +17 -0
- package/dist/interfaces/command-processor.d.ts.map +1 -0
- package/dist/interfaces/command-processor.js +6 -0
- package/dist/interfaces/command-processor.js.map +1 -0
- package/dist/interfaces/command-validator.d.ts +17 -0
- package/dist/interfaces/command-validator.d.ts.map +1 -0
- package/dist/interfaces/command-validator.js +6 -0
- package/dist/interfaces/command-validator.js.map +1 -0
- package/dist/interfaces/index.d.ts +8 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +24 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/language-provider.d.ts +86 -0
- package/dist/interfaces/language-provider.d.ts.map +1 -0
- package/dist/interfaces/language-provider.js +14 -0
- package/dist/interfaces/language-provider.js.map +1 -0
- package/dist/interfaces/parser.d.ts +16 -0
- package/dist/interfaces/parser.d.ts.map +1 -0
- package/dist/interfaces/parser.js +6 -0
- package/dist/interfaces/parser.js.map +1 -0
- package/dist/scope/index.d.ts +8 -0
- package/dist/scope/index.d.ts.map +1 -0
- package/dist/scope/index.js +24 -0
- package/dist/scope/index.js.map +1 -0
- package/dist/scope/scope-evaluator.d.ts +58 -0
- package/dist/scope/scope-evaluator.d.ts.map +1 -0
- package/dist/scope/scope-evaluator.js +207 -0
- package/dist/scope/scope-evaluator.js.map +1 -0
- package/dist/scope/scope-registry.d.ts +59 -0
- package/dist/scope/scope-registry.d.ts.map +1 -0
- package/dist/scope/scope-registry.js +182 -0
- package/dist/scope/scope-registry.js.map +1 -0
- package/dist/scope/scope-rule.d.ts +86 -0
- package/dist/scope/scope-rule.d.ts.map +1 -0
- package/dist/scope/scope-rule.js +7 -0
- package/dist/scope/scope-rule.js.map +1 -0
- package/dist/services/ScopeService.d.ts +8 -0
- package/dist/services/ScopeService.d.ts.map +1 -0
- package/dist/services/ScopeService.js +19 -0
- package/dist/services/ScopeService.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +6 -0
- package/dist/services/index.js.map +1 -0
- package/dist/test-structure.d.ts +3 -0
- package/dist/test-structure.d.ts.map +1 -0
- package/dist/test-structure.js +26 -0
- package/dist/test-structure.js.map +1 -0
- package/dist/traits/actor/actorBehavior.d.ts +121 -0
- package/dist/traits/actor/actorBehavior.d.ts.map +1 -0
- package/dist/traits/actor/actorBehavior.js +288 -0
- package/dist/traits/actor/actorBehavior.js.map +1 -0
- package/dist/traits/actor/actorTrait.d.ts +158 -0
- package/dist/traits/actor/actorTrait.d.ts.map +1 -0
- package/dist/traits/actor/actorTrait.js +152 -0
- package/dist/traits/actor/actorTrait.js.map +1 -0
- package/dist/traits/actor/index.d.ts +3 -0
- package/dist/traits/actor/index.d.ts.map +1 -0
- package/dist/traits/actor/index.js +11 -0
- package/dist/traits/actor/index.js.map +1 -0
- package/dist/traits/all-traits.d.ts +95 -0
- package/dist/traits/all-traits.d.ts.map +1 -0
- package/dist/traits/all-traits.js +178 -0
- package/dist/traits/all-traits.js.map +1 -0
- package/dist/traits/attached/attachedTrait.d.ts +61 -0
- package/dist/traits/attached/attachedTrait.d.ts.map +1 -0
- package/dist/traits/attached/attachedTrait.js +36 -0
- package/dist/traits/attached/attachedTrait.js.map +1 -0
- package/dist/traits/attached/index.d.ts +2 -0
- package/dist/traits/attached/index.d.ts.map +1 -0
- package/dist/traits/attached/index.js +18 -0
- package/dist/traits/attached/index.js.map +1 -0
- package/dist/traits/breakable/breakableBehavior.d.ts +43 -0
- package/dist/traits/breakable/breakableBehavior.d.ts.map +1 -0
- package/dist/traits/breakable/breakableBehavior.js +70 -0
- package/dist/traits/breakable/breakableBehavior.js.map +1 -0
- package/dist/traits/breakable/breakableTrait.d.ts +22 -0
- package/dist/traits/breakable/breakableTrait.d.ts.map +1 -0
- package/dist/traits/breakable/breakableTrait.js +25 -0
- package/dist/traits/breakable/breakableTrait.js.map +1 -0
- package/dist/traits/breakable/index.d.ts +3 -0
- package/dist/traits/breakable/index.d.ts.map +1 -0
- package/dist/traits/breakable/index.js +8 -0
- package/dist/traits/breakable/index.js.map +1 -0
- package/dist/traits/button/buttonTrait.d.ts +53 -0
- package/dist/traits/button/buttonTrait.d.ts.map +1 -0
- package/dist/traits/button/buttonTrait.js +36 -0
- package/dist/traits/button/buttonTrait.js.map +1 -0
- package/dist/traits/button/index.d.ts +2 -0
- package/dist/traits/button/index.d.ts.map +1 -0
- package/dist/traits/button/index.js +18 -0
- package/dist/traits/button/index.js.map +1 -0
- package/dist/traits/climbable/climbableBehavior.d.ts +37 -0
- package/dist/traits/climbable/climbableBehavior.d.ts.map +1 -0
- package/dist/traits/climbable/climbableBehavior.js +70 -0
- package/dist/traits/climbable/climbableBehavior.js.map +1 -0
- package/dist/traits/climbable/climbableTrait.d.ts +31 -0
- package/dist/traits/climbable/climbableTrait.d.ts.map +1 -0
- package/dist/traits/climbable/climbableTrait.js +47 -0
- package/dist/traits/climbable/climbableTrait.js.map +1 -0
- package/dist/traits/climbable/index.d.ts +6 -0
- package/dist/traits/climbable/index.d.ts.map +1 -0
- package/dist/traits/climbable/index.js +22 -0
- package/dist/traits/climbable/index.js.map +1 -0
- package/dist/traits/clothing/clothingTrait.d.ts +58 -0
- package/dist/traits/clothing/clothingTrait.d.ts.map +1 -0
- package/dist/traits/clothing/clothingTrait.js +78 -0
- package/dist/traits/clothing/clothingTrait.js.map +1 -0
- package/dist/traits/clothing/index.d.ts +2 -0
- package/dist/traits/clothing/index.d.ts.map +1 -0
- package/dist/traits/clothing/index.js +19 -0
- package/dist/traits/clothing/index.js.map +1 -0
- package/dist/traits/combatant/combatantBehavior.d.ts +70 -0
- package/dist/traits/combatant/combatantBehavior.d.ts.map +1 -0
- package/dist/traits/combatant/combatantBehavior.js +155 -0
- package/dist/traits/combatant/combatantBehavior.js.map +1 -0
- package/dist/traits/combatant/combatantTrait.d.ts +98 -0
- package/dist/traits/combatant/combatantTrait.d.ts.map +1 -0
- package/dist/traits/combatant/combatantTrait.js +122 -0
- package/dist/traits/combatant/combatantTrait.js.map +1 -0
- package/dist/traits/combatant/index.d.ts +3 -0
- package/dist/traits/combatant/index.d.ts.map +1 -0
- package/dist/traits/combatant/index.js +8 -0
- package/dist/traits/combatant/index.js.map +1 -0
- package/dist/traits/container/container-utils.d.ts +39 -0
- package/dist/traits/container/container-utils.d.ts.map +1 -0
- package/dist/traits/container/container-utils.js +72 -0
- package/dist/traits/container/container-utils.js.map +1 -0
- package/dist/traits/container/containerBehavior.d.ts +94 -0
- package/dist/traits/container/containerBehavior.d.ts.map +1 -0
- package/dist/traits/container/containerBehavior.js +256 -0
- package/dist/traits/container/containerBehavior.js.map +1 -0
- package/dist/traits/container/containerTrait.d.ts +30 -0
- package/dist/traits/container/containerTrait.d.ts.map +1 -0
- package/dist/traits/container/containerTrait.js +45 -0
- package/dist/traits/container/containerTrait.js.map +1 -0
- package/dist/traits/container/index.d.ts +4 -0
- package/dist/traits/container/index.d.ts.map +1 -0
- package/dist/traits/container/index.js +14 -0
- package/dist/traits/container/index.js.map +1 -0
- package/dist/traits/destructible/destructibleBehavior.d.ts +57 -0
- package/dist/traits/destructible/destructibleBehavior.d.ts.map +1 -0
- package/dist/traits/destructible/destructibleBehavior.js +145 -0
- package/dist/traits/destructible/destructibleBehavior.js.map +1 -0
- package/dist/traits/destructible/destructibleTrait.d.ts +49 -0
- package/dist/traits/destructible/destructibleTrait.d.ts.map +1 -0
- package/dist/traits/destructible/destructibleTrait.js +43 -0
- package/dist/traits/destructible/destructibleTrait.js.map +1 -0
- package/dist/traits/destructible/index.d.ts +3 -0
- package/dist/traits/destructible/index.d.ts.map +1 -0
- package/dist/traits/destructible/index.js +8 -0
- package/dist/traits/destructible/index.js.map +1 -0
- package/dist/traits/door/doorBehavior.d.ts +42 -0
- package/dist/traits/door/doorBehavior.d.ts.map +1 -0
- package/dist/traits/door/doorBehavior.js +76 -0
- package/dist/traits/door/doorBehavior.js.map +1 -0
- package/dist/traits/door/doorTrait.d.ts +19 -0
- package/dist/traits/door/doorTrait.d.ts.map +1 -0
- package/dist/traits/door/doorTrait.js +33 -0
- package/dist/traits/door/doorTrait.js.map +1 -0
- package/dist/traits/door/index.d.ts +3 -0
- package/dist/traits/door/index.d.ts.map +1 -0
- package/dist/traits/door/index.js +9 -0
- package/dist/traits/door/index.js.map +1 -0
- package/dist/traits/edible/edibleBehavior.d.ts +63 -0
- package/dist/traits/edible/edibleBehavior.d.ts.map +1 -0
- package/dist/traits/edible/edibleBehavior.js +157 -0
- package/dist/traits/edible/edibleBehavior.js.map +1 -0
- package/dist/traits/edible/edibleTrait.d.ts +57 -0
- package/dist/traits/edible/edibleTrait.d.ts.map +1 -0
- package/dist/traits/edible/edibleTrait.js +51 -0
- package/dist/traits/edible/edibleTrait.js.map +1 -0
- package/dist/traits/edible/index.d.ts +3 -0
- package/dist/traits/edible/index.d.ts.map +1 -0
- package/dist/traits/edible/index.js +20 -0
- package/dist/traits/edible/index.js.map +1 -0
- package/dist/traits/enterable/enterableTrait.d.ts +33 -0
- package/dist/traits/enterable/enterableTrait.d.ts.map +1 -0
- package/dist/traits/enterable/enterableTrait.js +38 -0
- package/dist/traits/enterable/enterableTrait.js.map +1 -0
- package/dist/traits/enterable/index.d.ts +5 -0
- package/dist/traits/enterable/index.d.ts.map +1 -0
- package/dist/traits/enterable/index.js +21 -0
- package/dist/traits/enterable/index.js.map +1 -0
- package/dist/traits/equipped/equippedTrait.d.ts +46 -0
- package/dist/traits/equipped/equippedTrait.d.ts.map +1 -0
- package/dist/traits/equipped/equippedTrait.js +34 -0
- package/dist/traits/equipped/equippedTrait.js.map +1 -0
- package/dist/traits/equipped/index.d.ts +2 -0
- package/dist/traits/equipped/index.d.ts.map +1 -0
- package/dist/traits/equipped/index.js +6 -0
- package/dist/traits/equipped/index.js.map +1 -0
- package/dist/traits/exit/exitBehavior.d.ts +51 -0
- package/dist/traits/exit/exitBehavior.d.ts.map +1 -0
- package/dist/traits/exit/exitBehavior.js +231 -0
- package/dist/traits/exit/exitBehavior.js.map +1 -0
- package/dist/traits/exit/exitTrait.d.ts +41 -0
- package/dist/traits/exit/exitTrait.d.ts.map +1 -0
- package/dist/traits/exit/exitTrait.js +75 -0
- package/dist/traits/exit/exitTrait.js.map +1 -0
- package/dist/traits/exit/index.d.ts +3 -0
- package/dist/traits/exit/index.d.ts.map +1 -0
- package/dist/traits/exit/index.js +9 -0
- package/dist/traits/exit/index.js.map +1 -0
- package/dist/traits/identity/identityBehavior.d.ts +64 -0
- package/dist/traits/identity/identityBehavior.d.ts.map +1 -0
- package/dist/traits/identity/identityBehavior.js +154 -0
- package/dist/traits/identity/identityBehavior.js.map +1 -0
- package/dist/traits/identity/identityTrait.d.ts +70 -0
- package/dist/traits/identity/identityTrait.d.ts.map +1 -0
- package/dist/traits/identity/identityTrait.js +79 -0
- package/dist/traits/identity/identityTrait.js.map +1 -0
- package/dist/traits/identity/index.d.ts +3 -0
- package/dist/traits/identity/index.d.ts.map +1 -0
- package/dist/traits/identity/index.js +20 -0
- package/dist/traits/identity/index.js.map +1 -0
- package/dist/traits/implementations.d.ts +51 -0
- package/dist/traits/implementations.d.ts.map +1 -0
- package/dist/traits/implementations.js +145 -0
- package/dist/traits/implementations.js.map +1 -0
- package/dist/traits/index.d.ts +36 -0
- package/dist/traits/index.d.ts.map +1 -0
- package/dist/traits/index.js +62 -0
- package/dist/traits/index.js.map +1 -0
- package/dist/traits/light-source/index.d.ts +3 -0
- package/dist/traits/light-source/index.d.ts.map +1 -0
- package/dist/traits/light-source/index.js +9 -0
- package/dist/traits/light-source/index.js.map +1 -0
- package/dist/traits/light-source/lightSourceBehavior.d.ts +57 -0
- package/dist/traits/light-source/lightSourceBehavior.d.ts.map +1 -0
- package/dist/traits/light-source/lightSourceBehavior.js +135 -0
- package/dist/traits/light-source/lightSourceBehavior.js.map +1 -0
- package/dist/traits/light-source/lightSourceTrait.d.ts +28 -0
- package/dist/traits/light-source/lightSourceTrait.d.ts.map +1 -0
- package/dist/traits/light-source/lightSourceTrait.js +37 -0
- package/dist/traits/light-source/lightSourceTrait.js.map +1 -0
- package/dist/traits/lockable/index.d.ts +3 -0
- package/dist/traits/lockable/index.d.ts.map +1 -0
- package/dist/traits/lockable/index.js +20 -0
- package/dist/traits/lockable/index.js.map +1 -0
- package/dist/traits/lockable/lockableBehavior.d.ts +88 -0
- package/dist/traits/lockable/lockableBehavior.d.ts.map +1 -0
- package/dist/traits/lockable/lockableBehavior.js +196 -0
- package/dist/traits/lockable/lockableBehavior.js.map +1 -0
- package/dist/traits/lockable/lockableTrait.d.ts +59 -0
- package/dist/traits/lockable/lockableTrait.d.ts.map +1 -0
- package/dist/traits/lockable/lockableTrait.js +50 -0
- package/dist/traits/lockable/lockableTrait.js.map +1 -0
- package/dist/traits/moveable-scenery/index.d.ts +2 -0
- package/dist/traits/moveable-scenery/index.d.ts.map +1 -0
- package/dist/traits/moveable-scenery/index.js +18 -0
- package/dist/traits/moveable-scenery/index.js.map +1 -0
- package/dist/traits/moveable-scenery/moveableSceneryTrait.d.ts +69 -0
- package/dist/traits/moveable-scenery/moveableSceneryTrait.d.ts.map +1 -0
- package/dist/traits/moveable-scenery/moveableSceneryTrait.js +43 -0
- package/dist/traits/moveable-scenery/moveableSceneryTrait.js.map +1 -0
- package/dist/traits/npc/index.d.ts +5 -0
- package/dist/traits/npc/index.d.ts.map +1 -0
- package/dist/traits/npc/index.js +9 -0
- package/dist/traits/npc/index.js.map +1 -0
- package/dist/traits/npc/npcTrait.d.ts +128 -0
- package/dist/traits/npc/npcTrait.d.ts.map +1 -0
- package/dist/traits/npc/npcTrait.js +180 -0
- package/dist/traits/npc/npcTrait.js.map +1 -0
- package/dist/traits/openable/index.d.ts +3 -0
- package/dist/traits/openable/index.d.ts.map +1 -0
- package/dist/traits/openable/index.js +20 -0
- package/dist/traits/openable/index.js.map +1 -0
- package/dist/traits/openable/openableBehavior.d.ts +64 -0
- package/dist/traits/openable/openableBehavior.d.ts.map +1 -0
- package/dist/traits/openable/openableBehavior.js +109 -0
- package/dist/traits/openable/openableBehavior.js.map +1 -0
- package/dist/traits/openable/openableTrait.d.ts +46 -0
- package/dist/traits/openable/openableTrait.d.ts.map +1 -0
- package/dist/traits/openable/openableTrait.js +42 -0
- package/dist/traits/openable/openableTrait.js.map +1 -0
- package/dist/traits/portable/portableTrait.d.ts +26 -0
- package/dist/traits/portable/portableTrait.d.ts.map +1 -0
- package/dist/traits/portable/portableTrait.js +35 -0
- package/dist/traits/portable/portableTrait.js.map +1 -0
- package/dist/traits/pullable/index.d.ts +2 -0
- package/dist/traits/pullable/index.d.ts.map +1 -0
- package/dist/traits/pullable/index.js +18 -0
- package/dist/traits/pullable/index.js.map +1 -0
- package/dist/traits/pullable/pullableTrait.d.ts +81 -0
- package/dist/traits/pullable/pullableTrait.d.ts.map +1 -0
- package/dist/traits/pullable/pullableTrait.js +44 -0
- package/dist/traits/pullable/pullableTrait.js.map +1 -0
- package/dist/traits/pushable/index.d.ts +2 -0
- package/dist/traits/pushable/index.d.ts.map +1 -0
- package/dist/traits/pushable/index.js +18 -0
- package/dist/traits/pushable/index.js.map +1 -0
- package/dist/traits/pushable/pushableTrait.d.ts +81 -0
- package/dist/traits/pushable/pushableTrait.d.ts.map +1 -0
- package/dist/traits/pushable/pushableTrait.js +44 -0
- package/dist/traits/pushable/pushableTrait.js.map +1 -0
- package/dist/traits/readable/index.d.ts +3 -0
- package/dist/traits/readable/index.d.ts.map +1 -0
- package/dist/traits/readable/index.js +9 -0
- package/dist/traits/readable/index.js.map +1 -0
- package/dist/traits/readable/readableBehavior.d.ts +42 -0
- package/dist/traits/readable/readableBehavior.d.ts.map +1 -0
- package/dist/traits/readable/readableBehavior.js +174 -0
- package/dist/traits/readable/readableBehavior.js.map +1 -0
- package/dist/traits/readable/readableTrait.d.ts +37 -0
- package/dist/traits/readable/readableTrait.d.ts.map +1 -0
- package/dist/traits/readable/readableTrait.js +51 -0
- package/dist/traits/readable/readableTrait.js.map +1 -0
- package/dist/traits/register-all.d.ts +10 -0
- package/dist/traits/register-all.d.ts.map +1 -0
- package/dist/traits/register-all.js +19 -0
- package/dist/traits/register-all.js.map +1 -0
- package/dist/traits/room/index.d.ts +9 -0
- package/dist/traits/room/index.d.ts.map +1 -0
- package/dist/traits/room/index.js +14 -0
- package/dist/traits/room/index.js.map +1 -0
- package/dist/traits/room/roomBehavior.d.ts +87 -0
- package/dist/traits/room/roomBehavior.d.ts.map +1 -0
- package/dist/traits/room/roomBehavior.js +232 -0
- package/dist/traits/room/roomBehavior.js.map +1 -0
- package/dist/traits/room/roomTrait.d.ts +87 -0
- package/dist/traits/room/roomTrait.d.ts.map +1 -0
- package/dist/traits/room/roomTrait.js +59 -0
- package/dist/traits/room/roomTrait.js.map +1 -0
- package/dist/traits/scenery/index.d.ts +3 -0
- package/dist/traits/scenery/index.d.ts.map +1 -0
- package/dist/traits/scenery/index.js +9 -0
- package/dist/traits/scenery/index.js.map +1 -0
- package/dist/traits/scenery/sceneryBehavior.d.ts +21 -0
- package/dist/traits/scenery/sceneryBehavior.d.ts.map +1 -0
- package/dist/traits/scenery/sceneryBehavior.js +42 -0
- package/dist/traits/scenery/sceneryBehavior.js.map +1 -0
- package/dist/traits/scenery/sceneryTrait.d.ts +30 -0
- package/dist/traits/scenery/sceneryTrait.d.ts.map +1 -0
- package/dist/traits/scenery/sceneryTrait.js +39 -0
- package/dist/traits/scenery/sceneryTrait.js.map +1 -0
- package/dist/traits/supporter/index.d.ts +3 -0
- package/dist/traits/supporter/index.d.ts.map +1 -0
- package/dist/traits/supporter/index.js +9 -0
- package/dist/traits/supporter/index.js.map +1 -0
- package/dist/traits/supporter/supporterBehavior.d.ts +83 -0
- package/dist/traits/supporter/supporterBehavior.d.ts.map +1 -0
- package/dist/traits/supporter/supporterBehavior.js +210 -0
- package/dist/traits/supporter/supporterBehavior.js.map +1 -0
- package/dist/traits/supporter/supporterTrait.d.ts +26 -0
- package/dist/traits/supporter/supporterTrait.d.ts.map +1 -0
- package/dist/traits/supporter/supporterTrait.js +30 -0
- package/dist/traits/supporter/supporterTrait.js.map +1 -0
- package/dist/traits/switchable/index.d.ts +3 -0
- package/dist/traits/switchable/index.d.ts.map +1 -0
- package/dist/traits/switchable/index.js +20 -0
- package/dist/traits/switchable/index.js.map +1 -0
- package/dist/traits/switchable/switchableBehavior.d.ts +73 -0
- package/dist/traits/switchable/switchableBehavior.d.ts.map +1 -0
- package/dist/traits/switchable/switchableBehavior.js +191 -0
- package/dist/traits/switchable/switchableBehavior.js.map +1 -0
- package/dist/traits/switchable/switchableTrait.d.ts +61 -0
- package/dist/traits/switchable/switchableTrait.d.ts.map +1 -0
- package/dist/traits/switchable/switchableTrait.js +52 -0
- package/dist/traits/switchable/switchableTrait.js.map +1 -0
- package/dist/traits/trait-types.d.ts +81 -0
- package/dist/traits/trait-types.d.ts.map +1 -0
- package/dist/traits/trait-types.js +146 -0
- package/dist/traits/trait-types.js.map +1 -0
- package/dist/traits/trait.d.ts +42 -0
- package/dist/traits/trait.d.ts.map +1 -0
- package/dist/traits/trait.js +42 -0
- package/dist/traits/trait.js.map +1 -0
- package/dist/traits/vehicle/index.d.ts +6 -0
- package/dist/traits/vehicle/index.d.ts.map +1 -0
- package/dist/traits/vehicle/index.js +22 -0
- package/dist/traits/vehicle/index.js.map +1 -0
- package/dist/traits/vehicle/vehicleBehavior.d.ts +62 -0
- package/dist/traits/vehicle/vehicleBehavior.d.ts.map +1 -0
- package/dist/traits/vehicle/vehicleBehavior.js +145 -0
- package/dist/traits/vehicle/vehicleBehavior.js.map +1 -0
- package/dist/traits/vehicle/vehicleTrait.d.ts +77 -0
- package/dist/traits/vehicle/vehicleTrait.d.ts.map +1 -0
- package/dist/traits/vehicle/vehicleTrait.js +92 -0
- package/dist/traits/vehicle/vehicleTrait.js.map +1 -0
- package/dist/traits/weapon/index.d.ts +3 -0
- package/dist/traits/weapon/index.d.ts.map +1 -0
- package/dist/traits/weapon/index.js +8 -0
- package/dist/traits/weapon/index.js.map +1 -0
- package/dist/traits/weapon/weaponBehavior.d.ts +47 -0
- package/dist/traits/weapon/weaponBehavior.d.ts.map +1 -0
- package/dist/traits/weapon/weaponBehavior.js +106 -0
- package/dist/traits/weapon/weaponBehavior.js.map +1 -0
- package/dist/traits/weapon/weaponTrait.d.ts +67 -0
- package/dist/traits/weapon/weaponTrait.d.ts.map +1 -0
- package/dist/traits/weapon/weaponTrait.js +60 -0
- package/dist/traits/weapon/weaponTrait.js.map +1 -0
- package/dist/traits/wearable/index.d.ts +3 -0
- package/dist/traits/wearable/index.d.ts.map +1 -0
- package/dist/traits/wearable/index.js +20 -0
- package/dist/traits/wearable/index.js.map +1 -0
- package/dist/traits/wearable/wearableBehavior.d.ts +64 -0
- package/dist/traits/wearable/wearableBehavior.d.ts.map +1 -0
- package/dist/traits/wearable/wearableBehavior.js +142 -0
- package/dist/traits/wearable/wearableBehavior.js.map +1 -0
- package/dist/traits/wearable/wearableTrait.d.ts +54 -0
- package/dist/traits/wearable/wearableTrait.d.ts.map +1 -0
- package/dist/traits/wearable/wearableTrait.js +53 -0
- package/dist/traits/wearable/wearableTrait.js.map +1 -0
- package/dist/utils/event-utils.d.ts +30 -0
- package/dist/utils/event-utils.d.ts.map +1 -0
- package/dist/utils/event-utils.js +33 -0
- package/dist/utils/event-utils.js.map +1 -0
- package/dist/world/AuthorModel.d.ts +151 -0
- package/dist/world/AuthorModel.d.ts.map +1 -0
- package/dist/world/AuthorModel.js +416 -0
- package/dist/world/AuthorModel.js.map +1 -0
- package/dist/world/SharedDataStore.d.ts +24 -0
- package/dist/world/SharedDataStore.d.ts.map +1 -0
- package/dist/world/SharedDataStore.js +50 -0
- package/dist/world/SharedDataStore.js.map +1 -0
- package/dist/world/SpatialIndex.d.ts +16 -0
- package/dist/world/SpatialIndex.d.ts.map +1 -0
- package/dist/world/SpatialIndex.js +117 -0
- package/dist/world/SpatialIndex.js.map +1 -0
- package/dist/world/VisibilityBehavior.d.ts +83 -0
- package/dist/world/VisibilityBehavior.d.ts.map +1 -0
- package/dist/world/VisibilityBehavior.js +484 -0
- package/dist/world/VisibilityBehavior.js.map +1 -0
- package/dist/world/WorldModel.d.ts +270 -0
- package/dist/world/WorldModel.d.ts.map +1 -0
- package/dist/world/WorldModel.js +1028 -0
- package/dist/world/WorldModel.js.map +1 -0
- package/dist/world/capabilities.d.ts +36 -0
- package/dist/world/capabilities.d.ts.map +1 -0
- package/dist/world/capabilities.js +18 -0
- package/dist/world/capabilities.js.map +1 -0
- package/dist/world/index.d.ts +7 -0
- package/dist/world/index.d.ts.map +1 -0
- package/dist/world/index.js +21 -0
- package/dist/world/index.js.map +1 -0
- package/package.json +67 -0
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# @sharpee/world-model
|
|
2
|
+
|
|
3
|
+
Entity system, traits, and behaviors for the Sharpee Interactive Fiction platform.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @sharpee/world-model
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The world model provides the foundation for game state:
|
|
14
|
+
|
|
15
|
+
- **Entities** - Rooms, objects, NPCs, and the player
|
|
16
|
+
- **Traits** - Composable properties (Openable, Lockable, Container, etc.)
|
|
17
|
+
- **Behaviors** - Reusable logic (LightSource, Wearable, Edible, etc.)
|
|
18
|
+
- **State Management** - Immutable world state with entity relationships
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import {
|
|
24
|
+
WorldModel,
|
|
25
|
+
IFEntity,
|
|
26
|
+
OpenableTrait,
|
|
27
|
+
ContainerTrait
|
|
28
|
+
} from '@sharpee/world-model';
|
|
29
|
+
|
|
30
|
+
// Create entities with traits
|
|
31
|
+
const chest = world.createEntity('object', {
|
|
32
|
+
id: 'treasure-chest',
|
|
33
|
+
name: 'treasure chest',
|
|
34
|
+
traits: [OpenableTrait, ContainerTrait]
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Query relationships
|
|
38
|
+
const contents = world.getContents(chest);
|
|
39
|
+
const location = world.getLocation(player);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Traits
|
|
43
|
+
|
|
44
|
+
| Trait | Description |
|
|
45
|
+
|-------|-------------|
|
|
46
|
+
| `OpenableTrait` | Can be opened/closed |
|
|
47
|
+
| `LockableTrait` | Can be locked/unlocked with a key |
|
|
48
|
+
| `ContainerTrait` | Can contain other objects |
|
|
49
|
+
| `SupporterTrait` | Objects can be placed on top |
|
|
50
|
+
| `WearableTrait` | Can be worn by player/NPCs |
|
|
51
|
+
| `EdibleTrait` | Can be eaten |
|
|
52
|
+
| `LightSourceTrait` | Provides illumination |
|
|
53
|
+
|
|
54
|
+
## Related Packages
|
|
55
|
+
|
|
56
|
+
- [@sharpee/stdlib](https://www.npmjs.com/package/@sharpee/stdlib) - Standard actions
|
|
57
|
+
- [@sharpee/sharpee](https://www.npmjs.com/package/@sharpee/sharpee) - Full platform bundle
|
|
58
|
+
|
|
59
|
+
## License
|
|
60
|
+
|
|
61
|
+
MIT
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attack behavior coordinator
|
|
3
|
+
*
|
|
4
|
+
* Coordinates the various combat behaviors to handle attacks
|
|
5
|
+
*/
|
|
6
|
+
import { IFEntity } from '../entities/if-entity';
|
|
7
|
+
import { WorldModel } from '../world/WorldModel';
|
|
8
|
+
import { EntityId } from '@sharpee/core';
|
|
9
|
+
/**
|
|
10
|
+
* Combined result of an attack
|
|
11
|
+
*/
|
|
12
|
+
export interface IAttackResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
type: 'broke' | 'damaged' | 'destroyed' | 'killed' | 'hit' | 'ineffective';
|
|
15
|
+
damage?: number;
|
|
16
|
+
remainingHitPoints?: number;
|
|
17
|
+
targetDestroyed?: boolean;
|
|
18
|
+
targetKilled?: boolean;
|
|
19
|
+
itemsDropped?: EntityId[];
|
|
20
|
+
debrisCreated?: EntityId[];
|
|
21
|
+
exitRevealed?: string;
|
|
22
|
+
transformedTo?: EntityId;
|
|
23
|
+
weaponBroke?: boolean;
|
|
24
|
+
message?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Attack behavior coordinator.
|
|
28
|
+
*
|
|
29
|
+
* This behavior coordinates attacks using weapon, breakable, destructible, and combat behaviors.
|
|
30
|
+
* It determines which behavior to use based on the target's traits.
|
|
31
|
+
*/
|
|
32
|
+
export declare class AttackBehavior {
|
|
33
|
+
/**
|
|
34
|
+
* Perform an attack
|
|
35
|
+
* @param target The entity being attacked
|
|
36
|
+
* @param weapon Optional weapon being used
|
|
37
|
+
* @param world The world model
|
|
38
|
+
* @returns Combined attack result
|
|
39
|
+
*/
|
|
40
|
+
static attack(target: IFEntity, weapon: IFEntity | undefined, world: WorldModel): IAttackResult;
|
|
41
|
+
/**
|
|
42
|
+
* Check if a target can be attacked
|
|
43
|
+
*/
|
|
44
|
+
static canAttack(target: IFEntity, weapon?: IFEntity): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Infer the best weapon from inventory
|
|
47
|
+
* @param inventory Array of entities in player's inventory
|
|
48
|
+
* @returns The best weapon found, or undefined
|
|
49
|
+
*/
|
|
50
|
+
static inferWeapon(inventory: IFEntity[]): IFEntity | undefined;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=attack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attack.d.ts","sourceRoot":"","sources":["../../src/behaviors/attack.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,aAAa,CAAC;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa;IA2F/F;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO;IAO9D;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,GAAG,SAAS;CAkChE"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Attack behavior coordinator
|
|
4
|
+
*
|
|
5
|
+
* Coordinates the various combat behaviors to handle attacks
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.AttackBehavior = void 0;
|
|
9
|
+
const trait_types_1 = require("../traits/trait-types");
|
|
10
|
+
const weaponBehavior_1 = require("../traits/weapon/weaponBehavior");
|
|
11
|
+
const breakableBehavior_1 = require("../traits/breakable/breakableBehavior");
|
|
12
|
+
const destructibleBehavior_1 = require("../traits/destructible/destructibleBehavior");
|
|
13
|
+
const combatantBehavior_1 = require("../traits/combatant/combatantBehavior");
|
|
14
|
+
/**
|
|
15
|
+
* Attack behavior coordinator.
|
|
16
|
+
*
|
|
17
|
+
* This behavior coordinates attacks using weapon, breakable, destructible, and combat behaviors.
|
|
18
|
+
* It determines which behavior to use based on the target's traits.
|
|
19
|
+
*/
|
|
20
|
+
class AttackBehavior {
|
|
21
|
+
/**
|
|
22
|
+
* Perform an attack
|
|
23
|
+
* @param target The entity being attacked
|
|
24
|
+
* @param weapon Optional weapon being used
|
|
25
|
+
* @param world The world model
|
|
26
|
+
* @returns Combined attack result
|
|
27
|
+
*/
|
|
28
|
+
static attack(target, weapon, world) {
|
|
29
|
+
// Calculate weapon damage if using a weapon
|
|
30
|
+
let weaponDamage = 1; // Default unarmed damage
|
|
31
|
+
let weaponType;
|
|
32
|
+
let weaponResult;
|
|
33
|
+
if (weapon && weapon.has(trait_types_1.TraitType.WEAPON)) {
|
|
34
|
+
weaponResult = weaponBehavior_1.WeaponBehavior.calculateDamage(weapon);
|
|
35
|
+
weaponDamage = weaponResult.damage;
|
|
36
|
+
weaponType = weaponResult.weaponType;
|
|
37
|
+
}
|
|
38
|
+
// Try behaviors in order: Breakable, Destructible, Combatant
|
|
39
|
+
// 1. Check if target is breakable (one-hit destruction)
|
|
40
|
+
if (target.has(trait_types_1.TraitType.BREAKABLE)) {
|
|
41
|
+
const breakResult = breakableBehavior_1.BreakableBehavior.break(target, world);
|
|
42
|
+
if (breakResult.success) {
|
|
43
|
+
return {
|
|
44
|
+
success: true,
|
|
45
|
+
type: 'broke',
|
|
46
|
+
damage: weaponDamage,
|
|
47
|
+
targetDestroyed: true,
|
|
48
|
+
debrisCreated: breakResult.debrisCreated,
|
|
49
|
+
weaponBroke: weaponResult?.weaponBroke,
|
|
50
|
+
message: breakResult.message
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// 2. Check if target is destructible (multi-hit with HP)
|
|
55
|
+
if (target.has(trait_types_1.TraitType.DESTRUCTIBLE)) {
|
|
56
|
+
const damageResult = destructibleBehavior_1.DestructibleBehavior.damage(target, weaponDamage, weaponType, world);
|
|
57
|
+
if (damageResult.success) {
|
|
58
|
+
return {
|
|
59
|
+
success: true,
|
|
60
|
+
type: damageResult.destroyed ? 'destroyed' : 'damaged',
|
|
61
|
+
damage: damageResult.damage,
|
|
62
|
+
remainingHitPoints: damageResult.remainingHitPoints,
|
|
63
|
+
targetDestroyed: damageResult.destroyed,
|
|
64
|
+
transformedTo: damageResult.transformedTo,
|
|
65
|
+
exitRevealed: damageResult.exitRevealed,
|
|
66
|
+
weaponBroke: weaponResult?.weaponBroke,
|
|
67
|
+
message: damageResult.message
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Attack failed due to requirements
|
|
72
|
+
return {
|
|
73
|
+
success: false,
|
|
74
|
+
type: 'ineffective',
|
|
75
|
+
damage: 0,
|
|
76
|
+
message: damageResult.requiresWeapon
|
|
77
|
+
? 'You need a weapon to damage that.'
|
|
78
|
+
: damageResult.wrongWeaponType
|
|
79
|
+
? 'That weapon won\'t work on this target.'
|
|
80
|
+
: damageResult.invulnerable
|
|
81
|
+
? 'That cannot be damaged.'
|
|
82
|
+
: 'Your attack has no effect.'
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 3. Check if target is a combatant (has health)
|
|
87
|
+
if (target.has(trait_types_1.TraitType.COMBATANT)) {
|
|
88
|
+
const combatResult = combatantBehavior_1.CombatBehavior.attack(target, weaponDamage, world);
|
|
89
|
+
if (combatResult.success) {
|
|
90
|
+
return {
|
|
91
|
+
success: true,
|
|
92
|
+
type: combatResult.killed ? 'killed' : 'hit',
|
|
93
|
+
damage: combatResult.damage,
|
|
94
|
+
remainingHitPoints: combatResult.remainingHealth,
|
|
95
|
+
targetKilled: combatResult.killed,
|
|
96
|
+
itemsDropped: combatResult.droppedItems,
|
|
97
|
+
weaponBroke: weaponResult?.weaponBroke,
|
|
98
|
+
message: combatResult.killed ? combatResult.deathMessage : combatResult.message
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// 4. Target has no combat-related traits - attack is ineffective
|
|
103
|
+
return {
|
|
104
|
+
success: false,
|
|
105
|
+
type: 'ineffective',
|
|
106
|
+
damage: 0,
|
|
107
|
+
message: 'Your attack has no effect on that.'
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if a target can be attacked
|
|
112
|
+
*/
|
|
113
|
+
static canAttack(target, weapon) {
|
|
114
|
+
// Can attack if target has any combat-related trait
|
|
115
|
+
return target.has(trait_types_1.TraitType.BREAKABLE) ||
|
|
116
|
+
target.has(trait_types_1.TraitType.DESTRUCTIBLE) ||
|
|
117
|
+
target.has(trait_types_1.TraitType.COMBATANT);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Infer the best weapon from inventory
|
|
121
|
+
* @param inventory Array of entities in player's inventory
|
|
122
|
+
* @returns The best weapon found, or undefined
|
|
123
|
+
*/
|
|
124
|
+
static inferWeapon(inventory) {
|
|
125
|
+
// Find all weapons
|
|
126
|
+
const weapons = inventory.filter(item => item.has(trait_types_1.TraitType.WEAPON));
|
|
127
|
+
if (weapons.length === 0)
|
|
128
|
+
return undefined;
|
|
129
|
+
// Prefer equipped weapons
|
|
130
|
+
const equipped = weapons.filter(w => {
|
|
131
|
+
if (!w.has(trait_types_1.TraitType.EQUIPPED))
|
|
132
|
+
return false;
|
|
133
|
+
const equippedTrait = w.get(trait_types_1.TraitType.EQUIPPED);
|
|
134
|
+
return equippedTrait && equippedTrait.isEquipped;
|
|
135
|
+
});
|
|
136
|
+
if (equipped.length > 0) {
|
|
137
|
+
// Return equipped weapon with highest max damage
|
|
138
|
+
return equipped.reduce((best, current) => {
|
|
139
|
+
const bestWeapon = best.get(trait_types_1.TraitType.WEAPON);
|
|
140
|
+
const currentWeapon = current.get(trait_types_1.TraitType.WEAPON);
|
|
141
|
+
if (!bestWeapon || !currentWeapon)
|
|
142
|
+
return best;
|
|
143
|
+
const bestDamage = bestWeapon.maxDamage || 0;
|
|
144
|
+
const currentDamage = currentWeapon.maxDamage || 0;
|
|
145
|
+
return currentDamage > bestDamage ? current : best;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// No equipped weapons, return weapon with highest max damage
|
|
149
|
+
return weapons.reduce((best, current) => {
|
|
150
|
+
const bestWeapon = best.get(trait_types_1.TraitType.WEAPON);
|
|
151
|
+
const currentWeapon = current.get(trait_types_1.TraitType.WEAPON);
|
|
152
|
+
if (!bestWeapon || !currentWeapon)
|
|
153
|
+
return best;
|
|
154
|
+
const bestDamage = bestWeapon.maxDamage || 0;
|
|
155
|
+
const currentDamage = currentWeapon.maxDamage || 0;
|
|
156
|
+
return currentDamage > bestDamage ? current : best;
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.AttackBehavior = AttackBehavior;
|
|
161
|
+
//# sourceMappingURL=attack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attack.js","sourceRoot":"","sources":["../../src/behaviors/attack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { IFEntity } from '../entities/if-entity';
|
|
2
|
+
import { TraitType } from '../traits/trait-types';
|
|
3
|
+
import { ITrait } from '../traits/trait';
|
|
4
|
+
/**
|
|
5
|
+
* Base class for all behaviors in the IF system.
|
|
6
|
+
*
|
|
7
|
+
* Behaviors contain the logic that operates on trait data.
|
|
8
|
+
* They declare their required traits and provide helper methods
|
|
9
|
+
* for safely accessing those traits.
|
|
10
|
+
*
|
|
11
|
+
* Note: In the new architecture, behaviors are primarily static
|
|
12
|
+
* utility classes rather than instantiated objects.
|
|
13
|
+
*/
|
|
14
|
+
export declare abstract class Behavior {
|
|
15
|
+
/**
|
|
16
|
+
* List of trait types that must be present on an entity
|
|
17
|
+
* for this behavior to function properly.
|
|
18
|
+
*
|
|
19
|
+
* Example:
|
|
20
|
+
* static requiredTraits = [TraitType.LOCKABLE, TraitType.OPENABLE];
|
|
21
|
+
*/
|
|
22
|
+
static requiredTraits: (TraitType | string)[];
|
|
23
|
+
/**
|
|
24
|
+
* Helper method to require and retrieve a trait from an entity.
|
|
25
|
+
* Throws an error if the trait is not present.
|
|
26
|
+
*
|
|
27
|
+
* @param entity - The entity to get the trait from
|
|
28
|
+
* @param traitType - The type of trait to retrieve
|
|
29
|
+
* @returns The trait instance
|
|
30
|
+
* @throws Error if the trait is not present on the entity
|
|
31
|
+
*/
|
|
32
|
+
protected static require<T extends ITrait>(entity: IFEntity, traitType: TraitType | string): T;
|
|
33
|
+
/**
|
|
34
|
+
* Helper method to optionally retrieve a trait from an entity.
|
|
35
|
+
* Returns undefined if the trait is not present.
|
|
36
|
+
*
|
|
37
|
+
* @param entity - The entity to get the trait from
|
|
38
|
+
* @param traitType - The type of trait to retrieve
|
|
39
|
+
* @returns The trait instance or undefined
|
|
40
|
+
*/
|
|
41
|
+
protected static optional<T extends ITrait>(entity: IFEntity, traitType: TraitType | string): T | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Validates that an entity has all required traits for this behavior.
|
|
44
|
+
*
|
|
45
|
+
* @param entity - The entity to validate
|
|
46
|
+
* @returns true if all required traits are present
|
|
47
|
+
*/
|
|
48
|
+
static validateEntity(entity: IFEntity): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Gets a list of missing required traits for an entity.
|
|
51
|
+
*
|
|
52
|
+
* @param entity - The entity to check
|
|
53
|
+
* @returns Array of missing trait types
|
|
54
|
+
*/
|
|
55
|
+
static getMissingTraits(entity: IFEntity): (TraitType | string)[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Interface for behaviors that need access to the world context
|
|
59
|
+
*/
|
|
60
|
+
export interface IWorldAwareBehavior {
|
|
61
|
+
setWorldContext(context: any): void;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Type guard to check if a behavior is world-aware
|
|
65
|
+
*/
|
|
66
|
+
export declare function isWorldAwareBehavior(behavior: any): behavior is IWorldAwareBehavior;
|
|
67
|
+
//# sourceMappingURL=behavior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavior.d.ts","sourceRoot":"","sources":["../../src/behaviors/behavior.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC;;;;;;;;;GASG;AACH,8BAAsB,QAAQ;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,EAAE,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAM;IAEnD;;;;;;;;OAQG;IACH,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,EACvC,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,SAAS,GAAG,MAAM,GAC5B,CAAC;IASJ;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,MAAM,EACxC,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,SAAS,GAAG,MAAM,GAC5B,CAAC,GAAG,SAAS;IAOhB;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAIhD;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE;CAGlE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;CACrC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,GAAG,GACZ,QAAQ,IAAI,mBAAmB,CAEjC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/world-model/src/behaviors/behavior.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Behavior = void 0;
|
|
5
|
+
exports.isWorldAwareBehavior = isWorldAwareBehavior;
|
|
6
|
+
/**
|
|
7
|
+
* Base class for all behaviors in the IF system.
|
|
8
|
+
*
|
|
9
|
+
* Behaviors contain the logic that operates on trait data.
|
|
10
|
+
* They declare their required traits and provide helper methods
|
|
11
|
+
* for safely accessing those traits.
|
|
12
|
+
*
|
|
13
|
+
* Note: In the new architecture, behaviors are primarily static
|
|
14
|
+
* utility classes rather than instantiated objects.
|
|
15
|
+
*/
|
|
16
|
+
class Behavior {
|
|
17
|
+
/**
|
|
18
|
+
* List of trait types that must be present on an entity
|
|
19
|
+
* for this behavior to function properly.
|
|
20
|
+
*
|
|
21
|
+
* Example:
|
|
22
|
+
* static requiredTraits = [TraitType.LOCKABLE, TraitType.OPENABLE];
|
|
23
|
+
*/
|
|
24
|
+
static requiredTraits = [];
|
|
25
|
+
/**
|
|
26
|
+
* Helper method to require and retrieve a trait from an entity.
|
|
27
|
+
* Throws an error if the trait is not present.
|
|
28
|
+
*
|
|
29
|
+
* @param entity - The entity to get the trait from
|
|
30
|
+
* @param traitType - The type of trait to retrieve
|
|
31
|
+
* @returns The trait instance
|
|
32
|
+
* @throws Error if the trait is not present on the entity
|
|
33
|
+
*/
|
|
34
|
+
static require(entity, traitType) {
|
|
35
|
+
if (!entity.has(traitType)) {
|
|
36
|
+
throw new Error(`Entity "${entity.id}" missing required trait: ${traitType}`);
|
|
37
|
+
}
|
|
38
|
+
return entity.get(traitType);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Helper method to optionally retrieve a trait from an entity.
|
|
42
|
+
* Returns undefined if the trait is not present.
|
|
43
|
+
*
|
|
44
|
+
* @param entity - The entity to get the trait from
|
|
45
|
+
* @param traitType - The type of trait to retrieve
|
|
46
|
+
* @returns The trait instance or undefined
|
|
47
|
+
*/
|
|
48
|
+
static optional(entity, traitType) {
|
|
49
|
+
if (!entity.has(traitType)) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return entity.get(traitType);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Validates that an entity has all required traits for this behavior.
|
|
56
|
+
*
|
|
57
|
+
* @param entity - The entity to validate
|
|
58
|
+
* @returns true if all required traits are present
|
|
59
|
+
*/
|
|
60
|
+
static validateEntity(entity) {
|
|
61
|
+
return this.requiredTraits.every(trait => entity.has(trait));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Gets a list of missing required traits for an entity.
|
|
65
|
+
*
|
|
66
|
+
* @param entity - The entity to check
|
|
67
|
+
* @returns Array of missing trait types
|
|
68
|
+
*/
|
|
69
|
+
static getMissingTraits(entity) {
|
|
70
|
+
return this.requiredTraits.filter(trait => !entity.has(trait));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.Behavior = Behavior;
|
|
74
|
+
/**
|
|
75
|
+
* Type guard to check if a behavior is world-aware
|
|
76
|
+
*/
|
|
77
|
+
function isWorldAwareBehavior(behavior) {
|
|
78
|
+
return 'setWorldContext' in behavior;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=behavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/behaviors/behavior.ts"],"names":[],"mappings":";AAAA,iDAAiD;;;AAgGjD,oDAIC;AA9FD;;;;;;;;;GASG;AACH,MAAsB,QAAQ;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,GAA2B,EAAE,CAAC;IAEnD;;;;;;;;OAQG;IACO,MAAM,CAAC,OAAO,CACtB,MAAgB,EAChB,SAA6B;QAE7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,WAAW,MAAM,CAAC,EAAE,6BAA6B,SAAS,EAAE,CAC7D,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAM,CAAC;IACpC,CAAC;IAED;;;;;;;OAOG;IACO,MAAM,CAAC,QAAQ,CACvB,MAAgB,EAChB,SAA6B;QAE7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAM,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,MAAgB;QACpC,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAgB;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;;AAnEH,4BAoEC;AASD;;GAEG;AACH,SAAgB,oBAAoB,CAClC,QAAa;IAEb,OAAO,iBAAiB,IAAI,QAAQ,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { Behavior, IWorldAwareBehavior, isWorldAwareBehavior } from './behavior';
|
|
2
|
+
export { ContainerBehavior } from '../traits/container/containerBehavior';
|
|
3
|
+
export { SceneryBehavior } from '../traits/scenery/sceneryBehavior';
|
|
4
|
+
export { WearableBehavior } from '../traits/wearable/wearableBehavior';
|
|
5
|
+
export { ReadableBehavior } from '../traits/readable/readableBehavior';
|
|
6
|
+
export { LightSourceBehavior } from '../traits/light-source/lightSourceBehavior';
|
|
7
|
+
export { ExitBehavior } from '../traits/exit/exitBehavior';
|
|
8
|
+
export { ClimbableBehavior } from '../traits/climbable/climbableBehavior';
|
|
9
|
+
export { OpenableBehavior } from '../traits/openable/openableBehavior';
|
|
10
|
+
export { LockableBehavior } from '../traits/lockable/lockableBehavior';
|
|
11
|
+
export { WeaponBehavior } from '../traits/weapon/weaponBehavior';
|
|
12
|
+
export { BreakableBehavior } from '../traits/breakable/breakableBehavior';
|
|
13
|
+
export { DestructibleBehavior } from '../traits/destructible/destructibleBehavior';
|
|
14
|
+
export { CombatBehavior } from '../traits/combatant/combatantBehavior';
|
|
15
|
+
export { AttackBehavior, IAttackResult } from './attack';
|
|
16
|
+
export type { IOpenResult, ICloseResult } from '../traits/openable/openableBehavior';
|
|
17
|
+
export type { IWeaponDamageResult } from '../traits/weapon/weaponBehavior';
|
|
18
|
+
export type { IBreakResult } from '../traits/breakable/breakableBehavior';
|
|
19
|
+
export type { IDamageResult } from '../traits/destructible/destructibleBehavior';
|
|
20
|
+
export type { ICombatResult } from '../traits/combatant/combatantBehavior';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/behaviors/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzD,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACrF,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,YAAY,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/world-model/src/behaviors/index.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AttackBehavior = exports.CombatBehavior = exports.DestructibleBehavior = exports.BreakableBehavior = exports.WeaponBehavior = exports.LockableBehavior = exports.OpenableBehavior = exports.ClimbableBehavior = exports.ExitBehavior = exports.LightSourceBehavior = exports.ReadableBehavior = exports.WearableBehavior = exports.SceneryBehavior = exports.ContainerBehavior = exports.isWorldAwareBehavior = exports.Behavior = void 0;
|
|
5
|
+
var behavior_1 = require("./behavior");
|
|
6
|
+
Object.defineProperty(exports, "Behavior", { enumerable: true, get: function () { return behavior_1.Behavior; } });
|
|
7
|
+
Object.defineProperty(exports, "isWorldAwareBehavior", { enumerable: true, get: function () { return behavior_1.isWorldAwareBehavior; } });
|
|
8
|
+
// Re-export all behavior classes as they are added
|
|
9
|
+
// These will come from the trait folders
|
|
10
|
+
var containerBehavior_1 = require("../traits/container/containerBehavior");
|
|
11
|
+
Object.defineProperty(exports, "ContainerBehavior", { enumerable: true, get: function () { return containerBehavior_1.ContainerBehavior; } });
|
|
12
|
+
var sceneryBehavior_1 = require("../traits/scenery/sceneryBehavior");
|
|
13
|
+
Object.defineProperty(exports, "SceneryBehavior", { enumerable: true, get: function () { return sceneryBehavior_1.SceneryBehavior; } });
|
|
14
|
+
var wearableBehavior_1 = require("../traits/wearable/wearableBehavior");
|
|
15
|
+
Object.defineProperty(exports, "WearableBehavior", { enumerable: true, get: function () { return wearableBehavior_1.WearableBehavior; } });
|
|
16
|
+
var readableBehavior_1 = require("../traits/readable/readableBehavior");
|
|
17
|
+
Object.defineProperty(exports, "ReadableBehavior", { enumerable: true, get: function () { return readableBehavior_1.ReadableBehavior; } });
|
|
18
|
+
var lightSourceBehavior_1 = require("../traits/light-source/lightSourceBehavior");
|
|
19
|
+
Object.defineProperty(exports, "LightSourceBehavior", { enumerable: true, get: function () { return lightSourceBehavior_1.LightSourceBehavior; } });
|
|
20
|
+
var exitBehavior_1 = require("../traits/exit/exitBehavior");
|
|
21
|
+
Object.defineProperty(exports, "ExitBehavior", { enumerable: true, get: function () { return exitBehavior_1.ExitBehavior; } });
|
|
22
|
+
var climbableBehavior_1 = require("../traits/climbable/climbableBehavior");
|
|
23
|
+
Object.defineProperty(exports, "ClimbableBehavior", { enumerable: true, get: function () { return climbableBehavior_1.ClimbableBehavior; } });
|
|
24
|
+
var openableBehavior_1 = require("../traits/openable/openableBehavior");
|
|
25
|
+
Object.defineProperty(exports, "OpenableBehavior", { enumerable: true, get: function () { return openableBehavior_1.OpenableBehavior; } });
|
|
26
|
+
var lockableBehavior_1 = require("../traits/lockable/lockableBehavior");
|
|
27
|
+
Object.defineProperty(exports, "LockableBehavior", { enumerable: true, get: function () { return lockableBehavior_1.LockableBehavior; } });
|
|
28
|
+
// Combat behaviors
|
|
29
|
+
var weaponBehavior_1 = require("../traits/weapon/weaponBehavior");
|
|
30
|
+
Object.defineProperty(exports, "WeaponBehavior", { enumerable: true, get: function () { return weaponBehavior_1.WeaponBehavior; } });
|
|
31
|
+
var breakableBehavior_1 = require("../traits/breakable/breakableBehavior");
|
|
32
|
+
Object.defineProperty(exports, "BreakableBehavior", { enumerable: true, get: function () { return breakableBehavior_1.BreakableBehavior; } });
|
|
33
|
+
var destructibleBehavior_1 = require("../traits/destructible/destructibleBehavior");
|
|
34
|
+
Object.defineProperty(exports, "DestructibleBehavior", { enumerable: true, get: function () { return destructibleBehavior_1.DestructibleBehavior; } });
|
|
35
|
+
var combatantBehavior_1 = require("../traits/combatant/combatantBehavior");
|
|
36
|
+
Object.defineProperty(exports, "CombatBehavior", { enumerable: true, get: function () { return combatantBehavior_1.CombatBehavior; } });
|
|
37
|
+
var attack_1 = require("./attack");
|
|
38
|
+
Object.defineProperty(exports, "AttackBehavior", { enumerable: true, get: function () { return attack_1.AttackBehavior; } });
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/behaviors/index.ts"],"names":[],"mappings":";AAAA,8CAA8C;;;AAE9C,uCAAiF;AAAxE,oGAAA,QAAQ,OAAA;AAAuB,gHAAA,oBAAoB,OAAA;AAE5D,mDAAmD;AACnD,yCAAyC;AACzC,2EAA0E;AAAjE,sHAAA,iBAAiB,OAAA;AAC1B,qEAAoE;AAA3D,kHAAA,eAAe,OAAA;AACxB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,kFAAiF;AAAxE,0HAAA,mBAAmB,OAAA;AAC5B,4DAA2D;AAAlD,4GAAA,YAAY,OAAA;AACrB,2EAA0E;AAAjE,sHAAA,iBAAiB,OAAA;AAC1B,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AAEzB,mBAAmB;AACnB,kEAAiE;AAAxD,gHAAA,cAAc,OAAA;AACvB,2EAA0E;AAAjE,sHAAA,iBAAiB,OAAA;AAC1B,oFAAmF;AAA1E,4HAAA,oBAAoB,OAAA;AAC7B,2EAAuE;AAA9D,mHAAA,cAAc,OAAA;AACvB,mCAAyD;AAAhD,wGAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability Behavior interface (ADR-090)
|
|
3
|
+
*
|
|
4
|
+
* Standard interface for behaviors that handle capability dispatch.
|
|
5
|
+
* Follows the same 4-phase pattern as stdlib actions for consistency.
|
|
6
|
+
*/
|
|
7
|
+
import { IFEntity } from '../entities';
|
|
8
|
+
import { WorldModel } from '../world';
|
|
9
|
+
import { CapabilityValidationResult, CapabilityEffect } from './types';
|
|
10
|
+
/**
|
|
11
|
+
* Shared data object for passing data between behavior phases.
|
|
12
|
+
* Mirrors ActionContext.sharedData pattern from stdlib.
|
|
13
|
+
*/
|
|
14
|
+
export type CapabilitySharedData = Record<string, any>;
|
|
15
|
+
/**
|
|
16
|
+
* Standard interface for capability behaviors.
|
|
17
|
+
*
|
|
18
|
+
* Behaviors implement this interface to handle specific capabilities
|
|
19
|
+
* (action IDs) declared by traits. When a trait declares a capability,
|
|
20
|
+
* a corresponding behavior must be registered to handle it.
|
|
21
|
+
*
|
|
22
|
+
* The 4-phase pattern mirrors stdlib actions:
|
|
23
|
+
* 1. validate - Check if the action can be performed
|
|
24
|
+
* 2. execute - Perform mutations (no events)
|
|
25
|
+
* 3. report - Generate success events
|
|
26
|
+
* 4. blocked - Generate failure events
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const BasketLoweringBehavior: CapabilityBehavior = {
|
|
31
|
+
* validate(entity, world, actorId, sharedData) {
|
|
32
|
+
* const trait = entity.get(BasketElevatorTrait);
|
|
33
|
+
* if (trait.position === 'bottom') {
|
|
34
|
+
* return { valid: false, error: 'dungeo.basket.already_down' };
|
|
35
|
+
* }
|
|
36
|
+
* return { valid: true };
|
|
37
|
+
* },
|
|
38
|
+
*
|
|
39
|
+
* execute(entity, world, actorId, sharedData) {
|
|
40
|
+
* const trait = entity.get(BasketElevatorTrait);
|
|
41
|
+
* trait.position = 'bottom';
|
|
42
|
+
* world.moveEntity(entity.id, trait.bottomRoomId);
|
|
43
|
+
* sharedData.playerTransported = true; // Pass data to report()
|
|
44
|
+
* },
|
|
45
|
+
*
|
|
46
|
+
* report(entity, world, actorId, sharedData) {
|
|
47
|
+
* const transported = sharedData.playerTransported;
|
|
48
|
+
* return [createEffect('if.event.lowered', { target: entity.id })];
|
|
49
|
+
* },
|
|
50
|
+
*
|
|
51
|
+
* blocked(entity, world, actorId, error, sharedData) {
|
|
52
|
+
* return [createEffect('action.blocked', { messageId: error })];
|
|
53
|
+
* }
|
|
54
|
+
* };
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export interface CapabilityBehavior {
|
|
58
|
+
/**
|
|
59
|
+
* Phase 1: Validate whether the action can be performed.
|
|
60
|
+
*
|
|
61
|
+
* Check preconditions, state, and constraints. Return validation
|
|
62
|
+
* result with error code if action cannot proceed.
|
|
63
|
+
*
|
|
64
|
+
* @param entity - The entity being acted upon
|
|
65
|
+
* @param world - The world model for querying state
|
|
66
|
+
* @param actorId - ID of the actor performing the action
|
|
67
|
+
* @param sharedData - Mutable object for passing data between phases
|
|
68
|
+
* @returns Validation result with optional error info
|
|
69
|
+
*/
|
|
70
|
+
validate(entity: IFEntity, world: WorldModel, actorId: string, sharedData: CapabilitySharedData): CapabilityValidationResult;
|
|
71
|
+
/**
|
|
72
|
+
* Phase 2: Execute mutations.
|
|
73
|
+
*
|
|
74
|
+
* Perform all state changes. Do NOT emit events here - that's
|
|
75
|
+
* the report phase's job. This separation enables clean rollback
|
|
76
|
+
* and consistent event generation.
|
|
77
|
+
*
|
|
78
|
+
* @param entity - The entity being acted upon
|
|
79
|
+
* @param world - The world model for mutations
|
|
80
|
+
* @param actorId - ID of the actor performing the action
|
|
81
|
+
* @param sharedData - Mutable object for passing data between phases
|
|
82
|
+
*/
|
|
83
|
+
execute(entity: IFEntity, world: WorldModel, actorId: string, sharedData: CapabilitySharedData): void;
|
|
84
|
+
/**
|
|
85
|
+
* Phase 3: Report success.
|
|
86
|
+
*
|
|
87
|
+
* Generate effects describing what happened. Called after
|
|
88
|
+
* execute() succeeds. Return events with appropriate message IDs.
|
|
89
|
+
*
|
|
90
|
+
* @param entity - The entity that was acted upon
|
|
91
|
+
* @param world - The world model (post-mutation state)
|
|
92
|
+
* @param actorId - ID of the actor who performed the action
|
|
93
|
+
* @param sharedData - Mutable object for passing data between phases
|
|
94
|
+
* @returns Array of effects to emit
|
|
95
|
+
*/
|
|
96
|
+
report(entity: IFEntity, world: WorldModel, actorId: string, sharedData: CapabilitySharedData): CapabilityEffect[];
|
|
97
|
+
/**
|
|
98
|
+
* Phase 4: Report failure.
|
|
99
|
+
*
|
|
100
|
+
* Generate effects for when validation fails. Called instead
|
|
101
|
+
* of execute()/report() when validate() returns invalid.
|
|
102
|
+
*
|
|
103
|
+
* @param entity - The entity that couldn't be acted upon
|
|
104
|
+
* @param world - The world model
|
|
105
|
+
* @param actorId - ID of the actor who attempted the action
|
|
106
|
+
* @param error - Error code from validation result
|
|
107
|
+
* @param sharedData - Mutable object for passing data between phases
|
|
108
|
+
* @returns Array of effects to emit
|
|
109
|
+
*/
|
|
110
|
+
blocked(entity: IFEntity, world: WorldModel, actorId: string, error: string, sharedData: CapabilitySharedData): CapabilityEffect[];
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=capability-behavior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-behavior.d.ts","sourceRoot":"","sources":["../../src/capabilities/capability-behavior.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEvE;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,0BAA0B,CAAC;IAE7H;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAEtG;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,gBAAgB,EAAE,CAAC;IAEnH;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,gBAAgB,EAAE,CAAC;CACpI"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Capability Behavior interface (ADR-090)
|
|
4
|
+
*
|
|
5
|
+
* Standard interface for behaviors that handle capability dispatch.
|
|
6
|
+
* Follows the same 4-phase pattern as stdlib actions for consistency.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
//# sourceMappingURL=capability-behavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-behavior.js","sourceRoot":"","sources":["../../src/capabilities/capability-behavior.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|