private IClipContainer EnsureContainerFor(string childId) { ParseId(childId, out string containerId, out string localId); if (string.IsNullOrEmpty(containerId)) { return(null); } IClipContainer clipContainer = GetContainer(containerId); if (clipContainer == null) { SampleContainerChildType childType = GetChildType(localId); clipContainer = CreateContainer(containerId, childType); containers[containerId] = clipContainer; IClipContainer clipContainer2 = EnsureContainerFor(containerId); if (clipContainer2 == null) { root = clipContainer; } else { ParseId(containerId, out string _, out string localId2); clipContainer2.SetChild(localId2, clipContainer); } if (clipContainer is LoopContainer) { isLoop = true; } if (clipContainer is SwitchContainer) { isSwitch = true; } } return(clipContainer); }
public SerializedClip GetClip(string currentId, char choice, SampleContainerChildType loopType) { IClip clip; switch (loopType) { case SampleContainerChildType.Start: clip = start; break; case SampleContainerChildType.Stop: clip = stop; break; default: clip = loop; break; } if (clip == null) { return(null); } if (clip is SerializedClip) { return(clip as SerializedClip); } return((clip as IClipContainer).GetClip(currentId, choice, loopType)); }
public SerializedClip GetClip(string currentId, char choice, SampleContainerChildType loopType) { IClip clip = null; if (string.IsNullOrEmpty(currentId) || !currentId.StartsWith(id)) { clip = list[UnityEngine.Random.Range(0, list.Count)]; } else { for (int i = 0; i < list.Count; i++) { if (currentId.StartsWith(list[i].id)) { clip = list[i]; break; } } } if (clip is SerializedClip) { return(clip as SerializedClip); } return((clip as IClipContainer).GetClip(currentId, choice, loopType)); }
public SerializedClip GetClip(SerializedClip currentClip, char choice, SampleContainerChildType loopType) { if (root == null) { return(null); } if (root is SerializedClip) { return(root as SerializedClip); } return((root as IClipContainer).GetClip(currentClip?.id, choice, loopType)); }
public SerializedClip GetClip(string currentId, char choice, SampleContainerChildType loopType) { IClip value = null; while (value == null && choice >= 'A') { choices.TryGetValue(choice--, out value); } if (value == null) { return(null); } if (value is SerializedClip) { return(value as SerializedClip); } return((value as IClipContainer).GetClip(currentId, choice, loopType)); }
private IClipContainer CreateContainer(string containerId, SampleContainerChildType childType) { switch (childType) { case SampleContainerChildType.Random: { RandomContainer randomContainer = new RandomContainer(); randomContainer.id = containerId; return(randomContainer); } case SampleContainerChildType.Choice: { SwitchContainer switchContainer = new SwitchContainer(); switchContainer.id = containerId; return(switchContainer); } case SampleContainerChildType.Start: case SampleContainerChildType.Loop: case SampleContainerChildType.Stop: { LoopContainer loopContainer = new LoopContainer(); loopContainer.id = containerId; return(loopContainer); } case SampleContainerChildType.None: { RandomContainer randomContainer = new RandomContainer(); randomContainer.id = containerId; return(randomContainer); } default: throw new InvalidOperationException(); } }