werewolf-core
Version:
Are you a WEREWOLF?
53 lines (52 loc) • 2.56 kB
TypeScript
import { Event, EventBase } from './event';
import { Player, Players } from './player';
import { Effect, Effects } from './effect';
import { Field } from './field';
import { HandlerParam, HandlerParamWithPlayer, HandlerParamWithEffect, HandlerProducer, KeyedHandlerProducers, EventAction, EventActions } from './handler';
export interface Package<P extends Player, E extends Effect, F extends Field> {
ruleProducers: Array<HandlerProducer<P, E, F, EventRunner<P, E, F>, HandlerParam<P, E, F, Event, EventRunner<P, E, F>>>>;
playerProducers: KeyedHandlerProducers<P, E, F, EventRunner<P, E, F>, HandlerParamWithPlayer<P, E, F, Event, EventRunner<P, E, F>>>;
effectProducers: KeyedHandlerProducers<P, E, F, EventRunner<P, E, F>, HandlerParamWithEffect<P, E, F, Event, EventRunner<P, E, F>>>;
actions: EventActions<P, E, F, EventRunner<P, E, F>>;
}
export declare class Game<P extends Player, E extends Effect, F extends Field> {
private players;
private effects;
private field;
private ruleProducers;
private playerProducers;
private effectProducers;
private actions;
constructor(initField: F);
loadRuleProducers(ps: Array<HandlerProducer<P, E, F, EventRunner<P, E, F>, HandlerParam<P, E, F, Event, EventRunner<P, E, F>>>>): void;
loadPlayerProducers(ps: KeyedHandlerProducers<P, E, F, EventRunner<P, E, F>, HandlerParamWithPlayer<P, E, F, Event, EventRunner<P, E, F>>>): void;
loadEffectProducers(ps: KeyedHandlerProducers<P, E, F, EventRunner<P, E, F>, HandlerParamWithEffect<P, E, F, Event, EventRunner<P, E, F>>>): void;
loadActions(acts: {
[event: string]: EventAction<P, E, F, Event, EventRunner<P, E, F>>;
}): void;
loadPackage(p: Package<P, E, F>): void;
addPlayer(p: P): void;
addEffect(e: E): void;
removeEffect(id: string): void;
runEvent<Ev extends Event>(e: Ev): Ev;
getPlayers(): Players<P>;
getEffects(): Effects<E>;
getField(): F;
}
export declare class EventRunner<P extends Player, Ef extends Effect, F extends Field> {
private handlers;
private base;
private resultObject?;
private players;
private effects;
private field;
constructor(players: Players<P>, effects: Effects<Ef>, field: F, handlers: Package<P, Ef, F>, base: EventBase | null, resultObject?: {
players?: Players<P>;
effects?: Effects<Ef>;
field?: F;
});
private runOneEvent<Ev>(e, subrunner);
runEvent<Ev extends Event>(e: Ev): Ev;
addEvent<Ev extends Event>(e: Ev): void;
private branchRunner(base);
}