/// <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> public void AddNode(IFsmNode node) { _fsm.AddNode(node); if (_nodeNames.Contains(node.Name) == false) { _nodeNames.Add(node.Name); } }
/// <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}"); } }
/// <summary> 构造函数 </summary> public StateTransition(IFsmNode from, IFsmNode to, MainFsm mainFsm, FsmBase fsmBelongTo = null) { if (from == to) { //Todo Error return; } this._mainFsm = mainFsm; this.fsmBelongTo = fsmBelongTo ?? mainFsm; this.from = from; this.to = to; _conditionSet = new HashSet <Func <bool> >(); this.from.AddTransition(this); }
/// <summary> /// 加入一个节点 /// </summary> public void AddNode(IFsmNode node) { if (node == null) { throw new ArgumentNullException(); } if (_nodes.Contains(node) == false) { _nodes.Add(node); } else { MotionLog.Warning($"Node {node.Name} already existed"); } }
public StateTransition TransitionFactoty(IFsmNode from, IFsmNode to) { return(new StateTransition(from, to, this, this)); }