Example #1
0
        private IEnumerator ProcessChildrenOfNode(CoroutineNode node)
        {
            int i = 0;

            while (i < node.ChildrenCount)
            {
                // Node -> children -> siblings.
                CurrentNode = node[i];
                yield return(UnityBridge.Instance.StartCoroutine(node[i].Value));

                if (i >= node.ChildrenCount)
                {
                    yield break;
                }

                if (node[i].ChildrenCount > 0)
                {
                    // Recursion on children.
                    yield return(UnityBridge.Instance.StartCoroutine(ProcessChildrenOfNode(node[i])));
                }

                i++;
            }

            // Be defensive about clearing, do it only when everything was executed.
            if (node == Root)
            {
                CurrentNode = Root;
                Root.ClearChildren();
            }
        }
Example #2
0
        /// <summary>
        /// Add a coroutine as a child of the node.
        /// </summary>
        /// <param name="coroutine">Coroutine to add.</param>
        /// <returns></returns>
        public CoroutineNode AddChild(IEnumerator coroutine)
        {
            var node = new CoroutineNode(coroutine)
            {
                Parent = this
            };

            _children.Add(node);
            return(node);
        }
Example #3
0
 public CoroutineTree()
 {
     Root        = new CoroutineNode(null);
     CurrentNode = Root;
 }