phaser3-rex-plugins
Version:
189 lines (173 loc) • 4.22 kB
TypeScript
import EventEmitter from '../../utils/eventemitter/EventEmitter';
export default FSMBase;
declare namespace FSMBase {
/**
* Configuration for a single state.
*/
interface IStateConfig {
/**
* State name.
*/
name?: string,
/**
* Next state name or resolver.
*/
next?: string | ((this: FSMBase) => string),
/**
* Enter callback.
*/
enter?: (this: FSMBase) => void,
/**
* Exit callback.
*/
exit?: (this: FSMBase) => void,
}
/**
* Configuration options for creating an FSMBase.
*/
interface IConfig {
/**
* Start state name.
*/
start?: string,
/**
* State configuration map.
*/
states?: { [name: string]: IStateConfig },
/**
* Init callback.
*/
init?: Function,
/**
* Extension data.
*/
extend?: {
[name: string]: any,
},
/**
* Enable the state machine.
*/
enable?: boolean,
/**
* Event emitter instance or false to disable.
*/
eventEmitter?: EventEmitter | false,
}
namespace Events {
/**
* State change callback.
*/
type StateChangeCallbackType = (state: FSMBase) => void;
/**
* Exit state callback.
*/
type ExitStateCallbackType = (state: FSMBase) => void;
/**
* Enter state callback.
*/
type EnterStateCallbackType = (state: FSMBase) => void;
}
}
/**
* Base finite state machine with event support.
*/
declare class FSMBase extends EventEmitter {
/**
* Create an FSMBase.
*
* @param config - Configuration options.
*/
constructor(config?: FSMBase.IConfig);
/**
* Start the state machine.
*
* @param newState - State name to start.
* @returns This FSMBase instance.
*/
start(newState: string): this;
/**
* Advance to the next state.
*
* @returns This FSMBase instance.
*/
next(): this;
/**
* Go to a specific state.
*
* @param nextState - State name to go to.
* @returns This FSMBase instance.
*/
goto(nextState: string): this;
/**
* Current state name.
*/
state: string;
/**
* Previous state name.
*/
readonly prevState: string;
/**
* Enable or disable the state machine.
*
* @param enable - Whether to enable.
* @returns This FSMBase instance.
*/
setEnable(enable?: boolean): this;
/**
* Toggle enabled state.
*
* @returns This FSMBase instance.
*/
toggleEnable(): this;
/**
* Whether the state machine is enabled.
*/
enable: boolean;
/**
* Add a state by name.
*
* @param name - State name.
* @param state - State configuration.
* @returns This FSMBase instance.
*/
addState(
name: string,
state: FSMBase.IStateConfig
): this;
/**
* Add a state by config.
*
* @param state - State configuration.
* @returns This FSMBase instance.
*/
addState(state: FSMBase.IStateConfig): this;
/**
* Add multiple states by map.
*
* @param states - State configuration map.
* @returns This FSMBase instance.
*/
addStates(
states: { [name: string]: FSMBase.IStateConfig }
): this;
/**
* Add multiple states by list.
*
* @param states - State configuration list.
* @returns This FSMBase instance.
*/
addStates(
states: FSMBase.IStateConfig[]
): this;
/**
* Run a method by name.
*
* @param methodName - Method name.
* @param args - Method arguments.
* @returns Method result.
*/
runMethod(
methodName: string,
...args: unknown[]
): unknown;
}