/// <summary>
        /// Highlights nodes that are being re-evaluated, like abort nodes.
        /// </summary>
        /// <param name="node"></param>
        private bool IsNodeObserving(BonsaiNode node)
        {
            Core.BehaviourNode     behaviour = node.Behaviour;
            Core.BehaviourIterator itr       = behaviour.Iterator;

            if (itr != null && itr.IsRunning)
            {
                var aborter = behaviour as Core.ConditionalAbort;
                return(aborter && aborter.IsObserving);
            }

            return(false);
        }
        /// <summary>
        /// Highlights nodes that are being re-evaluated, like abort nodes.
        /// </summary>
        /// <param name="node"></param>
        private bool IsNodeEvaluating(BonsaiNode node)
        {
            if (!EditorApplication.isPlaying)
            {
                return(false);
            }

            Core.BehaviourIterator itr = node.Behaviour.Iterator;

            if (itr != null && itr.IsRunning)
            {
                var aborter = node.Behaviour as Core.ConditionalAbort;
                int index   = itr.CurrentIndex;
                if (index != -1)
                {
                    Core.BehaviourNode currentNode = Canvas.Tree.GetNode(index);

                    // The current running node can be aborted by it.
                    return(aborter && Core.ConditionalAbort.IsAbortable(aborter, currentNode));
                }
            }

            return(false);
        }