Example #1
0
        private void PrepareEntry(ActionEntry entry)
        {
            foreach (var child in entry.GetChildEntries(EntryContainer))
            {
                PrepareEntry(child);
            }

            entry.PrepareAction();
        }
        public void RemoveEntry(ActionEntry entry)
        {
            foreach (var child in entry.GetChildEntries(this))
            {
                var nextId = child.NextId;
                while (GetEntry(nextId) != null)
                {
                    var nextEntry = GetEntry(nextId);
                    nextId = nextEntry.NextId;
                    RemoveEntry(nextEntry);
                }
                RemoveEntry(child);
            }

            if (entry.Id == rootId)
            {
                if (entry.HasNext)
                {
                    rootId = entry.NextId;
                    GetEntry(entry.NextId).ResetPrevId();
                }
                else
                {
                    latestId = rootId;
                }
            }

            if (entry.HasPrev)
            {
                if (entry.HasNext)
                {
                    GetEntry(entry.PrevId).NextId = entry.NextId;
                    GetEntry(entry.NextId).PrevId = entry.PrevId;
                }
                else
                {
                    GetEntry(entry.PrevId).ResetNextId();
                }
            }

            if (entry.HasParent)
            {
#if UNITY_EDITOR
                UnityEngine.Debug.Log("removing: " + entry.Id + " from parent: " + GetEntry(entry.ParentId).Id);
#endif
                GetEntry(entry.ParentId).RemoveChildId(entry.Id);
                if (entry.HasNext)
                {
                    GetEntry(entry.ParentId).AddChildId(entry.NextId);
                    GetEntry(entry.NextId).ResetPrevId();
                    GetEntry(entry.NextId).ParentId = entry.ParentId;
                }
            }

            entryDict.Remove(entry.Id);
        }
Example #3
0
        private void TraverseFromEntry(ActionEntry entry, Action <ActionEntry> procedure)
        {
            procedure(entry);

            foreach (var child in entry.GetChildEntries(EntryContainer))
            {
                var nextId = child.NextId;
                while (EntryContainer.GetEntry(nextId) != null)
                {
                    var nextEntry = EntryContainer.GetEntry(nextId);
                    nextId = nextEntry.NextId;
                    TraverseFromEntry(nextEntry, procedure);
                }
                TraverseFromEntry(child, procedure);
            }

            if (entry.HasNext)
            {
                TraverseFromEntry(EntryContainer.GetEntry(entry.NextId), procedure);
            }
        }
Example #4
0
        private IEnumerator Step(ActionEntry entry)
        {
            foreach (var childEntry in entry.GetChildEntries(EntryContainer))
            {
                StartCoroutine(Step(childEntry));
            }

            while (entry.IsPlayable)
            {
                entry.StepAction(Time.deltaTime, Status == RunnerStatus.Pause);
                yield return(null);
            }

            if (entry.HasNext)
            {
                while (entry.EntryType == ActionEntryType.ParallelBlock && !entry.IsParallelBlockFinished(EntryContainer))
                {
                    yield return(null);
                }
                var nextEntry = EntryContainer.GetEntry(entry.NextId);
                PrepareEntry(nextEntry);
                StartCoroutine(Step(nextEntry));
            }

            if (entry.EntryType == ActionEntryType.ParallelBlock && entry.EntryWrapMode == ActionEntry.ActionEntryWrapMode.Loop)
            {
                while (!entry.IsParallelBlockFinished(EntryContainer))
                {
                    yield return(null);
                }
                yield return(null); // restart on the next frame of last tweener's IsDone

                ResetEntryFrom(entry);
                PrepareEntry(entry);
                StartCoroutine(Step(entry));
            }
        }