def-game 1.0.7 → 2.0.1
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/dist/index.d.ts +2 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -46
- package/dist/simulator.d.ts +10 -0
- package/dist/simulator.d.ts.map +1 -0
- package/dist/simulator.js +47 -0
- package/dist/types.d.ts +57 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,35 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
export interface DefaultGameLogicState {
|
|
4
|
-
}
|
|
5
|
-
export type WsEvent<T extends keyof M, M extends Record<string, any>> = {
|
|
6
|
-
type: T;
|
|
7
|
-
payload: M[T];
|
|
8
|
-
};
|
|
9
|
-
export type Task<L extends DefaultGameLogicState> = {
|
|
10
|
-
type: string;
|
|
11
|
-
execute: (gs: L) => TaskResult<L>;
|
|
12
|
-
};
|
|
13
|
-
export interface TaskResult<L extends DefaultGameLogicState> {
|
|
14
|
-
type: string;
|
|
15
|
-
state: L;
|
|
16
|
-
}
|
|
17
|
-
export type GameState<L extends DefaultGameLogicState> = {
|
|
18
|
-
gameLogicState: L;
|
|
19
|
-
taskQueue: Task<L>[];
|
|
20
|
-
};
|
|
21
|
-
export interface GameRule<L extends DefaultGameLogicState, A extends Record<string, any>> {
|
|
22
|
-
initialGameLogicState: () => L;
|
|
23
|
-
divider<T extends keyof A>(event: WsEvent<T, A>): Task<L>[];
|
|
24
|
-
prioritizeTasks(newTasks: Task<L>[], gameState: GameState<L>): GameState<L>;
|
|
25
|
-
doTask(state: GameState<L>): GameState<L>;
|
|
26
|
-
}
|
|
27
|
-
export declare class GameEngine<S extends DefaultGameLogicState, A extends Record<string, any>> {
|
|
28
|
-
private rules;
|
|
29
|
-
private storage;
|
|
30
|
-
constructor(rules: GameRule<S, A>);
|
|
31
|
-
executeAction<T extends keyof A>(action: WsEvent<T, A>): GameState<S>;
|
|
32
|
-
getState(): GameState<S>;
|
|
33
|
-
setState(state: GameState<S>): void;
|
|
34
|
-
}
|
|
1
|
+
export * from './types';
|
|
2
|
+
export * from './simulator';
|
|
35
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,48 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
3
|
-
|
|
4
|
-
;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
constructor(rules) {
|
|
8
|
-
this.rules = rules;
|
|
9
|
-
this.storage = new InMemoryGameStateStorage();
|
|
10
|
-
// Initialize the game state
|
|
11
|
-
const gameState = {
|
|
12
|
-
gameLogicState: this.rules.initialGameLogicState(),
|
|
13
|
-
taskQueue: []
|
|
14
|
-
};
|
|
15
|
-
this.storage.saveGameState(gameState);
|
|
16
|
-
}
|
|
17
|
-
executeAction(action) {
|
|
18
|
-
const tasks = this.rules.divider(action);
|
|
19
|
-
const state = this.storage.loadGameState();
|
|
20
|
-
// ------ Game Logic ------
|
|
21
|
-
const updatedQueueState = this.rules.prioritizeTasks(tasks, state);
|
|
22
|
-
const newState = this.rules.doTask(updatedQueueState);
|
|
23
|
-
// ------------------------
|
|
24
|
-
this.storage.saveGameState(newState);
|
|
25
|
-
return newState; // this means that this game state is broadcasted to all players
|
|
26
|
-
}
|
|
27
|
-
getState() {
|
|
28
|
-
return this.storage.loadGameState();
|
|
29
|
-
}
|
|
30
|
-
setState(state) {
|
|
31
|
-
this.storage.saveGameState(state);
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
32
7
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
saveGameState(state) {
|
|
46
|
-
this.state = state;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./simulator"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DefaultGameLogicState, GameRule, GameState, ToServer } from "./types";
|
|
2
|
+
export declare class GameEngine<S extends Record<string, any>, C extends Record<string, any>, L extends DefaultGameLogicState<S, C>> {
|
|
3
|
+
private rules;
|
|
4
|
+
private storage;
|
|
5
|
+
constructor(rules: GameRule<S, C, L>);
|
|
6
|
+
executeAction(action: ToServer<S, C>): GameState<S, C, L>;
|
|
7
|
+
getState(): GameState<S, C, L>;
|
|
8
|
+
setState(state: GameState<S, C, L>): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=simulator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../src/simulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG/E,qBAAa,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;IACvH,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,OAAO,CAA4B;gBAE/B,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAYpC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAezD,QAAQ,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAI9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;CAG5C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GameEngine = void 0;
|
|
4
|
+
// This is a simulator
|
|
5
|
+
class GameEngine {
|
|
6
|
+
constructor(rules) {
|
|
7
|
+
this.rules = rules;
|
|
8
|
+
this.storage = new InMemoryGameStateStorage();
|
|
9
|
+
// Initialize the game state
|
|
10
|
+
const gameState = {
|
|
11
|
+
gameLogicState: this.rules.initialGameLogicState(),
|
|
12
|
+
taskQueue: []
|
|
13
|
+
};
|
|
14
|
+
this.storage.saveGameState(gameState);
|
|
15
|
+
}
|
|
16
|
+
executeAction(action) {
|
|
17
|
+
const tasks = this.rules.divider(action);
|
|
18
|
+
const state = this.storage.loadGameState();
|
|
19
|
+
// ------ Game Logic ------
|
|
20
|
+
const updatedQueueState = this.rules.prioritizeTasks(tasks, state);
|
|
21
|
+
const newState = this.rules.doTask(updatedQueueState);
|
|
22
|
+
// ------------------------
|
|
23
|
+
this.storage.saveGameState(newState);
|
|
24
|
+
return newState; // this means that this game state is broadcasted to all players
|
|
25
|
+
}
|
|
26
|
+
getState() {
|
|
27
|
+
return this.storage.loadGameState();
|
|
28
|
+
}
|
|
29
|
+
setState(state) {
|
|
30
|
+
this.storage.saveGameState(state);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.GameEngine = GameEngine;
|
|
34
|
+
class InMemoryGameStateStorage {
|
|
35
|
+
constructor() {
|
|
36
|
+
this.state = null;
|
|
37
|
+
}
|
|
38
|
+
loadGameState() {
|
|
39
|
+
if (this.state === null) {
|
|
40
|
+
throw new Error('Game state is not initialized');
|
|
41
|
+
}
|
|
42
|
+
return this.state;
|
|
43
|
+
}
|
|
44
|
+
saveGameState(state) {
|
|
45
|
+
this.state = state;
|
|
46
|
+
}
|
|
47
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
type Map = Record<string, any>;
|
|
2
|
+
export type FromServerMap<T extends Map> = T;
|
|
3
|
+
export type ToServerMap<T extends Map> = T;
|
|
4
|
+
export type InteractionMapType<S extends Map, C extends Map> = {
|
|
5
|
+
[key in InteractionKey<S, C>]: {
|
|
6
|
+
fromServer: FromServerMap<S>[key];
|
|
7
|
+
toServer: ToServerMap<C>[key];
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export interface DefaultGameLogicState<S extends Map, C extends Map> {
|
|
11
|
+
forClient: ForClient<S, C>;
|
|
12
|
+
}
|
|
13
|
+
export type FromServerDataType<T extends Map> = keyof FromServerMap<T>;
|
|
14
|
+
export type ToServerDataType<T extends Map> = keyof ToServerMap<T>;
|
|
15
|
+
export type FromServerData<T extends Map> = {
|
|
16
|
+
type: FromServerDataType<T>;
|
|
17
|
+
payload: FromServerMap<T>[FromServerDataType<T>];
|
|
18
|
+
};
|
|
19
|
+
export type ToServerData<T extends Map> = {
|
|
20
|
+
type: ToServerDataType<T>;
|
|
21
|
+
payload: ToServerMap<T>[ToServerDataType<T>];
|
|
22
|
+
};
|
|
23
|
+
export type InteractionKey<S extends Map, C extends Map> = Extract<keyof FromServerMap<S>, keyof ToServerMap<C>>;
|
|
24
|
+
export type InteractionFromServerData<S extends Map, C extends Map> = {
|
|
25
|
+
type: InteractionKey<S, C>;
|
|
26
|
+
payload: InteractionMapType<S, C>[InteractionKey<S, C>]["fromServer"];
|
|
27
|
+
};
|
|
28
|
+
export type InteractionToServerData<S extends Map, C extends Map> = {
|
|
29
|
+
type: InteractionKey<S, C>;
|
|
30
|
+
payload: InteractionMapType<S, C>[InteractionKey<S, C>]["toServer"];
|
|
31
|
+
};
|
|
32
|
+
export type FromServer<S extends Map, C extends Map> = FromServerData<S> | InteractionFromServerData<S, C>;
|
|
33
|
+
export type ToServer<S extends Map, C extends Map> = ToServerData<S> | InteractionToServerData<S, C>;
|
|
34
|
+
export type PlayerId = string;
|
|
35
|
+
export type ForClient<S extends Map, C extends Map> = {
|
|
36
|
+
[key: PlayerId]: FromServer<S, C>;
|
|
37
|
+
};
|
|
38
|
+
export type Task<S extends Map, C extends Map, L extends DefaultGameLogicState<S, C>> = {
|
|
39
|
+
type: string;
|
|
40
|
+
execute: (gs: L) => TaskResult<S, C, L>;
|
|
41
|
+
};
|
|
42
|
+
export interface TaskResult<S extends Map, C extends Map, L extends DefaultGameLogicState<S, C>> {
|
|
43
|
+
type: string;
|
|
44
|
+
state: L;
|
|
45
|
+
}
|
|
46
|
+
export type GameState<S extends Map, C extends Map, L extends DefaultGameLogicState<S, C>> = {
|
|
47
|
+
gameLogicState: L;
|
|
48
|
+
taskQueue: Task<S, C, L>[];
|
|
49
|
+
};
|
|
50
|
+
export interface GameRule<S extends Map, C extends Map, L extends DefaultGameLogicState<S, C>> {
|
|
51
|
+
initialGameLogicState: () => L;
|
|
52
|
+
divider(event: ToServer<S, C>): Task<S, C, L>[];
|
|
53
|
+
prioritizeTasks(newTasks: Task<S, C, L>[], gameState: GameState<S, C, L>): GameState<S, C, L>;
|
|
54
|
+
doTask(state: GameState<S, C, L>): GameState<S, C, L>;
|
|
55
|
+
}
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAG/B,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AAC7C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AAC3C,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI;KAC1D,GAAG,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAC3B,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACjC;CACJ,CAAA;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG;IAC/D,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,GAAG,IAAI,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;AACvE,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,GAAG,IAAI,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,GAAG,IAAI;IACxC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;CACpD,CAAA;AACD,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,GAAG,IAAI;IACtC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;CAChD,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,IACjD,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI;IAClE,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;CACzE,CAAC;AACF,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI;IAChE,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3G,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAErG,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC9B,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI;IAAE,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAAE,CAAC;AAE7F,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAC3C,CAAC;AACF,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;CACZ;AACD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI;IACzF,cAAc,EAAE,CAAC,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;CAC9B,CAAC;AACF,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;IACzF,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAChD,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CACzD"}
|
package/dist/types.js
ADDED