excalibur
Version:
Excalibur.js is a simple JavaScript game engine with TypeScript bindings for making 2D games in HTML5 Canvas. Our mission is to make web game development as simple as possible.
41 lines (40 loc) • 1.37 kB
TypeScript
export interface State<TData> {
name?: string;
transitions: string[];
onEnter?: (context: {
from: string;
eventData?: any;
data: TData;
}) => boolean | void;
onState?: () => any;
onExit?: (context: {
to: string;
data: TData;
}) => boolean | void;
onUpdate?: (data: TData, elapsed: number) => any;
}
export interface StateMachineDescription<TData = any> {
start: string;
states: {
[name: string]: State<TData>;
};
}
export type PossibleStates<TMachine> = TMachine extends StateMachineDescription ? Extract<keyof TMachine['states'], string> : never;
export interface StateMachineState<TData> {
data: TData;
currentState: string;
}
export declare class StateMachine<TPossibleStates extends string, TData> {
startState: State<TData>;
private _currentState;
get currentState(): State<TData>;
set currentState(state: State<TData>);
states: Map<string, State<TData>>;
data: TData;
static create<TMachine extends StateMachineDescription<TData>, TData>(machineDescription: TMachine, data?: TData): StateMachine<PossibleStates<TMachine>, TData>;
in(state: TPossibleStates): boolean;
go(stateName: TPossibleStates, eventData?: any): boolean;
update(elapsed: number): void;
save(saveKey: string): void;
restore(saveKey: string): void;
}