@sharpee/core 0.9.56-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 +48 -0
- package/dist/constants/attributes.d.ts +32 -0
- package/dist/constants/attributes.d.ts.map +1 -0
- package/dist/constants/attributes.js +53 -0
- package/dist/constants/attributes.js.map +1 -0
- package/dist/constants/core-events.d.ts +37 -0
- package/dist/constants/core-events.d.ts.map +1 -0
- package/dist/constants/core-events.js +50 -0
- package/dist/constants/core-events.js.map +1 -0
- package/dist/constants/entity-types.d.ts +15 -0
- package/dist/constants/entity-types.d.ts.map +1 -0
- package/dist/constants/entity-types.js +27 -0
- package/dist/constants/entity-types.js.map +1 -0
- package/dist/constants/index.d.ts +22 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +41 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/relationships.d.ts +25 -0
- package/dist/constants/relationships.d.ts.map +1 -0
- package/dist/constants/relationships.js +55 -0
- package/dist/constants/relationships.js.map +1 -0
- package/dist/debug/index.d.ts +5 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/debug/index.js +21 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/debug/types.d.ts +65 -0
- package/dist/debug/types.d.ts.map +1 -0
- package/dist/debug/types.js +39 -0
- package/dist/debug/types.js.map +1 -0
- package/dist/events/event-factory.d.ts +81 -0
- package/dist/events/event-factory.d.ts.map +1 -0
- package/dist/events/event-factory.js +74 -0
- package/dist/events/event-factory.js.map +1 -0
- package/dist/events/event-helpers.d.ts +118 -0
- package/dist/events/event-helpers.d.ts.map +1 -0
- package/dist/events/event-helpers.js +151 -0
- package/dist/events/event-helpers.js.map +1 -0
- package/dist/events/event-registry.d.ts +154 -0
- package/dist/events/event-registry.d.ts.map +1 -0
- package/dist/events/event-registry.js +24 -0
- package/dist/events/event-registry.js.map +1 -0
- package/dist/events/event-source.d.ts +39 -0
- package/dist/events/event-source.d.ts.map +1 -0
- package/dist/events/event-source.js +57 -0
- package/dist/events/event-source.js.map +1 -0
- package/dist/events/event-system.d.ts +27 -0
- package/dist/events/event-system.d.ts.map +1 -0
- package/dist/events/event-system.js +64 -0
- package/dist/events/event-system.js.map +1 -0
- package/dist/events/game-events.d.ts +245 -0
- package/dist/events/game-events.d.ts.map +1 -0
- package/dist/events/game-events.js +250 -0
- package/dist/events/game-events.js.map +1 -0
- package/dist/events/index.d.ts +19 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +51 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/platform-events.d.ts +161 -0
- package/dist/events/platform-events.d.ts.map +1 -0
- package/dist/events/platform-events.js +135 -0
- package/dist/events/platform-events.js.map +1 -0
- package/dist/events/semantic-event-source.d.ts +85 -0
- package/dist/events/semantic-event-source.d.ts.map +1 -0
- package/dist/events/semantic-event-source.js +147 -0
- package/dist/events/semantic-event-source.js.map +1 -0
- package/dist/events/standard-events.d.ts +26 -0
- package/dist/events/standard-events.d.ts.map +1 -0
- package/dist/events/standard-events.js +27 -0
- package/dist/events/standard-events.js.map +1 -0
- package/dist/events/system-event.d.ts +62 -0
- package/dist/events/system-event.d.ts.map +1 -0
- package/dist/events/system-event.js +55 -0
- package/dist/events/system-event.js.map +1 -0
- package/dist/events/typed-event.d.ts +69 -0
- package/dist/events/typed-event.d.ts.map +1 -0
- package/dist/events/typed-event.js +20 -0
- package/dist/events/typed-event.js.map +1 -0
- package/dist/events/types.d.ts +105 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +4 -0
- package/dist/events/types.js.map +1 -0
- package/dist/execution/index.d.ts +2 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +23 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/types.d.ts +117 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +4 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +20 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/registry.d.ts +61 -0
- package/dist/extensions/registry.d.ts.map +1 -0
- package/dist/extensions/registry.js +153 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/types.d.ts +84 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +15 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/ifid/ifid.d.ts +30 -0
- package/dist/ifid/ifid.d.ts.map +1 -0
- package/dist/ifid/ifid.js +52 -0
- package/dist/ifid/ifid.js.map +1 -0
- package/dist/ifid/index.d.ts +2 -0
- package/dist/ifid/index.d.ts.map +1 -0
- package/dist/ifid/index.js +9 -0
- package/dist/ifid/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/metadata/index.d.ts +2 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +3 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/story-metadata.d.ts +64 -0
- package/dist/metadata/story-metadata.d.ts.map +1 -0
- package/dist/metadata/story-metadata.js +5 -0
- package/dist/metadata/story-metadata.js.map +1 -0
- package/dist/query/index.d.ts +9 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +25 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/query-manager.d.ts +86 -0
- package/dist/query/query-manager.d.ts.map +1 -0
- package/dist/query/query-manager.js +391 -0
- package/dist/query/query-manager.js.map +1 -0
- package/dist/query/types.d.ts +188 -0
- package/dist/query/types.d.ts.map +1 -0
- package/dist/query/types.js +106 -0
- package/dist/query/types.js.map +1 -0
- package/dist/random/index.d.ts +5 -0
- package/dist/random/index.d.ts.map +1 -0
- package/dist/random/index.js +9 -0
- package/dist/random/index.js.map +1 -0
- package/dist/random/seeded-random.d.ts +32 -0
- package/dist/random/seeded-random.d.ts.map +1 -0
- package/dist/random/seeded-random.js +62 -0
- package/dist/random/seeded-random.js.map +1 -0
- package/dist/rules/compatibility.d.ts +46 -0
- package/dist/rules/compatibility.d.ts.map +1 -0
- package/dist/rules/compatibility.js +62 -0
- package/dist/rules/compatibility.js.map +1 -0
- package/dist/rules/condition-builder.d.ts +23 -0
- package/dist/rules/condition-builder.d.ts.map +1 -0
- package/dist/rules/condition-builder.js +16 -0
- package/dist/rules/condition-builder.js.map +1 -0
- package/dist/rules/helpers.d.ts +51 -0
- package/dist/rules/helpers.d.ts.map +1 -0
- package/dist/rules/helpers.js +111 -0
- package/dist/rules/helpers.js.map +1 -0
- package/dist/rules/index.d.ts +12 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +34 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/rule-system.d.ts +6 -0
- package/dist/rules/rule-system.d.ts.map +1 -0
- package/dist/rules/rule-system.js +10 -0
- package/dist/rules/rule-system.js.map +1 -0
- package/dist/rules/rule-world-adapter.d.ts +43 -0
- package/dist/rules/rule-world-adapter.d.ts.map +1 -0
- package/dist/rules/rule-world-adapter.js +74 -0
- package/dist/rules/rule-world-adapter.js.map +1 -0
- package/dist/rules/simple-rule-system.d.ts +36 -0
- package/dist/rules/simple-rule-system.d.ts.map +1 -0
- package/dist/rules/simple-rule-system.js +135 -0
- package/dist/rules/simple-rule-system.js.map +1 -0
- package/dist/rules/types.d.ts +64 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +6 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/types/attribute.d.ts +40 -0
- package/dist/types/attribute.d.ts.map +1 -0
- package/dist/types/attribute.js +4 -0
- package/dist/types/attribute.js.map +1 -0
- package/dist/types/entity.d.ts +47 -0
- package/dist/types/entity.d.ts.map +1 -0
- package/dist/types/entity.js +4 -0
- package/dist/types/entity.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +27 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/relationship.d.ts +44 -0
- package/dist/types/relationship.d.ts.map +1 -0
- package/dist/types/relationship.js +4 -0
- package/dist/types/relationship.js.map +1 -0
- package/dist/types/result.d.ts +81 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +79 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/save-data.d.ts +264 -0
- package/dist/types/save-data.d.ts.map +1 -0
- package/dist/types/save-data.js +6 -0
- package/dist/types/save-data.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Generic event source infrastructure for the narrative engine.
|
|
4
|
+
* This provides a simple pub/sub mechanism for any type of event.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SimpleEventSource = void 0;
|
|
8
|
+
exports.createEventSource = createEventSource;
|
|
9
|
+
/**
|
|
10
|
+
* Simple synchronous implementation of EventSource
|
|
11
|
+
*/
|
|
12
|
+
class SimpleEventSource {
|
|
13
|
+
handlers = [];
|
|
14
|
+
emit(event) {
|
|
15
|
+
// Create a copy to avoid issues if handlers modify the array
|
|
16
|
+
const currentHandlers = [...this.handlers];
|
|
17
|
+
currentHandlers.forEach(handler => {
|
|
18
|
+
try {
|
|
19
|
+
handler(event);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
// Prevent one handler's error from affecting others
|
|
23
|
+
console.error('Error in event handler:', error);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
subscribe(handler) {
|
|
28
|
+
this.handlers.push(handler);
|
|
29
|
+
// Return unsubscribe function
|
|
30
|
+
return () => {
|
|
31
|
+
const index = this.handlers.indexOf(handler);
|
|
32
|
+
if (index > -1) {
|
|
33
|
+
this.handlers.splice(index, 1);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the current number of subscribers
|
|
39
|
+
*/
|
|
40
|
+
get subscriberCount() {
|
|
41
|
+
return this.handlers.length;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Remove all subscribers
|
|
45
|
+
*/
|
|
46
|
+
clear() {
|
|
47
|
+
this.handlers = [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.SimpleEventSource = SimpleEventSource;
|
|
51
|
+
/**
|
|
52
|
+
* Create a new event source for a specific event type
|
|
53
|
+
*/
|
|
54
|
+
function createEventSource() {
|
|
55
|
+
return new SimpleEventSource();
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=event-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-source.js","sourceRoot":"","sources":["../../src/events/event-source.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAmEH,8CAEC;AAnDD;;GAEG;AACH,MAAa,iBAAiB;IACpB,QAAQ,GAA2B,EAAE,CAAC;IAE9C,IAAI,CAAC,KAAQ;QACX,6DAA6D;QAC7D,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAChC,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,oDAAoD;gBACpD,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,OAA2B;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;CACF;AAzCD,8CAyCC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAI,iBAAiB,EAAK,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ISemanticEvent } from './types';
|
|
2
|
+
import { EntityId } from '../types/entity';
|
|
3
|
+
import { ISemanticEventSource } from './semantic-event-source';
|
|
4
|
+
/**
|
|
5
|
+
* Create a new semantic event
|
|
6
|
+
*/
|
|
7
|
+
export declare function createEvent(type: string, data?: Record<string, unknown>, entities?: {
|
|
8
|
+
actor?: EntityId;
|
|
9
|
+
target?: EntityId;
|
|
10
|
+
instrument?: EntityId;
|
|
11
|
+
location?: EntityId;
|
|
12
|
+
others?: EntityId[];
|
|
13
|
+
}, metadata?: {
|
|
14
|
+
tags?: string[];
|
|
15
|
+
priority?: number;
|
|
16
|
+
narrate?: boolean;
|
|
17
|
+
source?: string;
|
|
18
|
+
sessionId?: string;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}): ISemanticEvent;
|
|
21
|
+
export { SemanticEventSourceImpl as EventSourceImpl } from './semantic-event-source';
|
|
22
|
+
/**
|
|
23
|
+
* Create a new event source
|
|
24
|
+
* @deprecated Use createSemanticEventSource from './semantic-event-source'
|
|
25
|
+
*/
|
|
26
|
+
export declare function createEventSource(): ISemanticEventSource;
|
|
27
|
+
//# sourceMappingURL=event-system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-system.d.ts","sourceRoot":"","sources":["../../src/events/event-system.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAA6B,MAAM,yBAAyB,CAAC;AAE1F;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,CAAC,EAAE;IACT,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;CACrB,EACD,QAAQ,CAAC,EAAE;IACT,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,GACA,cAAc,CA+BhB;AAID,OAAO,EAAE,uBAAuB,IAAI,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAoBrF;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,oBAAoB,CAExD"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/core/src/events/event-system.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.EventSourceImpl = void 0;
|
|
5
|
+
exports.createEvent = createEvent;
|
|
6
|
+
exports.createEventSource = createEventSource;
|
|
7
|
+
const semantic_event_source_1 = require("./semantic-event-source");
|
|
8
|
+
/**
|
|
9
|
+
* Create a new semantic event
|
|
10
|
+
*/
|
|
11
|
+
function createEvent(type, data, entities, metadata) {
|
|
12
|
+
// Extract values from metadata
|
|
13
|
+
const tags = metadata?.tags || [];
|
|
14
|
+
const priority = metadata?.priority ?? 0;
|
|
15
|
+
const narrate = metadata?.narrate ?? true;
|
|
16
|
+
// Clean metadata for storage (remove known properties)
|
|
17
|
+
const cleanMetadata = metadata ? { ...metadata } : undefined;
|
|
18
|
+
if (cleanMetadata) {
|
|
19
|
+
delete cleanMetadata.tags;
|
|
20
|
+
delete cleanMetadata.priority;
|
|
21
|
+
delete cleanMetadata.narrate;
|
|
22
|
+
}
|
|
23
|
+
const event = {
|
|
24
|
+
id: generateEventId(),
|
|
25
|
+
type,
|
|
26
|
+
timestamp: Date.now(),
|
|
27
|
+
entities: entities || {},
|
|
28
|
+
data: data || {},
|
|
29
|
+
tags,
|
|
30
|
+
priority,
|
|
31
|
+
narrate
|
|
32
|
+
};
|
|
33
|
+
// Add metadata if provided (excluding extracted properties)
|
|
34
|
+
if (cleanMetadata && Object.keys(cleanMetadata).length > 0) {
|
|
35
|
+
event.metadata = cleanMetadata;
|
|
36
|
+
}
|
|
37
|
+
return event;
|
|
38
|
+
}
|
|
39
|
+
// Event source implementation moved to semantic-event-source.ts
|
|
40
|
+
// Re-export for backwards compatibility
|
|
41
|
+
var semantic_event_source_2 = require("./semantic-event-source");
|
|
42
|
+
Object.defineProperty(exports, "EventSourceImpl", { enumerable: true, get: function () { return semantic_event_source_2.SemanticEventSourceImpl; } });
|
|
43
|
+
// Counter for ensuring unique IDs even with same timestamp
|
|
44
|
+
let eventCounter = 0;
|
|
45
|
+
/**
|
|
46
|
+
* Generate a unique ID for an event
|
|
47
|
+
*/
|
|
48
|
+
function generateEventId() {
|
|
49
|
+
// Use the expected format: evt_timestamp_random
|
|
50
|
+
// Increment counter and reset if it gets too large
|
|
51
|
+
eventCounter = (eventCounter + 1) % 10000;
|
|
52
|
+
// Use both random and counter for better uniqueness
|
|
53
|
+
const random = Math.floor(Math.random() * 1000);
|
|
54
|
+
const unique = random + (eventCounter * 1000);
|
|
55
|
+
return `evt_${Date.now()}_${unique}`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create a new event source
|
|
59
|
+
* @deprecated Use createSemanticEventSource from './semantic-event-source'
|
|
60
|
+
*/
|
|
61
|
+
function createEventSource() {
|
|
62
|
+
return (0, semantic_event_source_1.createSemanticEventSource)();
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=event-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-system.js","sourceRoot":"","sources":["../../src/events/event-system.ts"],"names":[],"mappings":";AAAA,2CAA2C;;;AAS3C,kCAiDC;AA4BD,8CAEC;AApFD,mEAA0F;AAE1F;;GAEG;AACH,SAAgB,WAAW,CACzB,IAAY,EACZ,IAA8B,EAC9B,QAMC,EACD,QAOC;IAED,+BAA+B;IAC/B,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC;IAE1C,uDAAuD;IACvD,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC,IAAI,CAAC;QAC1B,OAAO,aAAa,CAAC,QAAQ,CAAC;QAC9B,OAAO,aAAa,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,GAAmB;QAC5B,EAAE,EAAE,eAAe,EAAE;QACrB,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,QAAQ,EAAE,QAAQ,IAAI,EAAE;QACxB,IAAI,EAAE,IAAI,IAAI,EAAE;QAChB,IAAI;QACJ,QAAQ;QACR,OAAO;KACR,CAAC;IAEF,4DAA4D;IAC5D,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,KAAa,CAAC,QAAQ,GAAG,aAAa,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gEAAgE;AAChE,wCAAwC;AACxC,iEAAqF;AAA5E,wHAAA,uBAAuB,OAAmB;AAEnD,2DAA2D;AAC3D,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB;;GAEG;AACH,SAAS,eAAe;IACtB,gDAAgD;IAChD,mDAAmD;IACnD,YAAY,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAE1C,oDAAoD;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAE9C,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAA,iDAAyB,GAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Game lifecycle events for tracking game state transitions
|
|
3
|
+
* These events mark important milestones in a game session
|
|
4
|
+
*/
|
|
5
|
+
import { ISemanticEvent } from './types';
|
|
6
|
+
/** Story metadata included in game events */
|
|
7
|
+
export interface GameEventStoryData {
|
|
8
|
+
id?: string;
|
|
9
|
+
title?: string;
|
|
10
|
+
author?: string;
|
|
11
|
+
version?: string;
|
|
12
|
+
}
|
|
13
|
+
/** Session tracking data */
|
|
14
|
+
export interface GameEventSessionData {
|
|
15
|
+
startTime?: number;
|
|
16
|
+
endTime?: number;
|
|
17
|
+
turns?: number;
|
|
18
|
+
score?: number;
|
|
19
|
+
moves?: number;
|
|
20
|
+
}
|
|
21
|
+
/** Ending/conclusion data for game end events */
|
|
22
|
+
export interface GameEventEndingData {
|
|
23
|
+
type?: 'victory' | 'defeat' | 'quit' | 'abort';
|
|
24
|
+
reason?: string;
|
|
25
|
+
achieved?: string[];
|
|
26
|
+
score?: number;
|
|
27
|
+
maxScore?: number;
|
|
28
|
+
ranking?: string;
|
|
29
|
+
}
|
|
30
|
+
/** Error data for failure events */
|
|
31
|
+
export interface GameEventErrorData {
|
|
32
|
+
code?: string;
|
|
33
|
+
message?: string;
|
|
34
|
+
stack?: string;
|
|
35
|
+
}
|
|
36
|
+
/** Game state values */
|
|
37
|
+
export type GameState = 'initializing' | 'ready' | 'running' | 'ending' | 'ended';
|
|
38
|
+
export interface GameLifecycleInitializingData {
|
|
39
|
+
gameState: 'initializing';
|
|
40
|
+
[key: string]: unknown;
|
|
41
|
+
}
|
|
42
|
+
export interface GameLifecycleInitializedData {
|
|
43
|
+
gameState: 'ready';
|
|
44
|
+
[key: string]: unknown;
|
|
45
|
+
}
|
|
46
|
+
export interface GameLifecycleStoryLoadingData {
|
|
47
|
+
story?: {
|
|
48
|
+
id?: string;
|
|
49
|
+
};
|
|
50
|
+
[key: string]: unknown;
|
|
51
|
+
}
|
|
52
|
+
export interface GameLifecycleStoryLoadedData {
|
|
53
|
+
story: GameEventStoryData;
|
|
54
|
+
gameState: 'ready';
|
|
55
|
+
[key: string]: unknown;
|
|
56
|
+
}
|
|
57
|
+
export interface GameLifecycleStartingData {
|
|
58
|
+
story?: GameEventStoryData;
|
|
59
|
+
gameState: 'ready';
|
|
60
|
+
[key: string]: unknown;
|
|
61
|
+
}
|
|
62
|
+
export interface GameLifecycleStartedData {
|
|
63
|
+
story?: GameEventStoryData;
|
|
64
|
+
engineVersion?: string;
|
|
65
|
+
clientVersion?: string;
|
|
66
|
+
gameState: 'running';
|
|
67
|
+
session: {
|
|
68
|
+
startTime: number;
|
|
69
|
+
turns: number;
|
|
70
|
+
moves: number;
|
|
71
|
+
};
|
|
72
|
+
[key: string]: unknown;
|
|
73
|
+
}
|
|
74
|
+
export interface GameLifecycleEndingData {
|
|
75
|
+
gameState: 'ending';
|
|
76
|
+
session?: GameEventSessionData;
|
|
77
|
+
ending?: {
|
|
78
|
+
reason?: string;
|
|
79
|
+
};
|
|
80
|
+
[key: string]: unknown;
|
|
81
|
+
}
|
|
82
|
+
export interface GameLifecycleEndedData {
|
|
83
|
+
gameState: 'ended';
|
|
84
|
+
session?: GameEventSessionData & {
|
|
85
|
+
endTime: number;
|
|
86
|
+
};
|
|
87
|
+
ending: GameEventEndingData & {
|
|
88
|
+
type: 'victory' | 'defeat' | 'quit' | 'abort';
|
|
89
|
+
};
|
|
90
|
+
[key: string]: unknown;
|
|
91
|
+
}
|
|
92
|
+
export interface GameLifecycleWonData {
|
|
93
|
+
gameState: 'ended';
|
|
94
|
+
session?: GameEventSessionData & {
|
|
95
|
+
endTime: number;
|
|
96
|
+
};
|
|
97
|
+
ending: GameEventEndingData & {
|
|
98
|
+
type: 'victory';
|
|
99
|
+
};
|
|
100
|
+
[key: string]: unknown;
|
|
101
|
+
}
|
|
102
|
+
export interface GameLifecycleLostData {
|
|
103
|
+
gameState: 'ended';
|
|
104
|
+
session?: GameEventSessionData & {
|
|
105
|
+
endTime: number;
|
|
106
|
+
};
|
|
107
|
+
ending: {
|
|
108
|
+
type: 'defeat';
|
|
109
|
+
reason: string;
|
|
110
|
+
};
|
|
111
|
+
[key: string]: unknown;
|
|
112
|
+
}
|
|
113
|
+
export interface GameLifecycleQuitData {
|
|
114
|
+
gameState: 'ended';
|
|
115
|
+
session?: GameEventSessionData & {
|
|
116
|
+
endTime: number;
|
|
117
|
+
};
|
|
118
|
+
ending: {
|
|
119
|
+
type: 'quit';
|
|
120
|
+
reason: string;
|
|
121
|
+
};
|
|
122
|
+
[key: string]: unknown;
|
|
123
|
+
}
|
|
124
|
+
export interface GameLifecycleAbortedData {
|
|
125
|
+
gameState: 'ended';
|
|
126
|
+
session?: GameEventSessionData & {
|
|
127
|
+
endTime: number;
|
|
128
|
+
};
|
|
129
|
+
ending: {
|
|
130
|
+
type: 'abort';
|
|
131
|
+
reason: string;
|
|
132
|
+
};
|
|
133
|
+
error: {
|
|
134
|
+
message: string;
|
|
135
|
+
};
|
|
136
|
+
[key: string]: unknown;
|
|
137
|
+
}
|
|
138
|
+
export interface GameLifecycleSessionSavingData {
|
|
139
|
+
saveId?: string;
|
|
140
|
+
[key: string]: unknown;
|
|
141
|
+
}
|
|
142
|
+
export interface GameLifecycleSessionSavedData {
|
|
143
|
+
saveId?: string;
|
|
144
|
+
timestamp: number;
|
|
145
|
+
[key: string]: unknown;
|
|
146
|
+
}
|
|
147
|
+
export interface GameLifecycleSessionRestoringData {
|
|
148
|
+
saveId?: string;
|
|
149
|
+
[key: string]: unknown;
|
|
150
|
+
}
|
|
151
|
+
export interface GameLifecycleSessionRestoredData {
|
|
152
|
+
saveId?: string;
|
|
153
|
+
timestamp: number;
|
|
154
|
+
[key: string]: unknown;
|
|
155
|
+
}
|
|
156
|
+
export interface GameLifecycleInitFailedData {
|
|
157
|
+
error: GameEventErrorData;
|
|
158
|
+
[key: string]: unknown;
|
|
159
|
+
}
|
|
160
|
+
export interface GameLifecycleStoryLoadFailedData {
|
|
161
|
+
story?: {
|
|
162
|
+
id?: string;
|
|
163
|
+
};
|
|
164
|
+
error: GameEventErrorData;
|
|
165
|
+
[key: string]: unknown;
|
|
166
|
+
}
|
|
167
|
+
export interface GameLifecycleFatalErrorData {
|
|
168
|
+
error: GameEventErrorData;
|
|
169
|
+
[key: string]: unknown;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Game event types for lifecycle transitions
|
|
173
|
+
*/
|
|
174
|
+
export declare const GameEventType: {
|
|
175
|
+
readonly GAME_INITIALIZING: "game.initializing";
|
|
176
|
+
readonly GAME_INITIALIZED: "game.initialized";
|
|
177
|
+
readonly STORY_LOADING: "game.story_loading";
|
|
178
|
+
readonly STORY_LOADED: "game.story_loaded";
|
|
179
|
+
readonly GAME_STARTING: "game.starting";
|
|
180
|
+
readonly GAME_STARTED: "game.started";
|
|
181
|
+
readonly GAME_ENDING: "game.ending";
|
|
182
|
+
readonly GAME_ENDED: "game.ended";
|
|
183
|
+
readonly GAME_WON: "game.won";
|
|
184
|
+
readonly GAME_LOST: "game.lost";
|
|
185
|
+
readonly GAME_QUIT: "game.quit";
|
|
186
|
+
readonly GAME_ABORTED: "game.aborted";
|
|
187
|
+
readonly SESSION_SAVING: "game.session_saving";
|
|
188
|
+
readonly SESSION_SAVED: "game.session_saved";
|
|
189
|
+
readonly SESSION_RESTORING: "game.session_restoring";
|
|
190
|
+
readonly SESSION_RESTORED: "game.session_restored";
|
|
191
|
+
readonly INITIALIZATION_FAILED: "game.initialization_failed";
|
|
192
|
+
readonly STORY_LOAD_FAILED: "game.story_load_failed";
|
|
193
|
+
readonly FATAL_ERROR: "game.fatal_error";
|
|
194
|
+
};
|
|
195
|
+
export type GameEventTypeValue = typeof GameEventType[keyof typeof GameEventType];
|
|
196
|
+
/**
|
|
197
|
+
* Check if an event is a game lifecycle event (any GameEventType).
|
|
198
|
+
* Use specific type guards (isGameStartedEvent, etc.) for typed data access.
|
|
199
|
+
*/
|
|
200
|
+
export declare function isGameEvent(event: ISemanticEvent): boolean;
|
|
201
|
+
/**
|
|
202
|
+
* Check if an event is part of the game start sequence.
|
|
203
|
+
*/
|
|
204
|
+
export declare function isGameStartSequenceEvent(event: ISemanticEvent): boolean;
|
|
205
|
+
/**
|
|
206
|
+
* Check if an event is part of the game end sequence.
|
|
207
|
+
*/
|
|
208
|
+
export declare function isGameEndSequenceEvent(event: ISemanticEvent): boolean;
|
|
209
|
+
/**
|
|
210
|
+
* Create a generic game event with typed data.
|
|
211
|
+
* Use specific creators (createGameStartedEvent, etc.) when possible for type safety.
|
|
212
|
+
*/
|
|
213
|
+
export declare function createGameEvent<T extends Record<string, unknown>>(type: GameEventTypeValue, data?: T): ISemanticEvent;
|
|
214
|
+
export declare function createGameInitializingEvent(): ISemanticEvent;
|
|
215
|
+
export declare function createGameInitializedEvent(): ISemanticEvent;
|
|
216
|
+
export declare function createStoryLoadingEvent(storyId?: string): ISemanticEvent;
|
|
217
|
+
export declare function createStoryLoadedEvent(story: GameEventStoryData): ISemanticEvent;
|
|
218
|
+
export declare function createGameStartingEvent(story?: GameEventStoryData): ISemanticEvent;
|
|
219
|
+
export declare function createGameStartedEvent(story?: GameEventStoryData, startTime?: number, engineVersion?: string, clientVersion?: string): ISemanticEvent;
|
|
220
|
+
export declare function createGameEndingEvent(reason?: string, session?: GameEventSessionData): ISemanticEvent;
|
|
221
|
+
export declare function createGameEndedEvent(endingType: 'victory' | 'defeat' | 'quit' | 'abort', session?: GameEventSessionData, ending?: Partial<GameEventEndingData>): ISemanticEvent;
|
|
222
|
+
export declare function createGameWonEvent(session?: GameEventSessionData, ending?: Partial<GameEventEndingData>): ISemanticEvent;
|
|
223
|
+
export declare function createGameLostEvent(reason: string, session?: GameEventSessionData): ISemanticEvent;
|
|
224
|
+
export declare function createGameQuitEvent(session?: GameEventSessionData): ISemanticEvent;
|
|
225
|
+
export declare function createGameAbortedEvent(error: string, session?: GameEventSessionData): ISemanticEvent;
|
|
226
|
+
/** Type guard to check if an event has specific data type */
|
|
227
|
+
export declare function isGameStartedEvent(event: ISemanticEvent): event is ISemanticEvent & {
|
|
228
|
+
data: GameLifecycleStartedData;
|
|
229
|
+
};
|
|
230
|
+
export declare function isGameEndedEvent(event: ISemanticEvent): event is ISemanticEvent & {
|
|
231
|
+
data: GameLifecycleEndedData;
|
|
232
|
+
};
|
|
233
|
+
export declare function isGameWonEvent(event: ISemanticEvent): event is ISemanticEvent & {
|
|
234
|
+
data: GameLifecycleWonData;
|
|
235
|
+
};
|
|
236
|
+
export declare function isGameLostEvent(event: ISemanticEvent): event is ISemanticEvent & {
|
|
237
|
+
data: GameLifecycleLostData;
|
|
238
|
+
};
|
|
239
|
+
export declare function isGameQuitEvent(event: ISemanticEvent): event is ISemanticEvent & {
|
|
240
|
+
data: GameLifecycleQuitData;
|
|
241
|
+
};
|
|
242
|
+
export declare function isGameAbortedEvent(event: ISemanticEvent): event is ISemanticEvent & {
|
|
243
|
+
data: GameLifecycleAbortedData;
|
|
244
|
+
};
|
|
245
|
+
//# sourceMappingURL=game-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-events.d.ts","sourceRoot":"","sources":["../../src/events/game-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Game lifecycle events for tracking game state transitions
|
|
4
|
+
* These events mark important milestones in a game session
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.GameEventType = void 0;
|
|
8
|
+
exports.isGameEvent = isGameEvent;
|
|
9
|
+
exports.isGameStartSequenceEvent = isGameStartSequenceEvent;
|
|
10
|
+
exports.isGameEndSequenceEvent = isGameEndSequenceEvent;
|
|
11
|
+
exports.createGameEvent = createGameEvent;
|
|
12
|
+
exports.createGameInitializingEvent = createGameInitializingEvent;
|
|
13
|
+
exports.createGameInitializedEvent = createGameInitializedEvent;
|
|
14
|
+
exports.createStoryLoadingEvent = createStoryLoadingEvent;
|
|
15
|
+
exports.createStoryLoadedEvent = createStoryLoadedEvent;
|
|
16
|
+
exports.createGameStartingEvent = createGameStartingEvent;
|
|
17
|
+
exports.createGameStartedEvent = createGameStartedEvent;
|
|
18
|
+
exports.createGameEndingEvent = createGameEndingEvent;
|
|
19
|
+
exports.createGameEndedEvent = createGameEndedEvent;
|
|
20
|
+
exports.createGameWonEvent = createGameWonEvent;
|
|
21
|
+
exports.createGameLostEvent = createGameLostEvent;
|
|
22
|
+
exports.createGameQuitEvent = createGameQuitEvent;
|
|
23
|
+
exports.createGameAbortedEvent = createGameAbortedEvent;
|
|
24
|
+
exports.isGameStartedEvent = isGameStartedEvent;
|
|
25
|
+
exports.isGameEndedEvent = isGameEndedEvent;
|
|
26
|
+
exports.isGameWonEvent = isGameWonEvent;
|
|
27
|
+
exports.isGameLostEvent = isGameLostEvent;
|
|
28
|
+
exports.isGameQuitEvent = isGameQuitEvent;
|
|
29
|
+
exports.isGameAbortedEvent = isGameAbortedEvent;
|
|
30
|
+
// =============================================================================
|
|
31
|
+
// Game Event Type Constants
|
|
32
|
+
// =============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Game event types for lifecycle transitions
|
|
35
|
+
*/
|
|
36
|
+
exports.GameEventType = {
|
|
37
|
+
// Game start events
|
|
38
|
+
GAME_INITIALIZING: 'game.initializing', // Engine is setting up
|
|
39
|
+
GAME_INITIALIZED: 'game.initialized', // Engine ready, before story
|
|
40
|
+
STORY_LOADING: 'game.story_loading', // Story is being loaded
|
|
41
|
+
STORY_LOADED: 'game.story_loaded', // Story loaded successfully
|
|
42
|
+
GAME_STARTING: 'game.starting', // Game is about to start
|
|
43
|
+
GAME_STARTED: 'game.started', // Game has started, ready for input
|
|
44
|
+
// Game end events
|
|
45
|
+
GAME_ENDING: 'game.ending', // Game is about to end
|
|
46
|
+
GAME_ENDED: 'game.ended', // Game has ended normally
|
|
47
|
+
GAME_WON: 'game.won', // Player achieved victory
|
|
48
|
+
GAME_LOST: 'game.lost', // Player was defeated
|
|
49
|
+
GAME_QUIT: 'game.quit', // Player quit the game
|
|
50
|
+
GAME_ABORTED: 'game.aborted', // Game ended abnormally
|
|
51
|
+
// Session events
|
|
52
|
+
SESSION_SAVING: 'game.session_saving', // Save in progress
|
|
53
|
+
SESSION_SAVED: 'game.session_saved', // Save completed
|
|
54
|
+
SESSION_RESTORING: 'game.session_restoring', // Restore in progress
|
|
55
|
+
SESSION_RESTORED: 'game.session_restored', // Restore completed
|
|
56
|
+
// Error events
|
|
57
|
+
INITIALIZATION_FAILED: 'game.initialization_failed',
|
|
58
|
+
STORY_LOAD_FAILED: 'game.story_load_failed',
|
|
59
|
+
FATAL_ERROR: 'game.fatal_error'
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Check if an event is a game lifecycle event (any GameEventType).
|
|
63
|
+
* Use specific type guards (isGameStartedEvent, etc.) for typed data access.
|
|
64
|
+
*/
|
|
65
|
+
function isGameEvent(event) {
|
|
66
|
+
return Object.values(exports.GameEventType).includes(event.type);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if an event is part of the game start sequence.
|
|
70
|
+
*/
|
|
71
|
+
function isGameStartSequenceEvent(event) {
|
|
72
|
+
return (event.type === exports.GameEventType.GAME_INITIALIZING ||
|
|
73
|
+
event.type === exports.GameEventType.GAME_INITIALIZED ||
|
|
74
|
+
event.type === exports.GameEventType.STORY_LOADING ||
|
|
75
|
+
event.type === exports.GameEventType.STORY_LOADED ||
|
|
76
|
+
event.type === exports.GameEventType.GAME_STARTING ||
|
|
77
|
+
event.type === exports.GameEventType.GAME_STARTED);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if an event is part of the game end sequence.
|
|
81
|
+
*/
|
|
82
|
+
function isGameEndSequenceEvent(event) {
|
|
83
|
+
return (event.type === exports.GameEventType.GAME_ENDING ||
|
|
84
|
+
event.type === exports.GameEventType.GAME_ENDED ||
|
|
85
|
+
event.type === exports.GameEventType.GAME_WON ||
|
|
86
|
+
event.type === exports.GameEventType.GAME_LOST ||
|
|
87
|
+
event.type === exports.GameEventType.GAME_QUIT ||
|
|
88
|
+
event.type === exports.GameEventType.GAME_ABORTED);
|
|
89
|
+
}
|
|
90
|
+
// =============================================================================
|
|
91
|
+
// Helper Functions to Create Game Events
|
|
92
|
+
// =============================================================================
|
|
93
|
+
/**
|
|
94
|
+
* Generate a unique event ID
|
|
95
|
+
*/
|
|
96
|
+
function generateEventId() {
|
|
97
|
+
return `game-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create a generic game event with typed data.
|
|
101
|
+
* Use specific creators (createGameStartedEvent, etc.) when possible for type safety.
|
|
102
|
+
*/
|
|
103
|
+
function createGameEvent(type, data) {
|
|
104
|
+
return {
|
|
105
|
+
id: generateEventId(),
|
|
106
|
+
type,
|
|
107
|
+
timestamp: Date.now(),
|
|
108
|
+
entities: {},
|
|
109
|
+
data: data || {}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Specific event creators - all return ISemanticEvent with typed data
|
|
113
|
+
function createGameInitializingEvent() {
|
|
114
|
+
return createGameEvent(exports.GameEventType.GAME_INITIALIZING, {
|
|
115
|
+
gameState: 'initializing'
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function createGameInitializedEvent() {
|
|
119
|
+
return createGameEvent(exports.GameEventType.GAME_INITIALIZED, {
|
|
120
|
+
gameState: 'ready'
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function createStoryLoadingEvent(storyId) {
|
|
124
|
+
return createGameEvent(exports.GameEventType.STORY_LOADING, {
|
|
125
|
+
story: { id: storyId }
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function createStoryLoadedEvent(story) {
|
|
129
|
+
return createGameEvent(exports.GameEventType.STORY_LOADED, {
|
|
130
|
+
story,
|
|
131
|
+
gameState: 'ready'
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function createGameStartingEvent(story) {
|
|
135
|
+
return createGameEvent(exports.GameEventType.GAME_STARTING, {
|
|
136
|
+
story,
|
|
137
|
+
gameState: 'ready'
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
function createGameStartedEvent(story, startTime, engineVersion, clientVersion) {
|
|
141
|
+
return createGameEvent(exports.GameEventType.GAME_STARTED, {
|
|
142
|
+
story,
|
|
143
|
+
engineVersion,
|
|
144
|
+
clientVersion,
|
|
145
|
+
gameState: 'running',
|
|
146
|
+
session: {
|
|
147
|
+
startTime: startTime || Date.now(),
|
|
148
|
+
turns: 0,
|
|
149
|
+
moves: 0
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function createGameEndingEvent(reason, session) {
|
|
154
|
+
return createGameEvent(exports.GameEventType.GAME_ENDING, {
|
|
155
|
+
gameState: 'ending',
|
|
156
|
+
session,
|
|
157
|
+
ending: { reason }
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function createGameEndedEvent(endingType, session, ending) {
|
|
161
|
+
return createGameEvent(exports.GameEventType.GAME_ENDED, {
|
|
162
|
+
gameState: 'ended',
|
|
163
|
+
session: {
|
|
164
|
+
...session,
|
|
165
|
+
endTime: Date.now()
|
|
166
|
+
},
|
|
167
|
+
ending: {
|
|
168
|
+
...ending,
|
|
169
|
+
type: endingType
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function createGameWonEvent(session, ending) {
|
|
174
|
+
return createGameEvent(exports.GameEventType.GAME_WON, {
|
|
175
|
+
gameState: 'ended',
|
|
176
|
+
session: {
|
|
177
|
+
...session,
|
|
178
|
+
endTime: Date.now()
|
|
179
|
+
},
|
|
180
|
+
ending: {
|
|
181
|
+
...ending,
|
|
182
|
+
type: 'victory'
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
function createGameLostEvent(reason, session) {
|
|
187
|
+
return createGameEvent(exports.GameEventType.GAME_LOST, {
|
|
188
|
+
gameState: 'ended',
|
|
189
|
+
session: {
|
|
190
|
+
...session,
|
|
191
|
+
endTime: Date.now()
|
|
192
|
+
},
|
|
193
|
+
ending: {
|
|
194
|
+
type: 'defeat',
|
|
195
|
+
reason
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
function createGameQuitEvent(session) {
|
|
200
|
+
return createGameEvent(exports.GameEventType.GAME_QUIT, {
|
|
201
|
+
gameState: 'ended',
|
|
202
|
+
session: {
|
|
203
|
+
...session,
|
|
204
|
+
endTime: Date.now()
|
|
205
|
+
},
|
|
206
|
+
ending: {
|
|
207
|
+
type: 'quit',
|
|
208
|
+
reason: 'Player quit'
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
function createGameAbortedEvent(error, session) {
|
|
213
|
+
return createGameEvent(exports.GameEventType.GAME_ABORTED, {
|
|
214
|
+
gameState: 'ended',
|
|
215
|
+
session: {
|
|
216
|
+
...session,
|
|
217
|
+
endTime: Date.now()
|
|
218
|
+
},
|
|
219
|
+
ending: {
|
|
220
|
+
type: 'abort',
|
|
221
|
+
reason: error
|
|
222
|
+
},
|
|
223
|
+
error: {
|
|
224
|
+
message: error
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
// =============================================================================
|
|
229
|
+
// Type Guards for Game Events
|
|
230
|
+
// =============================================================================
|
|
231
|
+
/** Type guard to check if an event has specific data type */
|
|
232
|
+
function isGameStartedEvent(event) {
|
|
233
|
+
return event.type === exports.GameEventType.GAME_STARTED;
|
|
234
|
+
}
|
|
235
|
+
function isGameEndedEvent(event) {
|
|
236
|
+
return event.type === exports.GameEventType.GAME_ENDED;
|
|
237
|
+
}
|
|
238
|
+
function isGameWonEvent(event) {
|
|
239
|
+
return event.type === exports.GameEventType.GAME_WON;
|
|
240
|
+
}
|
|
241
|
+
function isGameLostEvent(event) {
|
|
242
|
+
return event.type === exports.GameEventType.GAME_LOST;
|
|
243
|
+
}
|
|
244
|
+
function isGameQuitEvent(event) {
|
|
245
|
+
return event.type === exports.GameEventType.GAME_QUIT;
|
|
246
|
+
}
|
|
247
|
+
function isGameAbortedEvent(event) {
|
|
248
|
+
return event.type === exports.GameEventType.GAME_ABORTED;
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=game-events.js.map
|