summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Selection.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Selection.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Selection.cs80
1 files changed, 80 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Selection.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Selection.cs
new file mode 100644
index 0000000..c736e2e
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Selection.cs
@@ -0,0 +1,80 @@
+using UnityEngine;
+using UnityEngine.Playables;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ partial class TimelineWindow
+ {
+ [SerializeField]
+ SequencePath m_SequencePath;
+ private Object lastSelectedGO { get; set; }
+
+ void OnSelectionChange()
+ {
+ RefreshSelection(false);
+ }
+
+ void RefreshSelection(bool forceRebuild)
+ {
+ // if we're in Locked mode, keep current selection - don't use locked property because the
+ // sequence hierarchy may need to be rebuilt and it assumes no asset == unlocked
+ if (m_LockTracker.isLocked || (state != null && state.recording))
+ {
+ RestoreLastSelection(forceRebuild);
+ return;
+ }
+
+ // selection is a TimelineAsset
+ Object selectedObject = Selection.activeObject as TimelineAsset;
+ if (selectedObject != null)
+ {
+ SetCurrentSelection(Selection.activeObject);
+ return;
+ }
+
+ // selection is a GameObject, or a prefab with a director
+ var selectedGO = Selection.activeGameObject;
+ if (selectedGO != null)
+ {
+ bool isSceneObject = !PrefabUtility.IsPartOfPrefabAsset(selectedGO);
+ bool hasDirector = selectedGO.GetComponent<PlayableDirector>() != null;
+ if (isSceneObject || hasDirector)
+ {
+ SetCurrentSelection(selectedGO);
+ return;
+ }
+ }
+
+ // otherwise, keep the same selection.
+ RestoreLastSelection(forceRebuild);
+ }
+
+ void RestoreLastSelection(bool forceRebuild)
+ {
+ state.SetCurrentSequencePath(m_SequencePath, forceRebuild);
+ }
+
+ void SetCurrentSelection(Object obj)
+ {
+ var selectedGameObject = obj as GameObject;
+ if (selectedGameObject != null)
+ {
+ PlayableDirector director = TimelineUtility.GetDirectorComponentForGameObject(selectedGameObject);
+ SetCurrentTimeline(director);
+ lastSelectedGO = selectedGameObject;
+ }
+ else
+ {
+ var selectedSequenceAsset = obj as TimelineAsset;
+ if (selectedSequenceAsset != null)
+ {
+ SetCurrentTimeline(selectedSequenceAsset);
+ lastSelectedGO = selectedGameObject;
+ }
+ }
+
+ Repaint();
+ }
+ }
+}