private BehaviourNode preOrderNext() { BehaviourNode current = _traversal.Pop(); for (int i = current.ChildCount() - 1; i >= 0; --i) { BehaviourNode child = current.GetChildAt(i); _traversal.Push(child); } return(current); }
/// <summary> /// Requests the iterator to traverse a new node. /// </summary> /// <param name="next"></param> public void Traverse(BehaviourNode next) { int index = next.preOrderIndex; traversal.Push(index); requestedTraversals.Enqueue(index); #if UNITY_EDITOR next.StatusEditorResult = BehaviourNode.StatusEditor.Running; #endif }
/// <summary> /// Requests the iterator to traverse a new node. /// </summary> /// <param name="next"></param> public void Traverse(BehaviourNode next) { int index = next.preOrderIndex; _traversal.Push(index); _requestedTraversals.Enqueue(index); LastStatusReturned = BehaviourNode.Status.Running; #if UNITY_EDITOR next.SetStatusEditor(BehaviourNode.Status.Running); #endif }
private void CallOnEnterOnQueuedNodes() { // Make sure to call on enter on any queued new traversals. while (_requestedTraversals.Count != 0) { int i = _requestedTraversals.Dequeue(); BehaviourNode node = _tree.allNodes[i]; node.OnEnter(); if (node.CanTickOnBranch()) { _branchTicks.Push(i); } CallOnChildEnter(node); } }