@sharpee/plugins 1.0.0 → 1.1.0
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/README.md +50 -0
- package/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/plugin-registry.d.ts +20 -0
- package/plugin-registry.d.ts.map +1 -1
- package/plugin-registry.js +20 -0
- package/plugin-registry.js.map +1 -1
- package/turn-plugin-context.d.ts +18 -2
- package/turn-plugin-context.d.ts.map +1 -1
- package/turn-plugin.d.ts +19 -1
- package/turn-plugin.d.ts.map +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# @sharpee/plugins
|
|
2
|
+
|
|
3
|
+
Plugin contracts for Sharpee engine turn-cycle extensibility.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @sharpee/plugins
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
This package defines the turn-plugin contract the engine uses to extend each turn (ADR-120):
|
|
14
|
+
|
|
15
|
+
- **`TurnPlugin`** - The interface a plugin implements: an `id`, a `priority`, and an `onAfterAction` hook called once after each successful player action.
|
|
16
|
+
- **`TurnPluginContext`** - The read-only per-turn context (world, turn, player, seeded RNG, action result and events) passed to every plugin.
|
|
17
|
+
- **`TurnPluginActionResult`** - Summary of the player action that just completed.
|
|
18
|
+
- **`PluginRegistry`** - Holds a game's plugins, hands them to the engine in descending priority order, and aggregates plugin save/restore state.
|
|
19
|
+
|
|
20
|
+
The engine owns a single `PluginRegistry`. Stories add behaviour by registering the implementing packages — NPC (priority 100), state machine (75), scheduler (50) — rather than implementing `TurnPlugin` directly.
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
This package is contracts-only. The engine consumes `TurnPlugin`/`PluginRegistry`; the plugin packages implement them. A minimal plugin looks like:
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { TurnPlugin, TurnPluginContext } from '@sharpee/plugins';
|
|
28
|
+
import { ISemanticEvent } from '@sharpee/core';
|
|
29
|
+
|
|
30
|
+
class HeartbeatPlugin implements TurnPlugin {
|
|
31
|
+
id = 'example.heartbeat';
|
|
32
|
+
priority = 10;
|
|
33
|
+
|
|
34
|
+
onAfterAction(ctx: TurnPluginContext): ISemanticEvent[] {
|
|
35
|
+
// Contribute additional events on turn `ctx.turn`; return [] for nothing.
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Related Packages
|
|
42
|
+
|
|
43
|
+
- [@sharpee/plugin-npc](https://www.npmjs.com/package/@sharpee/plugin-npc) - NPC behaviours and turn processing
|
|
44
|
+
- [@sharpee/plugin-scheduler](https://www.npmjs.com/package/@sharpee/plugin-scheduler) - Daemons and fuses
|
|
45
|
+
- [@sharpee/plugin-state-machine](https://www.npmjs.com/package/@sharpee/plugin-state-machine) - Declarative puzzle/narrative orchestration
|
|
46
|
+
- [@sharpee/sharpee](https://www.npmjs.com/package/@sharpee/sharpee) - Full platform bundle
|
|
47
|
+
|
|
48
|
+
## License
|
|
49
|
+
|
|
50
|
+
MIT
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/plugins/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sharpee/plugins",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Plugin contracts for Sharpee engine turn-cycle extensibility",
|
|
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": "^1.
|
|
16
|
-
"@sharpee/world-model": "^1.
|
|
15
|
+
"@sharpee/core": "^1.1.0",
|
|
16
|
+
"@sharpee/world-model": "^1.1.0"
|
|
17
17
|
},
|
|
18
18
|
"keywords": [
|
|
19
19
|
"interactive-fiction",
|
package/plugin-registry.d.ts
CHANGED
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
import { TurnPlugin } from './turn-plugin';
|
|
2
|
+
/**
|
|
3
|
+
* Holds the turn plugins for a running game and hands them to the engine in
|
|
4
|
+
* priority order each turn (ADR-120). The engine owns the single registry;
|
|
5
|
+
* stories add behaviour through the plugin packages (NPC, scheduler, state
|
|
6
|
+
* machine) rather than implementing {@link TurnPlugin} directly.
|
|
7
|
+
*/
|
|
2
8
|
export declare class PluginRegistry {
|
|
3
9
|
private plugins;
|
|
10
|
+
/** Register a plugin. Throws if a plugin with the same id is already registered. */
|
|
4
11
|
register(plugin: TurnPlugin): void;
|
|
12
|
+
/** Remove a plugin by id; a no-op if no such plugin is registered. */
|
|
5
13
|
unregister(id: string): void;
|
|
14
|
+
/** Remove all registered plugins. */
|
|
6
15
|
clear(): void;
|
|
16
|
+
/** All registered plugins, sorted by descending priority (turn run order). */
|
|
7
17
|
getAll(): TurnPlugin[];
|
|
18
|
+
/** Look up a single plugin by id, or `undefined` if absent. */
|
|
8
19
|
getById(id: string): TurnPlugin | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Collect each plugin's {@link TurnPlugin.getState} result, keyed by plugin id,
|
|
22
|
+
* for inclusion in a save. Plugins without `getState` are omitted.
|
|
23
|
+
*/
|
|
9
24
|
getStates(): Record<string, unknown>;
|
|
25
|
+
/**
|
|
26
|
+
* Restore plugin state from a prior {@link PluginRegistry.getStates} result on
|
|
27
|
+
* load, calling each matching plugin's {@link TurnPlugin.setState}. Entries
|
|
28
|
+
* with no registered plugin (or no `setState`) are skipped.
|
|
29
|
+
*/
|
|
10
30
|
setStates(states: Record<string, unknown>): void;
|
|
11
31
|
}
|
|
12
32
|
//# sourceMappingURL=plugin-registry.d.ts.map
|
package/plugin-registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/plugins/src/plugin-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAsC;IAErD,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAOlC,sEAAsE;IACtE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,qCAAqC;IACrC,KAAK,IAAI,IAAI;IAIb,8EAA8E;IAC9E,MAAM,IAAI,UAAU,EAAE;IAMtB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI3C;;;OAGG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUpC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAQjD"}
|
package/plugin-registry.js
CHANGED
|
@@ -1,26 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PluginRegistry = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Holds the turn plugins for a running game and hands them to the engine in
|
|
6
|
+
* priority order each turn (ADR-120). The engine owns the single registry;
|
|
7
|
+
* stories add behaviour through the plugin packages (NPC, scheduler, state
|
|
8
|
+
* machine) rather than implementing {@link TurnPlugin} directly.
|
|
9
|
+
*/
|
|
4
10
|
class PluginRegistry {
|
|
5
11
|
plugins = new Map();
|
|
12
|
+
/** Register a plugin. Throws if a plugin with the same id is already registered. */
|
|
6
13
|
register(plugin) {
|
|
7
14
|
if (this.plugins.has(plugin.id)) {
|
|
8
15
|
throw new Error(`Plugin already registered: ${plugin.id}`);
|
|
9
16
|
}
|
|
10
17
|
this.plugins.set(plugin.id, plugin);
|
|
11
18
|
}
|
|
19
|
+
/** Remove a plugin by id; a no-op if no such plugin is registered. */
|
|
12
20
|
unregister(id) {
|
|
13
21
|
this.plugins.delete(id);
|
|
14
22
|
}
|
|
23
|
+
/** Remove all registered plugins. */
|
|
15
24
|
clear() {
|
|
16
25
|
this.plugins.clear();
|
|
17
26
|
}
|
|
27
|
+
/** All registered plugins, sorted by descending priority (turn run order). */
|
|
18
28
|
getAll() {
|
|
19
29
|
return Array.from(this.plugins.values()).sort((a, b) => b.priority - a.priority);
|
|
20
30
|
}
|
|
31
|
+
/** Look up a single plugin by id, or `undefined` if absent. */
|
|
21
32
|
getById(id) {
|
|
22
33
|
return this.plugins.get(id);
|
|
23
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Collect each plugin's {@link TurnPlugin.getState} result, keyed by plugin id,
|
|
37
|
+
* for inclusion in a save. Plugins without `getState` are omitted.
|
|
38
|
+
*/
|
|
24
39
|
getStates() {
|
|
25
40
|
const states = {};
|
|
26
41
|
for (const plugin of this.plugins.values()) {
|
|
@@ -30,6 +45,11 @@ class PluginRegistry {
|
|
|
30
45
|
}
|
|
31
46
|
return states;
|
|
32
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Restore plugin state from a prior {@link PluginRegistry.getStates} result on
|
|
50
|
+
* load, calling each matching plugin's {@link TurnPlugin.setState}. Entries
|
|
51
|
+
* with no registered plugin (or no `setState`) are skipped.
|
|
52
|
+
*/
|
|
33
53
|
setStates(states) {
|
|
34
54
|
for (const [id, state] of Object.entries(states)) {
|
|
35
55
|
const plugin = this.plugins.get(id);
|
package/plugin-registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-registry.js","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/plugins/src/plugin-registry.ts"],"names":[],"mappings":";;;AAEA,MAAa,cAAc;IACjB,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAC;IAErD,QAAQ,CAAC,MAAkB;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAClC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,MAA+B;QACvC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"plugin-registry.js","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/plugins/src/plugin-registry.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,MAAa,cAAc;IACjB,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAC;IAErD,oFAAoF;IACpF,QAAQ,CAAC,MAAkB;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,sEAAsE;IACtE,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,qCAAqC;IACrC,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,8EAA8E;IAC9E,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAClC,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAA+B;QACvC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA5DD,wCA4DC"}
|
package/turn-plugin-context.d.ts
CHANGED
|
@@ -1,18 +1,34 @@
|
|
|
1
|
-
import { EntityId, SeededRandom, ISemanticEvent } from
|
|
2
|
-
import { WorldModel } from
|
|
1
|
+
import { EntityId, SeededRandom, ISemanticEvent } from '@sharpee/core';
|
|
2
|
+
import { WorldModel } from '@sharpee/world-model';
|
|
3
|
+
/** Summary of the player action that just completed, passed to each plugin. */
|
|
3
4
|
export interface TurnPluginActionResult {
|
|
5
|
+
/** The action's id (the verb that ran). */
|
|
4
6
|
actionId: string;
|
|
7
|
+
/** Whether the action succeeded. Plugins only run after successful actions. */
|
|
5
8
|
success: boolean;
|
|
9
|
+
/** The action's direct-object entity, when it had one. */
|
|
6
10
|
targetId?: EntityId;
|
|
11
|
+
/** Arbitrary data the action chose to share, keyed by the action. */
|
|
7
12
|
sharedData?: Record<string, unknown>;
|
|
8
13
|
}
|
|
14
|
+
/** Read-only turn context the engine passes to each plugin's onAfterAction. */
|
|
9
15
|
export interface TurnPluginContext {
|
|
16
|
+
/** The live world model. */
|
|
10
17
|
world: WorldModel;
|
|
18
|
+
/** The current turn number. */
|
|
11
19
|
turn: number;
|
|
20
|
+
/** The player entity id. */
|
|
12
21
|
playerId: EntityId;
|
|
22
|
+
/** The player's current location id. */
|
|
13
23
|
playerLocation: EntityId;
|
|
24
|
+
/**
|
|
25
|
+
* The engine's seeded RNG. Use this instead of `Math.random` so turns stay
|
|
26
|
+
* deterministic and replayable.
|
|
27
|
+
*/
|
|
14
28
|
random: SeededRandom;
|
|
29
|
+
/** The action that just completed this turn. */
|
|
15
30
|
actionResult?: TurnPluginActionResult;
|
|
31
|
+
/** The semantic events the action emitted this turn. */
|
|
16
32
|
actionEvents?: ISemanticEvent[];
|
|
17
33
|
}
|
|
18
34
|
//# sourceMappingURL=turn-plugin-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-plugin-context.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"turn-plugin-context.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/plugins/src/turn-plugin-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,+EAA+E;AAC/E,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,wCAAwC;IACxC,cAAc,EAAE,QAAQ,CAAC;IACzB;;;OAGG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB,gDAAgD;IAChD,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,wDAAwD;IACxD,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;CACjC"}
|
package/turn-plugin.d.ts
CHANGED
|
@@ -1,10 +1,28 @@
|
|
|
1
|
-
import { ISemanticEvent } from
|
|
1
|
+
import { ISemanticEvent } from '@sharpee/core';
|
|
2
2
|
import { TurnPluginContext } from './turn-plugin-context';
|
|
3
|
+
/**
|
|
4
|
+
* A turn-cycle plugin: code that runs once after each successful player action
|
|
5
|
+
* to contribute additional world changes and events (ADR-120).
|
|
6
|
+
*
|
|
7
|
+
* The engine invokes every registered plugin's {@link TurnPlugin.onAfterAction}
|
|
8
|
+
* in descending {@link TurnPlugin.priority} order (NPC behaviour at 100, state
|
|
9
|
+
* machines at 75, the scheduler at 50). Plugins do not run for meta-commands or
|
|
10
|
+
* for failed actions.
|
|
11
|
+
*/
|
|
3
12
|
export interface TurnPlugin {
|
|
13
|
+
/** Unique plugin identifier. Registering two plugins with the same id throws. */
|
|
4
14
|
id: string;
|
|
15
|
+
/** Run order within a turn; higher priority runs first. */
|
|
5
16
|
priority: number;
|
|
17
|
+
/**
|
|
18
|
+
* Called once per successful player action. Return the semantic events the
|
|
19
|
+
* plugin produces; the engine merges a non-empty array into the turn's event
|
|
20
|
+
* stream. Return an empty array to contribute nothing.
|
|
21
|
+
*/
|
|
6
22
|
onAfterAction(context: TurnPluginContext): ISemanticEvent[];
|
|
23
|
+
/** Optional: return serializable state to persist when the game is saved. */
|
|
7
24
|
getState?(): unknown;
|
|
25
|
+
/** Optional: restore previously-saved state when the game is loaded. */
|
|
8
26
|
setState?(state: unknown): void;
|
|
9
27
|
}
|
|
10
28
|
//# sourceMappingURL=turn-plugin.d.ts.map
|
package/turn-plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-plugin.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"turn-plugin.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/plugins/src/turn-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,iFAAiF;IACjF,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,EAAE,CAAC;IAC5D,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,OAAO,CAAC;IACrB,wEAAwE;IACxE,QAAQ,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACjC"}
|