import Game from './game'; export interface PhaseConstructor { new(game:Game): Phase; readonly id: string; }; interface Phase { onStart?(...data:Array): void|boolean|Promise; onEnd?(): void|Promise; } abstract class Phase { readonly game: Game; static readonly id: string; constructor(game: Game) { this.game = game; this.onStart = this.onStart ? this.onStart.bind(this) : () => {}; this.onEnd = this.onEnd ? this.onEnd.bind(this) : () => {}; } async start(...data:Array): Promise { return this.onStart(...data); } async end(): Promise { return this.onEnd(); } } export default Phase;