类的使用
cn.wjybxx.btree.fsm.StateMachineTask
使用StateMachineTask的程序包
-
cn.wjybxx.btree中StateMachineTask的使用
修饰符和类型方法说明final StateMachineTask<T> TaskEntry.getRootStateMachine()获取根状态机 状态机太重要了,值得我们为其提供各种快捷方法 -
cn.wjybxx.btree.fsm中StateMachineTask的使用
修饰符和类型方法说明static <T> StateMachineTask<T> StateMachineTask.findStateMachine(Task<T> task) 查找task最近的状态机节点 1.仅递归查询父节点和长兄节点 2.优先查找附近的,然后测试长兄节点 - 状态机作为第一个节点的情况比较常见static <T> StateMachineTask<T> StateMachineTask.findStateMachine(Task<T> task, String name) 查找task最近的状态机节点 1.名字不为空的情况下,支持从兄弟节点中查询 2.优先测试父节点,然后测试兄弟节点参数类型为StateMachineTask的cn.wjybxx.btree.fsm中的方法修饰符和类型方法说明voidStateMachineListener.beforeChangeState(StateMachineTask<T> stateMachineTask, Task<T> curState, Task<T> nextState) 1.两个参数最多一个为null 2.可以设置新状态的黑板和其它数据 3.用户此时可为新状态分配上下文;同时清理前一个状态的上下文 4.用户此时可拿到新状态ChangeStateArgs,后续则不可 5.如果task需要感知redo和undo,则由用户将信息写入黑板default voidStateMachineHandler.beforeEnter(StateMachineTask<T> stateMachineTask) handler可能也有需要初始化的数据。booleanStateMachineHandler.onNextStateAbsent(StateMachineTask<T> stateMachineTask, Task<T> preState) 当状态机没有下一个状态时调用该方法,以避免无可用状态 注意: 1.状态机启动时不会调用该方法 2.如果该方法返回后仍无可用状态,将触发无状态逻辑 3.default voidStateMachineHandler.onNextStateGuardFailed(StateMachineTask<T> stateMachineTask, Task<T> nextState) 下个状态的前置条件检查失败default voidStateMachineHandler.resetForRestart(StateMachineTask<T> stateMachineTask) handler可能也有需要重置的数据。