A game about forced loneliness, made by TACStudios
at master 62 lines 2.0 kB view raw
1using System.Collections.Generic; 2using UnityEngine.Playables; 3using UnityEngine.Timeline; 4 5namespace UnityEditor.Timeline 6{ 7 static class ControlPlayableUtility 8 { 9 public static bool DetectCycle( 10 ControlPlayableAsset asset, PlayableDirector director, HashSet<PlayableDirector> set = null) 11 { 12 if (director == null || asset == null || !asset.updateDirector) 13 return false; 14 15 if (set == null) 16 set = new HashSet<PlayableDirector>(); 17 18 if (set.Contains(director)) 19 return true; 20 21 var gameObject = asset.sourceGameObject.Resolve(director); 22 if (gameObject == null) 23 return false; 24 25 set.Add(director); 26 27 foreach (var subDirector in asset.GetComponent<PlayableDirector>(gameObject)) 28 { 29 foreach (var childAsset in GetPlayableAssets(subDirector)) 30 { 31 if (DetectCycle(childAsset, subDirector, set)) 32 return true; 33 } 34 } 35 36 set.Remove(director); 37 38 return false; 39 } 40 41 public static IEnumerable<ControlPlayableAsset> GetPlayableAssets(PlayableDirector director) 42 { 43 var timeline = director != null ? (director.playableAsset as TimelineAsset) : null; 44 if (timeline != null) 45 { 46 foreach (var t in timeline.GetOutputTracks()) 47 { 48 var controlTrack = t as ControlTrack; 49 if (controlTrack != null) 50 { 51 foreach (var c in t.GetClips()) 52 { 53 var asset = c.asset as ControlPlayableAsset; 54 if (asset != null) 55 yield return asset; 56 } 57 } 58 } 59 } 60 } 61 } 62}