Skip to content
11 changes: 11 additions & 0 deletions src/plugins/plugin-events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@

import { Events } from './events/events';

export interface EventsAPI {
endGame?(...args: any[]): void;
endPhase?(...args: any[]): void;
endStage?(...args: any[]): void;
endTurn?(...args: any[]): void;
pass?(...args: any[]): void;
setActivePlayers?(...args: any[]): void;
setPhase?(...args: any[]): void;
setStage?(...args: any[]): void;
}

export default {
name: 'events',

Expand Down
19 changes: 15 additions & 4 deletions src/plugins/plugin-player.js → src/plugins/plugin-player.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@
* https://opensource.org/licenses/MIT.
*/

export interface PlayerAPI {
state: {
[playerId: string]: object;
};
get(): any;
set(value: any): any;
opponent?: {
get(): any;
set(value: any): any;
};
}

Comment thread
janKir marked this conversation as resolved.
/**
* Plugin that maintains state for each player in G.players.
* During a turn, G.player will contain the object for the current player.
Expand All @@ -20,19 +32,18 @@ export default {
return { players: api.state };
},

api: ({ ctx, data }) => {
api: ({ ctx, data }): PlayerAPI => {
let state = data.players;
let result = { state };

const get = () => {
return data.players[ctx.currentPlayer];
};
result.get = get;

const set = value => {
return (state[ctx.currentPlayer] = value);
};
result.set = set;

let result: PlayerAPI = { state, get, set };

if (ctx.numPlayers === 2) {
const other = ctx.currentPlayer === '0' ? '1' : '0';
Expand Down
17 changes: 17 additions & 0 deletions src/plugins/plugin-random.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,23 @@

import { Random } from './random/random';

export interface RandomAPI {
D4(): number;
D4(diceCount: number): number[];
D6(): number;
D6(diceCount: number): number[];
D10(): number;
D10(diceCount: number): number[];
D12(): number;
D12(diceCount: number): number[];
D20(): number;
D20(diceCount: number): number[];
Die(spotvalue?: number): number;
Die(spotvalue: number, diceCount: number): number[];
Number(): number;
Shuffle<T>(deck: T[]): T[];
}

export default {
name: 'random',

Expand Down
9 changes: 9 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ import { Object } from 'ts-toolbelt';
import * as ActionCreators from './core/action-creators';
import { Flow } from './core/flow';
import * as StorageAPI from './server/db/base';
import { EventsAPI } from './plugins/plugin-events';
import { PlayerAPI } from './plugins/plugin-player';
import { RandomAPI } from './plugins/plugin-random';

export { StorageAPI };

Expand Down Expand Up @@ -42,6 +45,12 @@ export interface Ctx {
_random?: {
seed: string | number;
};
// enhanced by events plugin
events?: EventsAPI;
// enhanced by player plugin
player?: PlayerAPI;
// enhanced by random plugin
random?: RandomAPI;
}

export interface PluginState {
Expand Down