API 参考
createStateMachine
Section titled “createStateMachine”function createStateMachine<TState extends string, TContext = unknown>( initialState: TState, options?: StateMachineOptions<TContext>): IStateMachine<TState, TContext>参数:
initialState- 初始状态options.context- 上下文对象,在回调中可访问options.maxHistorySize- 最大历史记录数(默认 100)options.enableHistory- 是否启用历史记录(默认 true)
| 属性 | 类型 | 描述 |
|---|---|---|
current | TState | 当前状态 |
previous | TState | null | 上一个状态 |
context | TContext | 上下文对象 |
isTransitioning | boolean | 是否正在转换中 |
currentStateDuration | number | 当前状态持续时间(毫秒) |
// 定义状态fsm.defineState('idle', { onEnter: (ctx, from) => {}, onExit: (ctx, to) => {}, onUpdate: (ctx, dt) => {}});
// 检查状态是否存在fsm.hasState('idle'); // true
// 获取状态配置fsm.getStateConfig('idle');
// 获取所有状态fsm.getStates(); // ['idle', 'walk', ...]// 定义转换fsm.defineTransition('idle', 'walk', condition, priority);
// 移除转换fsm.removeTransition('idle', 'walk');
// 获取从某状态出发的所有转换fsm.getTransitionsFrom('idle');
// 检查是否可以转换fsm.canTransition('walk'); // true/false
// 手动转换fsm.transition('walk');
// 强制转换(忽略条件)fsm.transition('walk', true);
// 自动评估转换条件fsm.evaluateTransitions();// 更新状态机(调用当前状态的 onUpdate)fsm.update(deltaTime);
// 重置状态机fsm.reset(); // 重置到当前状态fsm.reset('idle'); // 重置到指定状态// 监听进入特定状态const unsubscribe = fsm.onEnter('walk', (from) => { console.log(`从 ${from} 进入 walk`);});
// 监听退出特定状态fsm.onExit('walk', (to) => { console.log(`从 walk 退出到 ${to}`);});
// 监听任意状态变化fsm.onChange((event) => { console.log(`${event.from} -> ${event.to} at ${event.timestamp}`);});
// 取消订阅unsubscribe();// 获取状态历史const history = fsm.getHistory();// [{ from: 'idle', to: 'walk', timestamp: 1234567890 }, ...]
// 清除历史fsm.clearHistory();
// 获取调试信息const info = fsm.getDebugInfo();// { current, previous, duration, stateCount, transitionCount, historySize }FSM 模块提供了可视化脚本支持的蓝图节点:
GetCurrentState- 获取当前状态TransitionTo- 转换到指定状态CanTransition- 检查是否可以转换IsInState- 检查是否在指定状态WasInState- 检查是否曾在指定状态GetStateDuration- 获取状态持续时间EvaluateTransitions- 评估转换条件ResetStateMachine- 重置状态机