Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
            }
        }