@sharpee/event-processor 0.9.61-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/LICENSE +21 -0
- package/README.md +43 -0
- package/dist-npm/effects/effect-processor.d.ts +50 -0
- package/dist-npm/effects/effect-processor.d.ts.map +1 -0
- package/dist-npm/effects/effect-processor.js +255 -0
- package/dist-npm/effects/effect-processor.js.map +1 -0
- package/dist-npm/effects/index.d.ts +10 -0
- package/dist-npm/effects/index.d.ts.map +1 -0
- package/dist-npm/effects/index.js +29 -0
- package/dist-npm/effects/index.js.map +1 -0
- package/dist-npm/effects/types.d.ts +119 -0
- package/dist-npm/effects/types.d.ts.map +1 -0
- package/dist-npm/effects/types.js +9 -0
- package/dist-npm/effects/types.js.map +1 -0
- package/dist-npm/effects/world-query.d.ts +70 -0
- package/dist-npm/effects/world-query.d.ts.map +1 -0
- package/dist-npm/effects/world-query.js +34 -0
- package/dist-npm/effects/world-query.js.map +1 -0
- package/dist-npm/handler-types.d.ts +67 -0
- package/dist-npm/handler-types.d.ts.map +1 -0
- package/dist-npm/handler-types.js +8 -0
- package/dist-npm/handler-types.js.map +1 -0
- package/dist-npm/handlers/complex-manipulation.d.ts +31 -0
- package/dist-npm/handlers/complex-manipulation.d.ts.map +1 -0
- package/dist-npm/handlers/complex-manipulation.js +87 -0
- package/dist-npm/handlers/complex-manipulation.js.map +1 -0
- package/dist-npm/handlers/device/index.d.ts +28 -0
- package/dist-npm/handlers/device/index.d.ts.map +1 -0
- package/dist-npm/handlers/device/index.js +172 -0
- package/dist-npm/handlers/device/index.js.map +1 -0
- package/dist-npm/handlers/index.d.ts +17 -0
- package/dist-npm/handlers/index.d.ts.map +1 -0
- package/dist-npm/handlers/index.js +48 -0
- package/dist-npm/handlers/index.js.map +1 -0
- package/dist-npm/handlers/meta.d.ts +59 -0
- package/dist-npm/handlers/meta.d.ts.map +1 -0
- package/dist-npm/handlers/meta.js +129 -0
- package/dist-npm/handlers/meta.js.map +1 -0
- package/dist-npm/handlers/movement.d.ts +51 -0
- package/dist-npm/handlers/movement.d.ts.map +1 -0
- package/dist-npm/handlers/movement.js +176 -0
- package/dist-npm/handlers/movement.js.map +1 -0
- package/dist-npm/handlers/observation/index.d.ts +6 -0
- package/dist-npm/handlers/observation/index.d.ts.map +1 -0
- package/dist-npm/handlers/observation/index.js +22 -0
- package/dist-npm/handlers/observation/index.js.map +1 -0
- package/dist-npm/handlers/observation/observation-handlers.d.ts +96 -0
- package/dist-npm/handlers/observation/observation-handlers.d.ts.map +1 -0
- package/dist-npm/handlers/observation/observation-handlers.js +162 -0
- package/dist-npm/handlers/observation/observation-handlers.js.map +1 -0
- package/dist-npm/handlers/observation/sensory.d.ts +29 -0
- package/dist-npm/handlers/observation/sensory.d.ts.map +1 -0
- package/dist-npm/handlers/observation/sensory.js +77 -0
- package/dist-npm/handlers/observation/sensory.js.map +1 -0
- package/dist-npm/handlers/state-change.d.ts +47 -0
- package/dist-npm/handlers/state-change.d.ts.map +1 -0
- package/dist-npm/handlers/state-change.js +166 -0
- package/dist-npm/handlers/state-change.js.map +1 -0
- package/dist-npm/index.d.ts +14 -0
- package/dist-npm/index.d.ts.map +1 -0
- package/dist-npm/index.js +32 -0
- package/dist-npm/index.js.map +1 -0
- package/dist-npm/processor.d.ts +62 -0
- package/dist-npm/processor.d.ts.map +1 -0
- package/dist-npm/processor.js +332 -0
- package/dist-npm/processor.js.map +1 -0
- package/dist-npm/types.d.ts +6 -0
- package/dist-npm/types.d.ts.map +1 -0
- package/dist-npm/types.js +6 -0
- package/dist-npm/types.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Meta action event handlers
|
|
4
|
+
*
|
|
5
|
+
* Handles events for meta-game actions like waiting, scoring, help, etc.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.handleWaited = handleWaited;
|
|
9
|
+
exports.handleScoreDisplayed = handleScoreDisplayed;
|
|
10
|
+
exports.handleHelpDisplayed = handleHelpDisplayed;
|
|
11
|
+
exports.handleAboutDisplayed = handleAboutDisplayed;
|
|
12
|
+
exports.registerMetaHandlers = registerMetaHandlers;
|
|
13
|
+
/**
|
|
14
|
+
* Handle waited event
|
|
15
|
+
*
|
|
16
|
+
* This event is fired when a player waits/passes time.
|
|
17
|
+
* Default behavior: Increment turn counter in shared data
|
|
18
|
+
*
|
|
19
|
+
* Can be overridden to:
|
|
20
|
+
* - Trigger time-based events (e.g., NPC movements, timed puzzles)
|
|
21
|
+
* - Update atmospheric descriptions (e.g., sun setting)
|
|
22
|
+
* - Advance story-specific timers
|
|
23
|
+
*/
|
|
24
|
+
function handleWaited(event, world) {
|
|
25
|
+
const data = event.data;
|
|
26
|
+
// Update turn counter
|
|
27
|
+
// TODO: Implement shared data storage in WorldModel
|
|
28
|
+
// const sharedData = world.getSharedData() || {};
|
|
29
|
+
// const currentTurns = sharedData.turns || 0;
|
|
30
|
+
// world.setSharedData({
|
|
31
|
+
// ...sharedData,
|
|
32
|
+
// turns: currentTurns + (data.turnsPassed || 1)
|
|
33
|
+
// });
|
|
34
|
+
// Default: Just advance time
|
|
35
|
+
// Story authors can override to add time-based events
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Handle score_displayed event
|
|
39
|
+
*
|
|
40
|
+
* This event is fired when a player checks their score.
|
|
41
|
+
* Default behavior: No world state changes (display only)
|
|
42
|
+
*
|
|
43
|
+
* Can be overridden to:
|
|
44
|
+
* - Track how often player checks score
|
|
45
|
+
* - Trigger achievements based on score milestones
|
|
46
|
+
* - Update NPC reactions based on player progress
|
|
47
|
+
*/
|
|
48
|
+
function handleScoreDisplayed(event, world) {
|
|
49
|
+
const data = event.data;
|
|
50
|
+
// Default: No state changes
|
|
51
|
+
// This is primarily a display event
|
|
52
|
+
// Could track score checks for analytics
|
|
53
|
+
// TODO: Implement shared data storage in WorldModel
|
|
54
|
+
// const sharedData = world.getSharedData() || {};
|
|
55
|
+
// const scoreChecks = sharedData.scoreChecks || 0;
|
|
56
|
+
// world.setSharedData({
|
|
57
|
+
// ...sharedData,
|
|
58
|
+
// scoreChecks: scoreChecks + 1
|
|
59
|
+
// });
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Handle help_displayed event
|
|
63
|
+
*
|
|
64
|
+
* This event is fired when a player requests help.
|
|
65
|
+
* Default behavior: Mark help as requested in shared data
|
|
66
|
+
*
|
|
67
|
+
* Can be overridden to:
|
|
68
|
+
* - Track which help topics were viewed
|
|
69
|
+
* - Adjust difficulty based on help usage
|
|
70
|
+
* - Provide context-sensitive help
|
|
71
|
+
*/
|
|
72
|
+
function handleHelpDisplayed(event, world) {
|
|
73
|
+
const data = event.data;
|
|
74
|
+
// Mark that help has been requested
|
|
75
|
+
// TODO: Implement shared data storage in WorldModel
|
|
76
|
+
// if (data.firstTime) {
|
|
77
|
+
// const sharedData = world.getSharedData() || {};
|
|
78
|
+
// world.setSharedData({
|
|
79
|
+
// ...sharedData,
|
|
80
|
+
// helpRequested: true,
|
|
81
|
+
// firstHelpTime: Date.now()
|
|
82
|
+
// });
|
|
83
|
+
// }
|
|
84
|
+
// Track help topics if specific help requested
|
|
85
|
+
// if (data.specificHelp && data.topic) {
|
|
86
|
+
// const sharedData = world.getSharedData() || {};
|
|
87
|
+
// const helpTopics = sharedData.helpTopics || [];
|
|
88
|
+
// if (!helpTopics.includes(data.topic)) {
|
|
89
|
+
// helpTopics.push(data.topic);
|
|
90
|
+
// world.setSharedData({
|
|
91
|
+
// ...sharedData,
|
|
92
|
+
// helpTopics
|
|
93
|
+
// });
|
|
94
|
+
// }
|
|
95
|
+
// }
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Handle about_displayed event
|
|
99
|
+
*
|
|
100
|
+
* This event is fired when a player requests game information.
|
|
101
|
+
* Default behavior: Track that about was viewed
|
|
102
|
+
*
|
|
103
|
+
* Can be overridden to:
|
|
104
|
+
* - Unlock easter eggs for viewing credits
|
|
105
|
+
* - Track completion statistics
|
|
106
|
+
*/
|
|
107
|
+
function handleAboutDisplayed(event, world) {
|
|
108
|
+
const data = event.data;
|
|
109
|
+
// Track that about/credits were viewed
|
|
110
|
+
// TODO: Implement shared data storage in WorldModel
|
|
111
|
+
// const sharedData = world.getSharedData() || {};
|
|
112
|
+
// world.setSharedData({
|
|
113
|
+
// ...sharedData,
|
|
114
|
+
// aboutViewed: true,
|
|
115
|
+
// aboutViewedTime: Date.now()
|
|
116
|
+
// });
|
|
117
|
+
// Could unlock an achievement for viewing credits
|
|
118
|
+
// Story authors can override to add easter eggs
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Register all meta action event handlers
|
|
122
|
+
*/
|
|
123
|
+
function registerMetaHandlers(world) {
|
|
124
|
+
world.registerEventHandler('waited', handleWaited);
|
|
125
|
+
world.registerEventHandler('score_displayed', handleScoreDisplayed);
|
|
126
|
+
world.registerEventHandler('help_displayed', handleHelpDisplayed);
|
|
127
|
+
world.registerEventHandler('about_displayed', handleAboutDisplayed);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/handlers/meta.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAgBH,oCAiBC;AAaD,oDAqBC;AAaD,kDAiCC;AAYD,oDAuBC;AAKD,oDAKC;AAzJD;;;;;;;;;;GAUG;AACH,SAAgB,YAAY,CAAC,KAAqB,EAAE,KAAU;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,IAGlB,CAAC;IAEF,sBAAsB;IACtB,oDAAoD;IACpD,kDAAkD;IAClD,8CAA8C;IAC9C,wBAAwB;IACxB,mBAAmB;IACnB,kDAAkD;IAClD,MAAM;IAEN,6BAA6B;IAC7B,sDAAsD;AACxD,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,oBAAoB,CAAC,KAAqB,EAAE,KAAU;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,IAOlB,CAAC;IAEF,4BAA4B;IAC5B,oCAAoC;IAEpC,yCAAyC;IACzC,oDAAoD;IACpD,kDAAkD;IAClD,mDAAmD;IACnD,wBAAwB;IACxB,mBAAmB;IACnB,iCAAiC;IACjC,MAAM;AACR,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,mBAAmB,CAAC,KAAqB,EAAE,KAAU;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,IAOlB,CAAC;IAEF,oCAAoC;IACpC,oDAAoD;IACpD,wBAAwB;IACxB,oDAAoD;IACpD,0BAA0B;IAC1B,qBAAqB;IACrB,2BAA2B;IAC3B,gCAAgC;IAChC,QAAQ;IACR,IAAI;IAEJ,+CAA+C;IAC/C,yCAAyC;IACzC,oDAAoD;IACpD,oDAAoD;IACpD,4CAA4C;IAC5C,mCAAmC;IACnC,4BAA4B;IAC5B,uBAAuB;IACvB,mBAAmB;IACnB,UAAU;IACV,MAAM;IACN,IAAI;AACN,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,oBAAoB,CAAC,KAAqB,EAAE,KAAU;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,IASlB,CAAC;IAEF,uCAAuC;IACvC,oDAAoD;IACpD,kDAAkD;IAClD,wBAAwB;IACxB,mBAAmB;IACnB,uBAAuB;IACvB,gCAAgC;IAChC,MAAM;IAEN,kDAAkD;IAClD,gDAAgD;AAClD,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,KAAiB;IACpD,KAAK,CAAC,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACnD,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;IACpE,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IAClE,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Movement event handlers
|
|
3
|
+
*
|
|
4
|
+
* These handlers apply movement-related events to the world model
|
|
5
|
+
*/
|
|
6
|
+
import { WorldModel, EventHandler } from '@sharpee/world-model';
|
|
7
|
+
/**
|
|
8
|
+
* Handle TAKEN event - move item to actor
|
|
9
|
+
*/
|
|
10
|
+
export declare const handleTaken: EventHandler;
|
|
11
|
+
/**
|
|
12
|
+
* Handle DROPPED event - move item to location
|
|
13
|
+
*/
|
|
14
|
+
export declare const handleDropped: EventHandler;
|
|
15
|
+
/**
|
|
16
|
+
* Handle REMOVED event - remove worn status
|
|
17
|
+
*/
|
|
18
|
+
export declare const handleRemoved: EventHandler;
|
|
19
|
+
/**
|
|
20
|
+
* Handle ACTOR_MOVED event - move actor to new location
|
|
21
|
+
*/
|
|
22
|
+
export declare const handleActorMoved: EventHandler;
|
|
23
|
+
/**
|
|
24
|
+
* Handle PUT_IN event - move item into container
|
|
25
|
+
*/
|
|
26
|
+
export declare const handlePutIn: EventHandler;
|
|
27
|
+
/**
|
|
28
|
+
* Handle PUT_ON event - move item onto supporter
|
|
29
|
+
*/
|
|
30
|
+
export declare const handlePutOn: EventHandler;
|
|
31
|
+
/**
|
|
32
|
+
* Handle REMOVED_FROM event - move item from container to actor
|
|
33
|
+
*/
|
|
34
|
+
export declare const handleRemovedFrom: EventHandler;
|
|
35
|
+
/**
|
|
36
|
+
* Handle ENTERED event - actor enters an object or vehicle
|
|
37
|
+
*/
|
|
38
|
+
export declare const handleEntered: EventHandler;
|
|
39
|
+
/**
|
|
40
|
+
* Handle EXITED event - actor exits an object or vehicle
|
|
41
|
+
*/
|
|
42
|
+
export declare const handleExited: EventHandler;
|
|
43
|
+
/**
|
|
44
|
+
* Handle CLIMBED event - record climbing action (movement handled separately)
|
|
45
|
+
*/
|
|
46
|
+
export declare const handleClimbed: EventHandler;
|
|
47
|
+
/**
|
|
48
|
+
* Register all movement handlers
|
|
49
|
+
*/
|
|
50
|
+
export declare function registerMovementHandlers(world: WorldModel): void;
|
|
51
|
+
//# sourceMappingURL=movement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"movement.d.ts","sourceRoot":"","sources":["../../src/handlers/movement.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAiD,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG/G;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,YAkBzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,YAO3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,YAc3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAiC9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,YAKzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,YAKzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,YAK/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,YAM3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,YAO1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,YAI3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAWhE"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Movement event handlers
|
|
4
|
+
*
|
|
5
|
+
* These handlers apply movement-related events to the world model
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.handleClimbed = exports.handleExited = exports.handleEntered = exports.handleRemovedFrom = exports.handlePutOn = exports.handlePutIn = exports.handleActorMoved = exports.handleRemoved = exports.handleDropped = exports.handleTaken = void 0;
|
|
9
|
+
exports.registerMovementHandlers = registerMovementHandlers;
|
|
10
|
+
const world_model_1 = require("@sharpee/world-model");
|
|
11
|
+
const if_domain_1 = require("@sharpee/if-domain");
|
|
12
|
+
/**
|
|
13
|
+
* Handle TAKEN event - move item to actor
|
|
14
|
+
*/
|
|
15
|
+
const handleTaken = (event, world) => {
|
|
16
|
+
const { actor, target } = event.entities;
|
|
17
|
+
if (actor && target) {
|
|
18
|
+
// Remove worn status if applicable
|
|
19
|
+
const targetEntity = world.getEntity(target);
|
|
20
|
+
if (targetEntity && targetEntity.has(world_model_1.TraitType.WEARABLE)) {
|
|
21
|
+
// Remove worn status if wearable
|
|
22
|
+
world.updateEntity(target, (entity) => {
|
|
23
|
+
const wearableTrait = entity.get(world_model_1.TraitType.WEARABLE);
|
|
24
|
+
if (wearableTrait?.worn) {
|
|
25
|
+
wearableTrait.worn = false;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// Move the item to the actor
|
|
30
|
+
world.moveEntity(target, actor);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.handleTaken = handleTaken;
|
|
34
|
+
/**
|
|
35
|
+
* Handle DROPPED event - move item to location
|
|
36
|
+
*/
|
|
37
|
+
const handleDropped = (event, world) => {
|
|
38
|
+
const { actor, target, location } = event.entities;
|
|
39
|
+
const dropLocation = location || (actor ? world.getLocation(actor) : undefined);
|
|
40
|
+
if (target && dropLocation) {
|
|
41
|
+
world.moveEntity(target, dropLocation);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
exports.handleDropped = handleDropped;
|
|
45
|
+
/**
|
|
46
|
+
* Handle REMOVED event - remove worn status
|
|
47
|
+
*/
|
|
48
|
+
const handleRemoved = (event, world) => {
|
|
49
|
+
const { target } = event.entities;
|
|
50
|
+
if (target) {
|
|
51
|
+
const entity = world.getEntity(target);
|
|
52
|
+
if (entity && entity.has(world_model_1.TraitType.WEARABLE)) {
|
|
53
|
+
// Remove worn status
|
|
54
|
+
world.updateEntity(target, (entity) => {
|
|
55
|
+
const wearableTrait = entity.get(world_model_1.TraitType.WEARABLE);
|
|
56
|
+
if (wearableTrait?.worn) {
|
|
57
|
+
wearableTrait.worn = false;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
exports.handleRemoved = handleRemoved;
|
|
64
|
+
/**
|
|
65
|
+
* Handle ACTOR_MOVED event - move actor to new location
|
|
66
|
+
*/
|
|
67
|
+
const handleActorMoved = (event, world) => {
|
|
68
|
+
const { actor, location } = event.entities;
|
|
69
|
+
if (actor && location) {
|
|
70
|
+
// Mark previous location as visited if it's a room
|
|
71
|
+
const currentLocation = world.getLocation(actor);
|
|
72
|
+
if (currentLocation) {
|
|
73
|
+
const currentRoom = world.getEntity(currentLocation);
|
|
74
|
+
if (currentRoom && currentRoom.has(world_model_1.TraitType.ROOM)) {
|
|
75
|
+
// Mark as visited
|
|
76
|
+
world.updateEntity(currentLocation, (room) => {
|
|
77
|
+
const roomTrait = room.get(world_model_1.TraitType.ROOM);
|
|
78
|
+
if (roomTrait && !roomTrait.visited) {
|
|
79
|
+
roomTrait.visited = true;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Move the actor
|
|
85
|
+
world.moveEntity(actor, location);
|
|
86
|
+
// Mark new location as visited if it's a room
|
|
87
|
+
const newRoom = world.getEntity(location);
|
|
88
|
+
if (newRoom && newRoom.has(world_model_1.TraitType.ROOM)) {
|
|
89
|
+
// Mark new location as visited
|
|
90
|
+
world.updateEntity(location, (room) => {
|
|
91
|
+
const roomTrait = room.get(world_model_1.TraitType.ROOM);
|
|
92
|
+
if (roomTrait && !roomTrait.visited) {
|
|
93
|
+
roomTrait.visited = true;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
exports.handleActorMoved = handleActorMoved;
|
|
100
|
+
/**
|
|
101
|
+
* Handle PUT_IN event - move item into container
|
|
102
|
+
*/
|
|
103
|
+
const handlePutIn = (event, world) => {
|
|
104
|
+
const { target, location } = event.entities;
|
|
105
|
+
if (target && location) {
|
|
106
|
+
world.moveEntity(target, location);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.handlePutIn = handlePutIn;
|
|
110
|
+
/**
|
|
111
|
+
* Handle PUT_ON event - move item onto supporter
|
|
112
|
+
*/
|
|
113
|
+
const handlePutOn = (event, world) => {
|
|
114
|
+
const { target, location } = event.entities;
|
|
115
|
+
if (target && location) {
|
|
116
|
+
world.moveEntity(target, location);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
exports.handlePutOn = handlePutOn;
|
|
120
|
+
/**
|
|
121
|
+
* Handle REMOVED_FROM event - move item from container to actor
|
|
122
|
+
*/
|
|
123
|
+
const handleRemovedFrom = (event, world) => {
|
|
124
|
+
const { actor, target } = event.entities;
|
|
125
|
+
if (actor && target) {
|
|
126
|
+
world.moveEntity(target, actor);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
exports.handleRemovedFrom = handleRemovedFrom;
|
|
130
|
+
/**
|
|
131
|
+
* Handle ENTERED event - actor enters an object or vehicle
|
|
132
|
+
*/
|
|
133
|
+
const handleEntered = (event, world) => {
|
|
134
|
+
const { actor, location } = event.entities;
|
|
135
|
+
if (actor && location) {
|
|
136
|
+
// Move the actor to the new location
|
|
137
|
+
world.moveEntity(actor, location);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
exports.handleEntered = handleEntered;
|
|
141
|
+
/**
|
|
142
|
+
* Handle EXITED event - actor exits an object or vehicle
|
|
143
|
+
*/
|
|
144
|
+
const handleExited = (event, world) => {
|
|
145
|
+
const { actor, location } = event.entities;
|
|
146
|
+
if (actor && location) {
|
|
147
|
+
// Move the actor to the new location
|
|
148
|
+
world.moveEntity(actor, location);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
exports.handleExited = handleExited;
|
|
152
|
+
/**
|
|
153
|
+
* Handle CLIMBED event - record climbing action (movement handled separately)
|
|
154
|
+
*/
|
|
155
|
+
const handleClimbed = (event, world) => {
|
|
156
|
+
// This event is mainly for tracking/logging purposes
|
|
157
|
+
// The actual movement is handled by ENTERED or ACTOR_MOVED events
|
|
158
|
+
// Could be used for achievements, scoring, or special effects
|
|
159
|
+
};
|
|
160
|
+
exports.handleClimbed = handleClimbed;
|
|
161
|
+
/**
|
|
162
|
+
* Register all movement handlers
|
|
163
|
+
*/
|
|
164
|
+
function registerMovementHandlers(world) {
|
|
165
|
+
world.registerEventHandler(if_domain_1.IFEvents.TAKEN, exports.handleTaken);
|
|
166
|
+
world.registerEventHandler(if_domain_1.IFEvents.DROPPED, exports.handleDropped);
|
|
167
|
+
world.registerEventHandler(if_domain_1.IFEvents.REMOVED, exports.handleRemoved);
|
|
168
|
+
world.registerEventHandler(if_domain_1.IFEvents.ACTOR_MOVED, exports.handleActorMoved);
|
|
169
|
+
world.registerEventHandler(if_domain_1.IFEvents.PUT_IN, exports.handlePutIn);
|
|
170
|
+
world.registerEventHandler(if_domain_1.IFEvents.PUT_ON, exports.handlePutOn);
|
|
171
|
+
world.registerEventHandler(if_domain_1.IFEvents.REMOVED_FROM, exports.handleRemovedFrom);
|
|
172
|
+
world.registerEventHandler(if_domain_1.IFEvents.ENTERED, exports.handleEntered);
|
|
173
|
+
world.registerEventHandler(if_domain_1.IFEvents.EXITED, exports.handleExited);
|
|
174
|
+
world.registerEventHandler(if_domain_1.IFEvents.CLIMBED, exports.handleClimbed);
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=movement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"movement.js","sourceRoot":"","sources":["../../src/handlers/movement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/handlers/observation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Observation event handlers module
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./observation-handlers"), exports);
|
|
21
|
+
__exportStar(require("./sensory"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/observation/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,yDAAuC;AACvC,4CAA0B"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handle player.checked_inventory event
|
|
3
|
+
*
|
|
4
|
+
* This event is fired when a player checks their inventory.
|
|
5
|
+
* This is an observable action - NPCs can see the player checking pockets/bags.
|
|
6
|
+
* Default behavior: No world state changes
|
|
7
|
+
*
|
|
8
|
+
* Can be overridden to:
|
|
9
|
+
* - Trigger NPC comments about the player's behavior
|
|
10
|
+
* - Track how often the player checks inventory
|
|
11
|
+
* - Reveal pickpocket attempts when player notices missing items
|
|
12
|
+
*/
|
|
13
|
+
export declare function handlePlayerCheckedInventory(event: ISemanticEvent, world: any): void;
|
|
14
|
+
/**
|
|
15
|
+
* Handle player.inventory_empty event
|
|
16
|
+
*
|
|
17
|
+
* This event is fired when a player checks inventory and it's empty.
|
|
18
|
+
* Default behavior: No world state changes
|
|
19
|
+
*
|
|
20
|
+
* Can be overridden to:
|
|
21
|
+
* - Trigger NPC sympathy or mockery
|
|
22
|
+
* - Reveal hidden items in desperate situations
|
|
23
|
+
* - Track story progress (player has given away everything)
|
|
24
|
+
*/
|
|
25
|
+
export declare function handlePlayerInventoryEmpty(event: ISemanticEvent, world: any): void;
|
|
26
|
+
/**
|
|
27
|
+
* Handle text.inventory_list event
|
|
28
|
+
*
|
|
29
|
+
* This event requests the inventory contents be displayed.
|
|
30
|
+
* Default behavior: No world state changes
|
|
31
|
+
*
|
|
32
|
+
* Can be overridden to:
|
|
33
|
+
* - Track which items the player knows they have
|
|
34
|
+
* - Update item descriptions based on inventory context
|
|
35
|
+
*/
|
|
36
|
+
export declare function handleTextInventoryList(event: ISemanticEvent, world: any): void;
|
|
37
|
+
/**
|
|
38
|
+
* Observation event handlers
|
|
39
|
+
*
|
|
40
|
+
* Handles events related to looking, examining, and other observation actions
|
|
41
|
+
*/
|
|
42
|
+
import { ISemanticEvent } from '@sharpee/core';
|
|
43
|
+
import { WorldModel } from '@sharpee/world-model';
|
|
44
|
+
/**
|
|
45
|
+
* Handle player.looked event
|
|
46
|
+
*
|
|
47
|
+
* This event is fired when a player looks around their current location.
|
|
48
|
+
* Default behavior: No world state changes
|
|
49
|
+
*
|
|
50
|
+
* Can be overridden to:
|
|
51
|
+
* - Trigger NPC reactions (e.g., NPC notices player looking around)
|
|
52
|
+
* - Update room states (e.g., reveal hidden items after first look)
|
|
53
|
+
* - Track player behavior for adaptive storytelling
|
|
54
|
+
*/
|
|
55
|
+
export declare function handlePlayerLooked(event: ISemanticEvent, world: any): void;
|
|
56
|
+
/**
|
|
57
|
+
* Handle player.examined event
|
|
58
|
+
*
|
|
59
|
+
* This event is fired when a player examines a specific entity.
|
|
60
|
+
* Default behavior: No world state changes
|
|
61
|
+
*
|
|
62
|
+
* Can be overridden to:
|
|
63
|
+
* - Mark items as "seen" or "known"
|
|
64
|
+
* - Trigger NPC reactions to being examined
|
|
65
|
+
* - Reveal hidden properties after examination
|
|
66
|
+
* - Update player knowledge/memory
|
|
67
|
+
*/
|
|
68
|
+
export declare function handlePlayerExamined(event: ISemanticEvent, world: any): void;
|
|
69
|
+
/**
|
|
70
|
+
* Handle text.room_description event
|
|
71
|
+
*
|
|
72
|
+
* This event requests a room description be displayed.
|
|
73
|
+
* Default behavior: No world state changes
|
|
74
|
+
*
|
|
75
|
+
* Can be overridden to:
|
|
76
|
+
* - Track which rooms have been described
|
|
77
|
+
* - Update room state after description (e.g., mark as visited)
|
|
78
|
+
* - Trigger timed events after entering a room
|
|
79
|
+
*/
|
|
80
|
+
export declare function handleTextRoomDescription(event: ISemanticEvent, world: any): void;
|
|
81
|
+
/**
|
|
82
|
+
* Handle text.list_contents event
|
|
83
|
+
*
|
|
84
|
+
* This event requests a list of visible contents be displayed.
|
|
85
|
+
* Default behavior: No world state changes
|
|
86
|
+
*
|
|
87
|
+
* Can be overridden to:
|
|
88
|
+
* - Track what items the player has noticed
|
|
89
|
+
* - Update item states when listed
|
|
90
|
+
*/
|
|
91
|
+
export declare function handleTextListContents(event: ISemanticEvent, world: any): void;
|
|
92
|
+
/**
|
|
93
|
+
* Register all observation-related event handlers
|
|
94
|
+
*/
|
|
95
|
+
export declare function registerObservationHandlers(world: WorldModel): void;
|
|
96
|
+
//# sourceMappingURL=observation-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observation-handlers.d.ts","sourceRoot":"","sources":["../../../src/handlers/observation/observation-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAqBpF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAQlF;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAW/E;AAED;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAyB1E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAS5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CASjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAS9E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAWnE"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handlePlayerCheckedInventory = handlePlayerCheckedInventory;
|
|
4
|
+
exports.handlePlayerInventoryEmpty = handlePlayerInventoryEmpty;
|
|
5
|
+
exports.handleTextInventoryList = handleTextInventoryList;
|
|
6
|
+
exports.handlePlayerLooked = handlePlayerLooked;
|
|
7
|
+
exports.handlePlayerExamined = handlePlayerExamined;
|
|
8
|
+
exports.handleTextRoomDescription = handleTextRoomDescription;
|
|
9
|
+
exports.handleTextListContents = handleTextListContents;
|
|
10
|
+
exports.registerObservationHandlers = registerObservationHandlers;
|
|
11
|
+
/**
|
|
12
|
+
* Handle player.checked_inventory event
|
|
13
|
+
*
|
|
14
|
+
* This event is fired when a player checks their inventory.
|
|
15
|
+
* This is an observable action - NPCs can see the player checking pockets/bags.
|
|
16
|
+
* Default behavior: No world state changes
|
|
17
|
+
*
|
|
18
|
+
* Can be overridden to:
|
|
19
|
+
* - Trigger NPC comments about the player's behavior
|
|
20
|
+
* - Track how often the player checks inventory
|
|
21
|
+
* - Reveal pickpocket attempts when player notices missing items
|
|
22
|
+
*/
|
|
23
|
+
function handlePlayerCheckedInventory(event, world) {
|
|
24
|
+
const data = event.data;
|
|
25
|
+
// Default: No state changes
|
|
26
|
+
// Story authors can override to add NPC reactions
|
|
27
|
+
// Example Floyd reaction:
|
|
28
|
+
// const npcs = world.getContents(data.locationId)
|
|
29
|
+
// .filter(e => e.has('ACTOR') && e.id === 'floyd');
|
|
30
|
+
//
|
|
31
|
+
// if (npcs.length > 0 && Math.random() > 0.7) {
|
|
32
|
+
// world.applyEvent(createEvent('text.npc_comment', {
|
|
33
|
+
// npcId: 'floyd',
|
|
34
|
+
// text: 'Floyd remarks, "You spend a lot of time playing pocket pool."',
|
|
35
|
+
// timestamp: Date.now()
|
|
36
|
+
// }));
|
|
37
|
+
// }
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Handle player.inventory_empty event
|
|
41
|
+
*
|
|
42
|
+
* This event is fired when a player checks inventory and it's empty.
|
|
43
|
+
* Default behavior: No world state changes
|
|
44
|
+
*
|
|
45
|
+
* Can be overridden to:
|
|
46
|
+
* - Trigger NPC sympathy or mockery
|
|
47
|
+
* - Reveal hidden items in desperate situations
|
|
48
|
+
* - Track story progress (player has given away everything)
|
|
49
|
+
*/
|
|
50
|
+
function handlePlayerInventoryEmpty(event, world) {
|
|
51
|
+
const data = event.data;
|
|
52
|
+
// Default: No state changes
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Handle text.inventory_list event
|
|
56
|
+
*
|
|
57
|
+
* This event requests the inventory contents be displayed.
|
|
58
|
+
* Default behavior: No world state changes
|
|
59
|
+
*
|
|
60
|
+
* Can be overridden to:
|
|
61
|
+
* - Track which items the player knows they have
|
|
62
|
+
* - Update item descriptions based on inventory context
|
|
63
|
+
*/
|
|
64
|
+
function handleTextInventoryList(event, world) {
|
|
65
|
+
const data = event.data;
|
|
66
|
+
// Default: No state changes
|
|
67
|
+
// This is primarily a text output event
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Handle player.looked event
|
|
71
|
+
*
|
|
72
|
+
* This event is fired when a player looks around their current location.
|
|
73
|
+
* Default behavior: No world state changes
|
|
74
|
+
*
|
|
75
|
+
* Can be overridden to:
|
|
76
|
+
* - Trigger NPC reactions (e.g., NPC notices player looking around)
|
|
77
|
+
* - Update room states (e.g., reveal hidden items after first look)
|
|
78
|
+
* - Track player behavior for adaptive storytelling
|
|
79
|
+
*/
|
|
80
|
+
function handlePlayerLooked(event, world) {
|
|
81
|
+
const data = event.data;
|
|
82
|
+
// Default: No state changes
|
|
83
|
+
// Story authors can override to add reactions
|
|
84
|
+
// Example of what a story might do:
|
|
85
|
+
// const location = world.getEntity(data.locationId);
|
|
86
|
+
// const npcsInRoom = world.getContents(data.locationId)
|
|
87
|
+
// .filter(e => e.has('ACTOR') && !e.has('PLAYER'));
|
|
88
|
+
//
|
|
89
|
+
// for (const npc of npcsInRoom) {
|
|
90
|
+
// if (npc.get('EMOTIONAL_STATE')?.mood === 'nervous') {
|
|
91
|
+
// // NPC gets startled when player looks around
|
|
92
|
+
// world.applyEvent(createEvent('npc.startled', {
|
|
93
|
+
// npcId: npc.id,
|
|
94
|
+
// cause: 'player_looked',
|
|
95
|
+
// timestamp: Date.now()
|
|
96
|
+
// }));
|
|
97
|
+
// }
|
|
98
|
+
// }
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Handle player.examined event
|
|
102
|
+
*
|
|
103
|
+
* This event is fired when a player examines a specific entity.
|
|
104
|
+
* Default behavior: No world state changes
|
|
105
|
+
*
|
|
106
|
+
* Can be overridden to:
|
|
107
|
+
* - Mark items as "seen" or "known"
|
|
108
|
+
* - Trigger NPC reactions to being examined
|
|
109
|
+
* - Reveal hidden properties after examination
|
|
110
|
+
* - Update player knowledge/memory
|
|
111
|
+
*/
|
|
112
|
+
function handlePlayerExamined(event, world) {
|
|
113
|
+
const data = event.data;
|
|
114
|
+
// Default: No state changes
|
|
115
|
+
// Story authors can override to add reactions
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Handle text.room_description event
|
|
119
|
+
*
|
|
120
|
+
* This event requests a room description be displayed.
|
|
121
|
+
* Default behavior: No world state changes
|
|
122
|
+
*
|
|
123
|
+
* Can be overridden to:
|
|
124
|
+
* - Track which rooms have been described
|
|
125
|
+
* - Update room state after description (e.g., mark as visited)
|
|
126
|
+
* - Trigger timed events after entering a room
|
|
127
|
+
*/
|
|
128
|
+
function handleTextRoomDescription(event, world) {
|
|
129
|
+
const data = event.data;
|
|
130
|
+
// Default: No state changes
|
|
131
|
+
// This is primarily a text output event
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Handle text.list_contents event
|
|
135
|
+
*
|
|
136
|
+
* This event requests a list of visible contents be displayed.
|
|
137
|
+
* Default behavior: No world state changes
|
|
138
|
+
*
|
|
139
|
+
* Can be overridden to:
|
|
140
|
+
* - Track what items the player has noticed
|
|
141
|
+
* - Update item states when listed
|
|
142
|
+
*/
|
|
143
|
+
function handleTextListContents(event, world) {
|
|
144
|
+
const data = event.data;
|
|
145
|
+
// Default: No state changes
|
|
146
|
+
// This is primarily a text output event
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Register all observation-related event handlers
|
|
150
|
+
*/
|
|
151
|
+
function registerObservationHandlers(world) {
|
|
152
|
+
// Looking handlers
|
|
153
|
+
world.registerEventHandler('player.looked', handlePlayerLooked);
|
|
154
|
+
world.registerEventHandler('player.examined', handlePlayerExamined);
|
|
155
|
+
world.registerEventHandler('text.room_description', handleTextRoomDescription);
|
|
156
|
+
world.registerEventHandler('text.list_contents', handleTextListContents);
|
|
157
|
+
// Inventory handlers
|
|
158
|
+
world.registerEventHandler('player.checked_inventory', handlePlayerCheckedInventory);
|
|
159
|
+
world.registerEventHandler('player.inventory_empty', handlePlayerInventoryEmpty);
|
|
160
|
+
world.registerEventHandler('text.inventory_list', handleTextInventoryList);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=observation-handlers.js.map
|