summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ControlPlayableUtility.cs
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
commitc55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch)
treeee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ControlPlayableUtility.cs
downloadProject-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ControlPlayableUtility.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ControlPlayableUtility.cs62
1 files changed, 62 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ControlPlayableUtility.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ControlPlayableUtility.cs
new file mode 100644
index 0000000..d7023e4
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ControlPlayableUtility.cs
@@ -0,0 +1,62 @@
+using System.Collections.Generic;
+using UnityEngine.Playables;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ static class ControlPlayableUtility
+ {
+ public static bool DetectCycle(
+ ControlPlayableAsset asset, PlayableDirector director, HashSet<PlayableDirector> set = null)
+ {
+ if (director == null || asset == null || !asset.updateDirector)
+ return false;
+
+ if (set == null)
+ set = new HashSet<PlayableDirector>();
+
+ if (set.Contains(director))
+ return true;
+
+ var gameObject = asset.sourceGameObject.Resolve(director);
+ if (gameObject == null)
+ return false;
+
+ set.Add(director);
+
+ foreach (var subDirector in asset.GetComponent<PlayableDirector>(gameObject))
+ {
+ foreach (var childAsset in GetPlayableAssets(subDirector))
+ {
+ if (DetectCycle(childAsset, subDirector, set))
+ return true;
+ }
+ }
+
+ set.Remove(director);
+
+ return false;
+ }
+
+ public static IEnumerable<ControlPlayableAsset> GetPlayableAssets(PlayableDirector director)
+ {
+ var timeline = director != null ? (director.playableAsset as TimelineAsset) : null;
+ if (timeline != null)
+ {
+ foreach (var t in timeline.GetOutputTracks())
+ {
+ var controlTrack = t as ControlTrack;
+ if (controlTrack != null)
+ {
+ foreach (var c in t.GetClips())
+ {
+ var asset = c.asset as ControlPlayableAsset;
+ if (asset != null)
+ yield return asset;
+ }
+ }
+ }
+ }
+ }
+ }
+}