@sharpee/engine 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/LICENSE +21 -0
- package/README.md +328 -0
- package/dist/action-context-factory.d.ts +11 -0
- package/dist/action-context-factory.d.ts.map +1 -0
- package/dist/action-context-factory.js +258 -0
- package/dist/action-context-factory.js.map +1 -0
- package/dist/capability-dispatch-helper.d.ts +106 -0
- package/dist/capability-dispatch-helper.d.ts.map +1 -0
- package/dist/capability-dispatch-helper.js +269 -0
- package/dist/capability-dispatch-helper.js.map +1 -0
- package/dist/command-executor.d.ts +53 -0
- package/dist/command-executor.d.ts.map +1 -0
- package/dist/command-executor.js +329 -0
- package/dist/command-executor.js.map +1 -0
- package/dist/event-adapter.d.ts +44 -0
- package/dist/event-adapter.d.ts.map +1 -0
- package/dist/event-adapter.js +127 -0
- package/dist/event-adapter.js.map +1 -0
- package/dist/event-sequencer.d.ts +73 -0
- package/dist/event-sequencer.d.ts.map +1 -0
- package/dist/event-sequencer.js +134 -0
- package/dist/event-sequencer.js.map +1 -0
- package/dist/events/event-emitter.d.ts +34 -0
- package/dist/events/event-emitter.d.ts.map +1 -0
- package/dist/events/event-emitter.js +67 -0
- package/dist/events/event-emitter.js.map +1 -0
- package/dist/game-engine.d.ts +292 -0
- package/dist/game-engine.d.ts.map +1 -0
- package/dist/game-engine.js +1631 -0
- package/dist/game-engine.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/narrative/index.d.ts +5 -0
- package/dist/narrative/index.d.ts.map +1 -0
- package/dist/narrative/index.js +10 -0
- package/dist/narrative/index.js.map +1 -0
- package/dist/narrative/narrative-settings.d.ts +73 -0
- package/dist/narrative/narrative-settings.d.ts.map +1 -0
- package/dist/narrative/narrative-settings.js +28 -0
- package/dist/narrative/narrative-settings.js.map +1 -0
- package/dist/parser-interface.d.ts +77 -0
- package/dist/parser-interface.d.ts.map +1 -0
- package/dist/parser-interface.js +48 -0
- package/dist/parser-interface.js.map +1 -0
- package/dist/platform-operations.d.ts +83 -0
- package/dist/platform-operations.d.ts.map +1 -0
- package/dist/platform-operations.js +218 -0
- package/dist/platform-operations.js.map +1 -0
- package/dist/save-restore-service.d.ts +133 -0
- package/dist/save-restore-service.d.ts.map +1 -0
- package/dist/save-restore-service.js +446 -0
- package/dist/save-restore-service.js.map +1 -0
- package/dist/scheduler/index.d.ts +9 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +25 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/scheduler-service.d.ts +75 -0
- package/dist/scheduler/scheduler-service.d.ts.map +1 -0
- package/dist/scheduler/scheduler-service.js +310 -0
- package/dist/scheduler/scheduler-service.js.map +1 -0
- package/dist/scheduler/seeded-random.d.ts +7 -0
- package/dist/scheduler/seeded-random.d.ts.map +1 -0
- package/dist/scheduler/seeded-random.js +11 -0
- package/dist/scheduler/seeded-random.js.map +1 -0
- package/dist/scheduler/types.d.ts +134 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +9 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/shared-data-keys.d.ts +53 -0
- package/dist/shared-data-keys.d.ts.map +1 -0
- package/dist/shared-data-keys.js +29 -0
- package/dist/shared-data-keys.js.map +1 -0
- package/dist/story.d.ts +211 -0
- package/dist/story.d.ts.map +1 -0
- package/dist/story.js +60 -0
- package/dist/story.js.map +1 -0
- package/dist/test-helpers/mock-text-service.d.ts +11 -0
- package/dist/test-helpers/mock-text-service.d.ts.map +1 -0
- package/dist/test-helpers/mock-text-service.js +47 -0
- package/dist/test-helpers/mock-text-service.js.map +1 -0
- package/dist/turn-event-processor.d.ts +89 -0
- package/dist/turn-event-processor.d.ts.map +1 -0
- package/dist/turn-event-processor.js +144 -0
- package/dist/turn-event-processor.js.map +1 -0
- package/dist/types.d.ts +214 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/vocabulary-manager.d.ts +35 -0
- package/dist/vocabulary-manager.d.ts.map +1 -0
- package/dist/vocabulary-manager.js +74 -0
- package/dist/vocabulary-manager.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Event Sequencer - Manages event ordering within turns
|
|
4
|
+
*
|
|
5
|
+
* Ensures all events have proper sequence numbers for ordering
|
|
6
|
+
* and grouping within a turn.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.eventSequencer = exports.EventSequenceUtils = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* Event sequencer class
|
|
12
|
+
*/
|
|
13
|
+
class EventSequencer {
|
|
14
|
+
counter = Date.now();
|
|
15
|
+
/**
|
|
16
|
+
* Get next sequence number
|
|
17
|
+
*/
|
|
18
|
+
next() {
|
|
19
|
+
return ++this.counter;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Reset turn counter (optional, for testing)
|
|
23
|
+
*/
|
|
24
|
+
resetTurn(turn) {
|
|
25
|
+
// No-op in this implementation
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Sequence a single event
|
|
29
|
+
*/
|
|
30
|
+
sequence(event, turn) {
|
|
31
|
+
return {
|
|
32
|
+
...event,
|
|
33
|
+
sequence: this.next(),
|
|
34
|
+
timestamp: new Date(),
|
|
35
|
+
turn,
|
|
36
|
+
scope: 'turn'
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Sequence multiple events
|
|
41
|
+
*/
|
|
42
|
+
sequenceAll(events, turn) {
|
|
43
|
+
return events.map(event => this.sequence(event, turn));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Event sequence utilities
|
|
48
|
+
*/
|
|
49
|
+
class EventSequenceUtils {
|
|
50
|
+
/**
|
|
51
|
+
* Sort events by sequence number
|
|
52
|
+
*/
|
|
53
|
+
static sort(events) {
|
|
54
|
+
return [...events].sort((a, b) => a.sequence - b.sequence);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Filter events by type
|
|
58
|
+
*/
|
|
59
|
+
static filterByType(events, type) {
|
|
60
|
+
return events.filter(e => e.type === type);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Filter events by turn
|
|
64
|
+
*/
|
|
65
|
+
static filterByTurn(events, turn) {
|
|
66
|
+
return events.filter(e => e.turn === turn);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Filter events by scope
|
|
70
|
+
*/
|
|
71
|
+
static filterByScope(events, scope) {
|
|
72
|
+
return events.filter(e => e.scope === scope);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Group events by type
|
|
76
|
+
*/
|
|
77
|
+
static groupByType(events) {
|
|
78
|
+
const groups = {};
|
|
79
|
+
for (const event of events) {
|
|
80
|
+
if (!groups[event.type]) {
|
|
81
|
+
groups[event.type] = [];
|
|
82
|
+
}
|
|
83
|
+
groups[event.type].push(event);
|
|
84
|
+
}
|
|
85
|
+
return groups;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Group events by turn
|
|
89
|
+
*/
|
|
90
|
+
static groupByTurn(events) {
|
|
91
|
+
const groups = {};
|
|
92
|
+
for (const event of events) {
|
|
93
|
+
if (!groups[event.turn]) {
|
|
94
|
+
groups[event.turn] = [];
|
|
95
|
+
}
|
|
96
|
+
groups[event.turn].push(event);
|
|
97
|
+
}
|
|
98
|
+
return groups;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get latest event by type
|
|
102
|
+
*/
|
|
103
|
+
static getLatestByType(events, type) {
|
|
104
|
+
const filtered = this.filterByType(events, type);
|
|
105
|
+
if (filtered.length === 0)
|
|
106
|
+
return undefined;
|
|
107
|
+
return filtered.reduce((latest, current) => current.sequence > latest.sequence ? current : latest);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Count events by type
|
|
111
|
+
*/
|
|
112
|
+
static countByType(events) {
|
|
113
|
+
const counts = {};
|
|
114
|
+
for (const event of events) {
|
|
115
|
+
counts[event.type] = (counts[event.type] || 0) + 1;
|
|
116
|
+
}
|
|
117
|
+
return counts;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get events in sequence range
|
|
121
|
+
*/
|
|
122
|
+
static getInRange(events, start, end, inclusive = true) {
|
|
123
|
+
if (inclusive) {
|
|
124
|
+
return events.filter(e => e.sequence >= start && e.sequence <= end);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
return events.filter(e => e.sequence > start && e.sequence < end);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.EventSequenceUtils = EventSequenceUtils;
|
|
132
|
+
// Export singleton instance
|
|
133
|
+
exports.eventSequencer = new EventSequencer();
|
|
134
|
+
//# sourceMappingURL=event-sequencer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-sequencer.js","sourceRoot":"","sources":["../src/event-sequencer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event emitter for managing game events
|
|
3
|
+
*/
|
|
4
|
+
import { ISemanticEvent } from '@sharpee/core';
|
|
5
|
+
import { IGameEvent, SimpleEventHandler } from '@sharpee/world-model';
|
|
6
|
+
/**
|
|
7
|
+
* Simple event emitter for the game event system
|
|
8
|
+
* Used for story-level event handlers (daemons)
|
|
9
|
+
*/
|
|
10
|
+
export declare class EventEmitter {
|
|
11
|
+
private handlers;
|
|
12
|
+
/**
|
|
13
|
+
* Register a handler for an event type
|
|
14
|
+
*/
|
|
15
|
+
on(eventType: string, handler: SimpleEventHandler): void;
|
|
16
|
+
/**
|
|
17
|
+
* Remove a handler for an event type
|
|
18
|
+
*/
|
|
19
|
+
off(eventType: string, handler: SimpleEventHandler): void;
|
|
20
|
+
/**
|
|
21
|
+
* Emit an event to all registered handlers
|
|
22
|
+
* Returns any semantic events generated by handlers
|
|
23
|
+
*/
|
|
24
|
+
emit(event: IGameEvent): ISemanticEvent[];
|
|
25
|
+
/**
|
|
26
|
+
* Clear all handlers for a specific event type
|
|
27
|
+
*/
|
|
28
|
+
clear(eventType?: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get count of handlers for an event type
|
|
31
|
+
*/
|
|
32
|
+
listenerCount(eventType: string): number;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=event-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEtE;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAgD;IAEhE;;OAEG;IACH,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAMxD;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAUzD;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,EAAE;IAczC;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ/B;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAGzC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Event emitter for managing game events
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EventEmitter = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Simple event emitter for the game event system
|
|
9
|
+
* Used for story-level event handlers (daemons)
|
|
10
|
+
*/
|
|
11
|
+
class EventEmitter {
|
|
12
|
+
handlers = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Register a handler for an event type
|
|
15
|
+
*/
|
|
16
|
+
on(eventType, handler) {
|
|
17
|
+
const handlers = this.handlers.get(eventType) || [];
|
|
18
|
+
handlers.push(handler);
|
|
19
|
+
this.handlers.set(eventType, handlers);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Remove a handler for an event type
|
|
23
|
+
*/
|
|
24
|
+
off(eventType, handler) {
|
|
25
|
+
const handlers = this.handlers.get(eventType);
|
|
26
|
+
if (handlers) {
|
|
27
|
+
const index = handlers.indexOf(handler);
|
|
28
|
+
if (index !== -1) {
|
|
29
|
+
handlers.splice(index, 1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Emit an event to all registered handlers
|
|
35
|
+
* Returns any semantic events generated by handlers
|
|
36
|
+
*/
|
|
37
|
+
emit(event) {
|
|
38
|
+
const results = [];
|
|
39
|
+
const handlers = this.handlers.get(event.type) || [];
|
|
40
|
+
for (const handler of handlers) {
|
|
41
|
+
const result = handler(event);
|
|
42
|
+
if (result) {
|
|
43
|
+
results.push(...result);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return results;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Clear all handlers for a specific event type
|
|
50
|
+
*/
|
|
51
|
+
clear(eventType) {
|
|
52
|
+
if (eventType) {
|
|
53
|
+
this.handlers.delete(eventType);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.handlers.clear();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get count of handlers for an event type
|
|
61
|
+
*/
|
|
62
|
+
listenerCount(eventType) {
|
|
63
|
+
return this.handlers.get(eventType)?.length || 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.EventEmitter = EventEmitter;
|
|
67
|
+
//# sourceMappingURL=event-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH;;;GAGG;AACH,MAAa,YAAY;IACf,QAAQ,GAAsC,IAAI,GAAG,EAAE,CAAC;IAEhE;;OAEG;IACH,EAAE,CAAC,SAAiB,EAAE,OAA2B;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,SAAiB,EAAE,OAA2B;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,KAAiB;QACpB,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAErD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAkB;QACtB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IACnD,CAAC;CACF;AA5DD,oCA4DC"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Game Engine - Main runtime for Sharpee IF games
|
|
3
|
+
*
|
|
4
|
+
* Manages game state, turn execution, and coordinates all subsystems
|
|
5
|
+
*/
|
|
6
|
+
import { WorldModel, IFEntity } from '@sharpee/world-model';
|
|
7
|
+
import { EventProcessor } from '@sharpee/event-processor';
|
|
8
|
+
import { Parser, IPerceptionService } from '@sharpee/stdlib';
|
|
9
|
+
import { LanguageProvider } from '@sharpee/if-domain';
|
|
10
|
+
import { ITextService } from '@sharpee/text-service';
|
|
11
|
+
import { ISemanticEvent, ISaveRestoreHooks, ISemanticEventSource } from '@sharpee/core';
|
|
12
|
+
import { ISchedulerService } from './scheduler';
|
|
13
|
+
import { INpcService } from '@sharpee/stdlib';
|
|
14
|
+
import { GameContext, TurnResult, EngineConfig, SequencedEvent } from './types';
|
|
15
|
+
import { Story } from './story';
|
|
16
|
+
import { NarrativeSettings } from './narrative';
|
|
17
|
+
import { ParsedCommandTransformer } from './command-executor';
|
|
18
|
+
/**
|
|
19
|
+
* Game engine events
|
|
20
|
+
*/
|
|
21
|
+
export interface GameEngineEvents {
|
|
22
|
+
'turn:start': (turn: number, input: string) => void;
|
|
23
|
+
'turn:complete': (result: TurnResult) => void;
|
|
24
|
+
'turn:failed': (error: Error, turn: number) => void;
|
|
25
|
+
'event': (event: SequencedEvent) => void;
|
|
26
|
+
'state:changed': (context: GameContext) => void;
|
|
27
|
+
'game:over': (context: GameContext) => void;
|
|
28
|
+
'text:output': (text: string, turn: number) => void;
|
|
29
|
+
'text:channel': (channel: string, text: string, turn: number) => void;
|
|
30
|
+
}
|
|
31
|
+
type GameEngineEventName = keyof GameEngineEvents;
|
|
32
|
+
type GameEngineEventListener<K extends GameEngineEventName> = GameEngineEvents[K];
|
|
33
|
+
/**
|
|
34
|
+
* Main game engine
|
|
35
|
+
*/
|
|
36
|
+
export declare class GameEngine {
|
|
37
|
+
private world;
|
|
38
|
+
private sessionStartTime?;
|
|
39
|
+
private sessionTurns;
|
|
40
|
+
private sessionMoves;
|
|
41
|
+
private context;
|
|
42
|
+
private config;
|
|
43
|
+
private commandExecutor;
|
|
44
|
+
private eventProcessor;
|
|
45
|
+
private platformEvents;
|
|
46
|
+
private actionRegistry;
|
|
47
|
+
private textService?;
|
|
48
|
+
private turnEvents;
|
|
49
|
+
private running;
|
|
50
|
+
private story?;
|
|
51
|
+
private languageProvider?;
|
|
52
|
+
private parser?;
|
|
53
|
+
private eventListeners;
|
|
54
|
+
private saveRestoreHooks?;
|
|
55
|
+
private eventSource;
|
|
56
|
+
private systemEventSource;
|
|
57
|
+
private pendingPlatformOps;
|
|
58
|
+
private perceptionService?;
|
|
59
|
+
private scheduler;
|
|
60
|
+
private npcService;
|
|
61
|
+
private narrativeSettings;
|
|
62
|
+
private vocabularyManager;
|
|
63
|
+
private saveRestoreService;
|
|
64
|
+
private turnEventProcessor;
|
|
65
|
+
private platformOpHandler?;
|
|
66
|
+
private hasEmittedInitialized;
|
|
67
|
+
constructor(options: {
|
|
68
|
+
world: WorldModel;
|
|
69
|
+
player: IFEntity;
|
|
70
|
+
parser: Parser;
|
|
71
|
+
language: LanguageProvider;
|
|
72
|
+
perceptionService?: IPerceptionService;
|
|
73
|
+
config?: EngineConfig;
|
|
74
|
+
});
|
|
75
|
+
/**
|
|
76
|
+
* Set the story for this engine
|
|
77
|
+
*/
|
|
78
|
+
setStory(story: Story): void;
|
|
79
|
+
/**
|
|
80
|
+
* Get the current parser
|
|
81
|
+
*/
|
|
82
|
+
getParser(): Parser | undefined;
|
|
83
|
+
/**
|
|
84
|
+
* Get the current language provider
|
|
85
|
+
*/
|
|
86
|
+
getLanguageProvider(): LanguageProvider | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Start the game engine
|
|
89
|
+
*/
|
|
90
|
+
start(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Stop the game engine
|
|
93
|
+
*/
|
|
94
|
+
stop(reason?: 'quit' | 'victory' | 'defeat' | 'abort', details?: any): void;
|
|
95
|
+
/**
|
|
96
|
+
* Execute a turn
|
|
97
|
+
*/
|
|
98
|
+
executeTurn(input: string): Promise<TurnResult>;
|
|
99
|
+
/**
|
|
100
|
+
* Execute a meta-command (VERSION, SCORE, HELP, etc.)
|
|
101
|
+
*
|
|
102
|
+
* Meta-commands operate outside the turn cycle:
|
|
103
|
+
* - They don't increment turns
|
|
104
|
+
* - They don't trigger NPC ticks or scheduler
|
|
105
|
+
* - They don't create undo snapshots
|
|
106
|
+
* - They don't get stored in command history
|
|
107
|
+
* - Events are processed immediately through text service (not stored in turnEvents)
|
|
108
|
+
*
|
|
109
|
+
* @param input - Raw command string
|
|
110
|
+
* @param parsedCommand - Parsed command from parser
|
|
111
|
+
* @returns MetaCommandResult with events and success status
|
|
112
|
+
*/
|
|
113
|
+
private executeMetaCommand;
|
|
114
|
+
/**
|
|
115
|
+
* Process meta-command events: text service → emit to clients
|
|
116
|
+
*
|
|
117
|
+
* - Does NOT store in turnEvents
|
|
118
|
+
* - Passes currentTurn for display context (turn/score shown to player)
|
|
119
|
+
* - Turn counter is NOT incremented
|
|
120
|
+
*/
|
|
121
|
+
private processMetaEvents;
|
|
122
|
+
/**
|
|
123
|
+
* Process a single platform operation for meta-commands.
|
|
124
|
+
*
|
|
125
|
+
* This is similar to processPlatformOperations but handles one operation
|
|
126
|
+
* at a time and returns completion events for inclusion in the result.
|
|
127
|
+
*/
|
|
128
|
+
private processMetaPlatformOperation;
|
|
129
|
+
/**
|
|
130
|
+
* Get current game context
|
|
131
|
+
*/
|
|
132
|
+
getContext(): GameContext;
|
|
133
|
+
/**
|
|
134
|
+
* Get world model
|
|
135
|
+
*/
|
|
136
|
+
getWorld(): WorldModel;
|
|
137
|
+
/**
|
|
138
|
+
* Get the current story
|
|
139
|
+
*/
|
|
140
|
+
getStory(): Story | undefined;
|
|
141
|
+
/**
|
|
142
|
+
* Get the event source for save/restore
|
|
143
|
+
*/
|
|
144
|
+
getEventSource(): ISemanticEventSource;
|
|
145
|
+
/**
|
|
146
|
+
* Get narrative settings (ADR-089)
|
|
147
|
+
*
|
|
148
|
+
* Returns the story's narrative perspective and related settings.
|
|
149
|
+
* Use this for text rendering that needs to know 1st/2nd/3rd person.
|
|
150
|
+
*/
|
|
151
|
+
getNarrativeSettings(): NarrativeSettings;
|
|
152
|
+
/**
|
|
153
|
+
* Configure language provider with narrative settings (ADR-089)
|
|
154
|
+
*
|
|
155
|
+
* Sets up the language provider for perspective-aware message resolution.
|
|
156
|
+
* For 3rd person narratives, extracts player pronouns from ActorTrait.
|
|
157
|
+
*/
|
|
158
|
+
private configureLanguageProviderNarrative;
|
|
159
|
+
/**
|
|
160
|
+
* Get scheduler service for daemons and fuses (ADR-071)
|
|
161
|
+
*/
|
|
162
|
+
getScheduler(): ISchedulerService;
|
|
163
|
+
/**
|
|
164
|
+
* Get NPC service for NPC behavior management (ADR-070)
|
|
165
|
+
*/
|
|
166
|
+
getNpcService(): INpcService;
|
|
167
|
+
/**
|
|
168
|
+
* Get event processor for handler registration (ADR-075)
|
|
169
|
+
*/
|
|
170
|
+
getEventProcessor(): EventProcessor;
|
|
171
|
+
/**
|
|
172
|
+
* Get the text service
|
|
173
|
+
*/
|
|
174
|
+
getTextService(): ITextService | undefined;
|
|
175
|
+
/**
|
|
176
|
+
* Set a custom text service
|
|
177
|
+
*/
|
|
178
|
+
setTextService(service: ITextService): void;
|
|
179
|
+
/**
|
|
180
|
+
* Register save/restore hooks
|
|
181
|
+
*/
|
|
182
|
+
registerSaveRestoreHooks(hooks: ISaveRestoreHooks): void;
|
|
183
|
+
/**
|
|
184
|
+
* Register a transformer for parsed commands.
|
|
185
|
+
* Transformers are called after parsing but before validation,
|
|
186
|
+
* allowing stories to modify commands (e.g., for debug tools).
|
|
187
|
+
*
|
|
188
|
+
* @param transformer - Function to transform parsed commands
|
|
189
|
+
*/
|
|
190
|
+
registerParsedCommandTransformer(transformer: ParsedCommandTransformer): void;
|
|
191
|
+
/**
|
|
192
|
+
* Unregister a parsed command transformer.
|
|
193
|
+
*
|
|
194
|
+
* @param transformer - The transformer to remove
|
|
195
|
+
* @returns true if the transformer was found and removed
|
|
196
|
+
*/
|
|
197
|
+
unregisterParsedCommandTransformer(transformer: ParsedCommandTransformer): boolean;
|
|
198
|
+
/**
|
|
199
|
+
* Save game state using registered hooks
|
|
200
|
+
*/
|
|
201
|
+
save(): Promise<boolean>;
|
|
202
|
+
/**
|
|
203
|
+
* Restore game state using registered hooks
|
|
204
|
+
*/
|
|
205
|
+
restore(): Promise<boolean>;
|
|
206
|
+
/**
|
|
207
|
+
* Create an undo snapshot of the current world state
|
|
208
|
+
*/
|
|
209
|
+
private createUndoSnapshot;
|
|
210
|
+
/**
|
|
211
|
+
* Undo to previous turn
|
|
212
|
+
* @returns true if undo succeeded, false if nothing to undo
|
|
213
|
+
*/
|
|
214
|
+
undo(): boolean;
|
|
215
|
+
/**
|
|
216
|
+
* Check if undo is available
|
|
217
|
+
*/
|
|
218
|
+
canUndo(): boolean;
|
|
219
|
+
/**
|
|
220
|
+
* Get number of undo levels available
|
|
221
|
+
*/
|
|
222
|
+
getUndoLevels(): number;
|
|
223
|
+
/**
|
|
224
|
+
* Create save data from current engine state
|
|
225
|
+
*/
|
|
226
|
+
private createSaveData;
|
|
227
|
+
/**
|
|
228
|
+
* Load save data into engine
|
|
229
|
+
*/
|
|
230
|
+
private loadSaveData;
|
|
231
|
+
/**
|
|
232
|
+
* Get turn history
|
|
233
|
+
*/
|
|
234
|
+
getHistory(): TurnResult[];
|
|
235
|
+
/**
|
|
236
|
+
* Get recent events
|
|
237
|
+
*/
|
|
238
|
+
getRecentEvents(count?: number): SequencedEvent[];
|
|
239
|
+
/**
|
|
240
|
+
* Update vocabulary for an entity
|
|
241
|
+
*/
|
|
242
|
+
updateEntityVocabulary(entity: IFEntity, inScope: boolean): void;
|
|
243
|
+
/**
|
|
244
|
+
* Update vocabulary for all entities in scope
|
|
245
|
+
*/
|
|
246
|
+
updateScopeVocabulary(): void;
|
|
247
|
+
/**
|
|
248
|
+
* Emit a platform event with turn metadata
|
|
249
|
+
*/
|
|
250
|
+
emitPlatformEvent(event: Omit<ISemanticEvent, 'id' | 'timestamp'>): void;
|
|
251
|
+
/**
|
|
252
|
+
* Update context after a turn
|
|
253
|
+
*/
|
|
254
|
+
private updateContext;
|
|
255
|
+
/**
|
|
256
|
+
* Update command history capability
|
|
257
|
+
*/
|
|
258
|
+
private updateCommandHistory;
|
|
259
|
+
/**
|
|
260
|
+
* Process pending platform operations
|
|
261
|
+
*/
|
|
262
|
+
private processPlatformOperations;
|
|
263
|
+
/**
|
|
264
|
+
* Emit a game lifecycle event.
|
|
265
|
+
* All game events now use ISemanticEvent with data in the `data` field.
|
|
266
|
+
* (IGameEvent with `payload` is deprecated - see ADR-097)
|
|
267
|
+
*/
|
|
268
|
+
private emitGameEvent;
|
|
269
|
+
/**
|
|
270
|
+
* Emit an event to listeners
|
|
271
|
+
*/
|
|
272
|
+
private emit;
|
|
273
|
+
/**
|
|
274
|
+
* Dispatch an event to entity handlers (entity.on)
|
|
275
|
+
* Entities can define handlers for specific event types
|
|
276
|
+
*/
|
|
277
|
+
private dispatchEntityHandlers;
|
|
278
|
+
/**
|
|
279
|
+
* Check if game is over
|
|
280
|
+
*/
|
|
281
|
+
private isGameOver;
|
|
282
|
+
/**
|
|
283
|
+
* Add event listener
|
|
284
|
+
*/
|
|
285
|
+
on<K extends GameEngineEventName>(event: K, listener: GameEngineEventListener<K>): this;
|
|
286
|
+
/**
|
|
287
|
+
* Remove event listener
|
|
288
|
+
*/
|
|
289
|
+
off<K extends GameEngineEventName>(event: K, listener: GameEngineEventListener<K>): this;
|
|
290
|
+
}
|
|
291
|
+
export {};
|
|
292
|
+
//# sourceMappingURL=game-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-engine.d.ts","sourceRoot":"","sources":["../src/game-engine.ts"],"names":[],"mappings":"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"}
|