/// <summary> /// 转换节点 /// </summary> public void Transition(string nodeName) { if (string.IsNullOrEmpty(nodeName)) { throw new ArgumentNullException(); } IFsmNode node = GetNode(nodeName); if (node == null) { MotionLog.Error($"Can not found node {nodeName}"); return; } // 检测转换关系 if (Graph != null) { if (Graph.CanTransition(_curNode.Name, node.Name) == false) { MotionLog.Error($"Can not transition {_curNode} to {node}"); return; } } MotionLog.Log($"Transition {_curNode.Name} to {node.Name}"); _preNode = _curNode; _curNode.OnExit(); _curNode = node; _curNode.OnEnter(); }
/// <summary> /// 启动状态机 /// </summary> /// <param name="entryNode">入口节点</param> public void Run(string entryNode) { _curNode = GetNode(entryNode); _preNode = GetNode(entryNode); if (_curNode != null) { _curNode.OnEnter(); } else { MotionLog.Error($"Not found entry node : {entryNode}"); } }