mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
80 lines
2.6 KiB
C#
80 lines
2.6 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|