层级切换、守卫与事件¶
GFStateMachine 支持通过 parent_state_name 建立父子状态路径,让状态切换只退出和进入必要分支。
当从 Grounded/Idle 切换到 Grounded/Run 时,Grounded 会保持激活,只退出 Idle 并进入 Run;当切换到 Airborne 时,则会先退出 Idle,再退出 Grounded,最后进入 Airborne。这就是典型 HSM 的最近公共祖先切换语义。
守卫¶
GFState 可重写 can_enter() / can_exit() 作为进入和退出守卫。守卫拒绝时,状态机发出 transition_blocked,并保持当前激活路径不变。
状态事件¶
需要让子状态把未处理输入或领域事件交给父状态时,调用:
事件会从当前叶子状态开始,沿父状态路径向上调用 handle_state_event(),直到某个状态返回 true。
运行时可用 get_active_state_path()、is_in_state()、get_state_snapshot() 和共享 blackboard 做调试、诊断或 UI 展示。
update(delta, true) 可按 root -> leaf 顺序更新整条激活路径,默认只更新当前叶子状态,适合大多数有限状态机的单活跃状态逻辑。