/// <summary> /// 终止节点的执行并退出,执行结果记为Failed /// </summary> public void InterruptAndExit() { if (ExecuteState != BehaviorExecuteState.executing) { return; } ExecuteState = BehaviorExecuteState.failed; if (SubNodes.Count == 0) { return; } foreach (var item in SubNodes) { item.InterruptAndExit(); } }
/// <summary> /// 将完成任务该节点重置为Ready /// </summary> public virtual void Reset() { if (executeState == BehaviorExecuteState.executing) { throw new Exception("试图重置执行中的行为"); } if (SubNodes.Count == 0) { ExecuteState = BehaviorExecuteState.Ready; return; } ExecuteState = BehaviorExecuteState.Ready; foreach (var item in SubNodes) { item.Reset(); } }
public override void Execute() { if (Root.ExecuteState == BehaviorExecuteState.failed || Root.ExecuteState == BehaviorExecuteState.finishied) { PrevResult = Root.ExecuteState; if (RoundExecuted != null) { RoundExecuted(this); } Root.Reset(); return; } if (Root.ExecuteState == BehaviorExecuteState.Ready) { Root.ExecuteState = BehaviorExecuteState.executing; } Root.Execute(); }