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); }
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); } }
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)); } }