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);
            }
        }
        private BehaviourNode PopNode()
        {
            int           index = _traversal.Pop();
            BehaviourNode node  = _tree.allNodes[index];

            node.OnExit();

            // Guard against empty branch tick pop.
            // This could occur if a node was aborted then interrupted in succession.
            // TODO: Test this further.
            if (_branchTicks.Count != 0 && node.CanTickOnBranch())
            {
                _branchTicks.Pop();
            }

            return(node);
        }