@sharpee/event-processor 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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -0
  3. package/dist/effects/effect-processor.d.ts +50 -0
  4. package/dist/effects/effect-processor.d.ts.map +1 -0
  5. package/dist/effects/effect-processor.js +255 -0
  6. package/dist/effects/effect-processor.js.map +1 -0
  7. package/dist/effects/index.d.ts +10 -0
  8. package/dist/effects/index.d.ts.map +1 -0
  9. package/dist/effects/index.js +29 -0
  10. package/dist/effects/index.js.map +1 -0
  11. package/dist/effects/types.d.ts +119 -0
  12. package/dist/effects/types.d.ts.map +1 -0
  13. package/dist/effects/types.js +9 -0
  14. package/dist/effects/types.js.map +1 -0
  15. package/dist/effects/world-query.d.ts +70 -0
  16. package/dist/effects/world-query.d.ts.map +1 -0
  17. package/dist/effects/world-query.js +34 -0
  18. package/dist/effects/world-query.js.map +1 -0
  19. package/dist/handler-types.d.ts +67 -0
  20. package/dist/handler-types.d.ts.map +1 -0
  21. package/dist/handler-types.js +8 -0
  22. package/dist/handler-types.js.map +1 -0
  23. package/dist/handlers/complex-manipulation.d.ts +31 -0
  24. package/dist/handlers/complex-manipulation.d.ts.map +1 -0
  25. package/dist/handlers/complex-manipulation.js +87 -0
  26. package/dist/handlers/complex-manipulation.js.map +1 -0
  27. package/dist/handlers/device/index.d.ts +28 -0
  28. package/dist/handlers/device/index.d.ts.map +1 -0
  29. package/dist/handlers/device/index.js +172 -0
  30. package/dist/handlers/device/index.js.map +1 -0
  31. package/dist/handlers/index.d.ts +17 -0
  32. package/dist/handlers/index.d.ts.map +1 -0
  33. package/dist/handlers/index.js +48 -0
  34. package/dist/handlers/index.js.map +1 -0
  35. package/dist/handlers/meta.d.ts +59 -0
  36. package/dist/handlers/meta.d.ts.map +1 -0
  37. package/dist/handlers/meta.js +129 -0
  38. package/dist/handlers/meta.js.map +1 -0
  39. package/dist/handlers/movement.d.ts +51 -0
  40. package/dist/handlers/movement.d.ts.map +1 -0
  41. package/dist/handlers/movement.js +176 -0
  42. package/dist/handlers/movement.js.map +1 -0
  43. package/dist/handlers/observation/index.d.ts +6 -0
  44. package/dist/handlers/observation/index.d.ts.map +1 -0
  45. package/dist/handlers/observation/index.js +22 -0
  46. package/dist/handlers/observation/index.js.map +1 -0
  47. package/dist/handlers/observation/observation-handlers.d.ts +96 -0
  48. package/dist/handlers/observation/observation-handlers.d.ts.map +1 -0
  49. package/dist/handlers/observation/observation-handlers.js +162 -0
  50. package/dist/handlers/observation/observation-handlers.js.map +1 -0
  51. package/dist/handlers/observation/sensory.d.ts +29 -0
  52. package/dist/handlers/observation/sensory.d.ts.map +1 -0
  53. package/dist/handlers/observation/sensory.js +77 -0
  54. package/dist/handlers/observation/sensory.js.map +1 -0
  55. package/dist/handlers/state-change.d.ts +47 -0
  56. package/dist/handlers/state-change.d.ts.map +1 -0
  57. package/dist/handlers/state-change.js +166 -0
  58. package/dist/handlers/state-change.js.map +1 -0
  59. package/dist/index.d.ts +14 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +32 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/processor.d.ts +62 -0
  64. package/dist/processor.d.ts.map +1 -0
  65. package/dist/processor.js +332 -0
  66. package/dist/processor.js.map +1 -0
  67. package/dist/types.d.ts +6 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +6 -0
  70. package/dist/types.js.map +1 -0
  71. package/package.json +40 -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,6 @@
1
+ /**
2
+ * Observation event handlers module
3
+ */
4
+ export * from './observation-handlers';
5
+ export * from './sensory';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -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