@sharpee/world-model 0.9.100 → 0.9.103
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/package.json +3 -3
- package/world/AuthorModel.d.ts +122 -105
- package/world/AuthorModel.d.ts.map +1 -1
- package/world/AuthorModel.js +241 -322
- package/world/AuthorModel.js.map +1 -1
- package/world/ScoreLedger.d.ts +96 -0
- package/world/ScoreLedger.d.ts.map +1 -0
- package/world/ScoreLedger.js +126 -0
- package/world/ScoreLedger.js.map +1 -0
- package/world/WorldEventSystem.d.ts +186 -0
- package/world/WorldEventSystem.d.ts.map +1 -0
- package/world/WorldEventSystem.js +297 -0
- package/world/WorldEventSystem.js.map +1 -0
- package/world/WorldModel.d.ts +7 -72
- package/world/WorldModel.d.ts.map +1 -1
- package/world/WorldModel.js +54 -344
- package/world/WorldModel.js.map +1 -1
- package/world/WorldSerializer.d.ts +61 -0
- package/world/WorldSerializer.d.ts.map +1 -0
- package/world/WorldSerializer.js +136 -0
- package/world/WorldSerializer.js.map +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sharpee/world-model",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.103",
|
|
4
4
|
"description": "World model for Sharpee IF platform - entities, traits, and behaviors",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"types": "./index.d.ts",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@sharpee/core": "^0.9.
|
|
16
|
-
"@sharpee/if-domain": "^0.9.
|
|
15
|
+
"@sharpee/core": "^0.9.103",
|
|
16
|
+
"@sharpee/if-domain": "^0.9.103"
|
|
17
17
|
},
|
|
18
18
|
"keywords": [
|
|
19
19
|
"interactive-fiction",
|
package/world/AuthorModel.d.ts
CHANGED
|
@@ -1,11 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AuthorModel — unrestricted world model access for authoring and setup.
|
|
3
|
+
*
|
|
4
|
+
* Public interface: Implements IWorldModel. Entity creation and movement
|
|
5
|
+
* bypass validation. All other methods delegate to the backing WorldModel.
|
|
6
|
+
*
|
|
7
|
+
* Owner context: packages/world-model. Used during initializeWorld() for
|
|
8
|
+
* setup that requires bypassing game rules (placing items in closed
|
|
9
|
+
* containers, etc.).
|
|
10
|
+
*/
|
|
1
11
|
import { IFEntity } from '../entities/if-entity';
|
|
2
12
|
import { TraitType } from '../traits/trait-types';
|
|
3
13
|
import { SpatialIndex } from './SpatialIndex';
|
|
4
14
|
import { ITrait } from '../traits/trait';
|
|
5
15
|
import { ICapabilityStore } from './capabilities';
|
|
6
|
-
import type { IWorldModel } from './WorldModel';
|
|
16
|
+
import type { IWorldModel, EventHandler, EventValidator, EventPreviewer, EventChainHandler, ChainEventOptions } from './WorldModel';
|
|
17
|
+
import type { ScoreEntry } from './ScoreLedger';
|
|
18
|
+
import type { ISemanticEvent } from "../../core/index";
|
|
19
|
+
import type { WorldState, ContentsOptions, WorldChange, IEventProcessorWiring, GamePrompt, IGrammarVocabularyProvider } from "../../if-domain/index";
|
|
20
|
+
import type { DirectionType } from '../constants/directions';
|
|
21
|
+
import type { ScopeRegistry } from '../scope/scope-registry';
|
|
22
|
+
import type { IScopeRule } from '../scope/scope-rule';
|
|
23
|
+
import type { ICapabilityData, ICapabilityRegistration } from './capabilities';
|
|
7
24
|
/**
|
|
8
|
-
* Data store shared between WorldModel and AuthorModel
|
|
25
|
+
* Data store shared between WorldModel and AuthorModel.
|
|
9
26
|
*/
|
|
10
27
|
export interface IDataStore {
|
|
11
28
|
entities: Map<string, IFEntity>;
|
|
@@ -17,7 +34,7 @@ export interface IDataStore {
|
|
|
17
34
|
capabilities: ICapabilityStore;
|
|
18
35
|
}
|
|
19
36
|
/**
|
|
20
|
-
* Item specification for bulk creation
|
|
37
|
+
* Item specification for bulk creation.
|
|
21
38
|
*/
|
|
22
39
|
export interface IItemSpec {
|
|
23
40
|
name: string;
|
|
@@ -27,125 +44,125 @@ export interface IItemSpec {
|
|
|
27
44
|
}
|
|
28
45
|
/**
|
|
29
46
|
* AuthorModel provides unrestricted access to the world state for authoring,
|
|
30
|
-
* testing, and world setup. It bypasses
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* Use AuthorModel when:
|
|
34
|
-
* - Setting up initial world state
|
|
35
|
-
* - Populating containers (even closed ones)
|
|
36
|
-
* - Loading saved games
|
|
37
|
-
* - Writing tests
|
|
38
|
-
* - Implementing special mechanics (magic, teleportation, etc.)
|
|
47
|
+
* testing, and world setup. It bypasses validation rules for entity creation
|
|
48
|
+
* and movement. All other IWorldModel methods delegate to the backing WorldModel.
|
|
39
49
|
*
|
|
40
50
|
* @example
|
|
41
51
|
* ```typescript
|
|
42
|
-
* const author = new AuthorModel(world.getDataStore());
|
|
43
|
-
* const cabinet = author.createEntity('Medicine Cabinet', 'container');
|
|
44
|
-
* cabinet.add(new OpenableTrait({ isOpen: false }));
|
|
45
|
-
*
|
|
46
|
-
* // Can place items in closed container!
|
|
52
|
+
* const author = new AuthorModel(world.getDataStore(), world);
|
|
47
53
|
* const medicine = author.createEntity('Aspirin', 'item');
|
|
48
|
-
* author.moveEntity(medicine.id,
|
|
54
|
+
* author.moveEntity(medicine.id, closedCabinet.id); // Works even though closed
|
|
49
55
|
* ```
|
|
50
56
|
*/
|
|
51
|
-
export declare class AuthorModel {
|
|
57
|
+
export declare class AuthorModel implements IWorldModel {
|
|
52
58
|
private dataStore;
|
|
53
|
-
private worldModel
|
|
54
|
-
|
|
55
|
-
constructor(dataStore: IDataStore, worldModel?: IWorldModel);
|
|
59
|
+
private worldModel;
|
|
60
|
+
constructor(dataStore: IDataStore, worldModel: IWorldModel);
|
|
56
61
|
/**
|
|
57
|
-
* Get the shared data store.
|
|
58
|
-
* that shares the same state.
|
|
62
|
+
* Get the shared data store.
|
|
59
63
|
*/
|
|
60
64
|
getDataStore(): IDataStore;
|
|
61
65
|
/**
|
|
62
|
-
* Create a new entity without
|
|
63
|
-
*
|
|
64
|
-
* @param
|
|
65
|
-
* @param
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
66
|
+
* Create a new entity without validation.
|
|
67
|
+
*
|
|
68
|
+
* @param name - Display name for the entity
|
|
69
|
+
* @param type - Entity type (room, item, actor, etc.)
|
|
70
|
+
* @returns The created entity
|
|
71
|
+
*/
|
|
72
|
+
createEntity(name: string, type?: string): IFEntity;
|
|
73
|
+
/**
|
|
74
|
+
* Move an entity without validation. Can move into closed/locked containers.
|
|
75
|
+
*
|
|
76
|
+
* @param entityId - ID of entity to move
|
|
77
|
+
* @param targetId - ID of target location (null to remove from world)
|
|
78
|
+
* @returns Always true (no validation to fail)
|
|
79
|
+
*/
|
|
80
|
+
moveEntity(entityId: string, targetId: string | null): boolean;
|
|
81
|
+
getEntity(id: string): IFEntity | undefined;
|
|
82
|
+
hasEntity(id: string): boolean;
|
|
83
|
+
removeEntity(id: string): boolean;
|
|
84
|
+
getAllEntities(): IFEntity[];
|
|
85
|
+
updateEntity(entityId: string, updater: (entity: IFEntity) => void): void;
|
|
86
|
+
getLocation(entityId: string): string | undefined;
|
|
87
|
+
getContents(containerId: string, options?: ContentsOptions): IFEntity[];
|
|
88
|
+
canMoveEntity(entityId: string, targetId: string | null): boolean;
|
|
89
|
+
getContainingRoom(entityId: string): IFEntity | undefined;
|
|
90
|
+
getAllContents(entityId: string, options?: ContentsOptions): IFEntity[];
|
|
91
|
+
getState(): WorldState;
|
|
92
|
+
setState(state: WorldState): void;
|
|
93
|
+
getStateValue(key: string): any;
|
|
94
|
+
setStateValue(key: string, value: any): void;
|
|
95
|
+
getPrompt(): GamePrompt;
|
|
96
|
+
setPrompt(prompt: GamePrompt): void;
|
|
97
|
+
findByTrait(traitType: TraitType): IFEntity[];
|
|
98
|
+
findByType(entityType: string): IFEntity[];
|
|
99
|
+
findWhere(predicate: (entity: IFEntity) => boolean): IFEntity[];
|
|
100
|
+
getVisible(observerId: string): IFEntity[];
|
|
101
|
+
getInScope(observerId: string): IFEntity[];
|
|
102
|
+
canSee(observerId: string, targetId: string): boolean;
|
|
103
|
+
getRelated(entityId: string, relationshipType: string): string[];
|
|
104
|
+
areRelated(entity1Id: string, entity2Id: string, relationshipType: string): boolean;
|
|
105
|
+
addRelationship(entity1Id: string, entity2Id: string, relationshipType: string): void;
|
|
106
|
+
removeRelationship(entity1Id: string, entity2Id: string, relationshipType: string): void;
|
|
107
|
+
getTotalWeight(entityId: string): number;
|
|
108
|
+
wouldCreateLoop(entityId: string, targetId: string): boolean;
|
|
109
|
+
findPath(fromRoomId: string, toRoomId: string): string[] | null;
|
|
110
|
+
getPlayer(): IFEntity | undefined;
|
|
111
|
+
setPlayer(entityId: string): void;
|
|
112
|
+
connectRooms(room1Id: string, room2Id: string, direction: DirectionType): void;
|
|
113
|
+
createDoor(displayName: string, opts: {
|
|
114
|
+
room1Id: string;
|
|
115
|
+
room2Id: string;
|
|
116
|
+
direction: DirectionType;
|
|
117
|
+
description?: string;
|
|
118
|
+
aliases?: string[];
|
|
119
|
+
isOpen?: boolean;
|
|
120
|
+
isLocked?: boolean;
|
|
121
|
+
keyId?: string;
|
|
122
|
+
}): IFEntity;
|
|
123
|
+
registerCapability(name: string, registration: Partial<ICapabilityRegistration>): void;
|
|
124
|
+
updateCapability(name: string, data: Partial<ICapabilityData>): void;
|
|
125
|
+
getCapability(name: string): ICapabilityData | undefined;
|
|
126
|
+
hasCapability(name: string): boolean;
|
|
127
|
+
awardScore(id: string, points: number, description: string): boolean;
|
|
128
|
+
revokeScore(id: string): boolean;
|
|
129
|
+
hasScore(id: string): boolean;
|
|
130
|
+
getScore(): number;
|
|
131
|
+
getScoreEntries(): ScoreEntry[];
|
|
132
|
+
setMaxScore(max: number): void;
|
|
133
|
+
getMaxScore(): number;
|
|
134
|
+
toJSON(): string;
|
|
135
|
+
loadJSON(json: string): void;
|
|
136
|
+
clear(): void;
|
|
137
|
+
registerEventHandler(eventType: string, handler: EventHandler): void;
|
|
138
|
+
unregisterEventHandler(eventType: string): void;
|
|
139
|
+
registerEventValidator(eventType: string, validator: EventValidator): void;
|
|
140
|
+
registerEventPreviewer(eventType: string, previewer: EventPreviewer): void;
|
|
141
|
+
connectEventProcessor(wiring: IEventProcessorWiring): void;
|
|
142
|
+
chainEvent(triggerType: string, handler: EventChainHandler, options?: ChainEventOptions): void;
|
|
143
|
+
applyEvent(event: ISemanticEvent): void;
|
|
144
|
+
canApplyEvent(event: ISemanticEvent): boolean;
|
|
145
|
+
previewEvent(event: ISemanticEvent): WorldChange[];
|
|
146
|
+
getAppliedEvents(): ISemanticEvent[];
|
|
147
|
+
getEventsSince(timestamp: number): ISemanticEvent[];
|
|
148
|
+
clearEventHistory(): void;
|
|
149
|
+
getScopeRegistry(): ScopeRegistry;
|
|
150
|
+
addScopeRule(rule: IScopeRule): void;
|
|
151
|
+
removeScopeRule(ruleId: string): boolean;
|
|
152
|
+
evaluateScope(actorId: string, actionId?: string): string[];
|
|
153
|
+
getGrammarVocabularyProvider(): IGrammarVocabularyProvider;
|
|
126
154
|
/**
|
|
127
|
-
*
|
|
155
|
+
* Move multiple entities to a container in one operation.
|
|
128
156
|
*/
|
|
129
|
-
|
|
157
|
+
populate(containerId: string, entityIds: string[]): void;
|
|
130
158
|
/**
|
|
131
|
-
*
|
|
159
|
+
* Add a trait to an entity.
|
|
132
160
|
*/
|
|
133
|
-
|
|
161
|
+
addTrait(entityId: string, trait: ITrait): void;
|
|
134
162
|
/**
|
|
135
|
-
*
|
|
163
|
+
* Remove a trait from an entity.
|
|
136
164
|
*/
|
|
165
|
+
removeTrait(entityId: string, traitType: TraitType): void;
|
|
137
166
|
private generateId;
|
|
138
|
-
/**
|
|
139
|
-
* Emit an author event if event recording is enabled
|
|
140
|
-
*/
|
|
141
|
-
private emitEvent;
|
|
142
|
-
/**
|
|
143
|
-
* Register an event handler for author events
|
|
144
|
-
*/
|
|
145
|
-
registerEventHandler(eventType: string, handler: (event: any) => void): void;
|
|
146
|
-
/**
|
|
147
|
-
* Unregister an event handler
|
|
148
|
-
*/
|
|
149
|
-
unregisterEventHandler(eventType: string): void;
|
|
150
167
|
}
|
|
151
168
|
//# sourceMappingURL=AuthorModel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorModel.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/world-model/src/world/AuthorModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AuthorModel.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/world-model/src/world/AuthorModel.ts"],"names":[],"mappings":"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"}
|