Initial Commit
This commit is contained in:
parent
53eb92e9af
commit
270ab7d11f
15341 changed files with 700234 additions and 0 deletions
|
@ -0,0 +1,124 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
#if UNITY_2021_2_OR_NEWER
|
||||
using UnityEditor.SceneManagement;
|
||||
#else
|
||||
using UnityEditor.Experimental.SceneManagement;
|
||||
#endif
|
||||
using UnityEngine.Playables;
|
||||
using UnityEngine.Timeline;
|
||||
|
||||
namespace UnityEditor.Timeline
|
||||
{
|
||||
partial class TimelineWindow
|
||||
{
|
||||
List<BreadCrumbTitle> m_BreadCrumbLabels = new List<BreadCrumbTitle>(100);
|
||||
|
||||
static TitleMode GetTitleMode(ISequenceState sequence)
|
||||
{
|
||||
var prefabStage = PrefabStageUtility.GetCurrentPrefabStage();
|
||||
// Top level
|
||||
if (sequence.hostClip == null)
|
||||
{
|
||||
if (sequence.director != null && prefabStage != null && prefabStage.IsPartOfPrefabContents(sequence.director.gameObject))
|
||||
return TitleMode.Prefab;
|
||||
if (sequence.director != null && PrefabUtility.IsPartOfPrefabAsset(sequence.director))
|
||||
return TitleMode.PrefabOutOfContext;
|
||||
if (sequence.director != null && !sequence.director.isActiveAndEnabled)
|
||||
return TitleMode.DisabledComponent;
|
||||
if (sequence.director != null)
|
||||
return TitleMode.GameObject;
|
||||
if (sequence.asset != null)
|
||||
return TitleMode.Asset;
|
||||
}
|
||||
// Subtimelines only get an error icon
|
||||
else if (sequence.director != null && !sequence.director.isActiveAndEnabled && !PrefabUtility.IsPartOfPrefabAsset(sequence.director))
|
||||
return TitleMode.DisabledComponent;
|
||||
|
||||
return TitleMode.None;
|
||||
}
|
||||
|
||||
void DrawBreadcrumbs()
|
||||
{
|
||||
if (state == null)
|
||||
return;
|
||||
var count = 0;
|
||||
foreach (var sequence in state.GetAllSequences())
|
||||
{
|
||||
var title = new BreadCrumbTitle
|
||||
{
|
||||
name = DisplayNameHelper.GetDisplayName(sequence),
|
||||
mode = GetTitleMode(sequence)
|
||||
};
|
||||
if (count >= m_BreadCrumbLabels.Count)
|
||||
m_BreadCrumbLabels.Add(title);
|
||||
else
|
||||
m_BreadCrumbLabels[count] = title;
|
||||
count++;
|
||||
}
|
||||
|
||||
if (m_BreadCrumbLabels.Count > count)
|
||||
m_BreadCrumbLabels.RemoveRange(count, m_BreadCrumbLabels.Count - count);
|
||||
|
||||
using (new EditorGUI.DisabledScope(currentMode.headerState.breadCrumb == TimelineModeGUIState.Disabled))
|
||||
{
|
||||
var width = position.width - WindowConstants.playControlsWidth - WindowConstants.cogButtonWidth;
|
||||
BreadcrumbDrawer.Draw(width, m_BreadCrumbLabels, NavigateToBreadcrumbIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void NavigateToBreadcrumbIndex(int index)
|
||||
{
|
||||
state.PopSequencesUntilCount(index + 1);
|
||||
}
|
||||
|
||||
void DrawSequenceSelector()
|
||||
{
|
||||
using (new EditorGUI.DisabledScope(currentMode.headerState.sequenceSelector == TimelineModeGUIState.Disabled))
|
||||
{
|
||||
if (EditorGUILayout.DropdownButton(DirectorStyles.timelineSelectorArrow, FocusType.Passive, DirectorStyles.Instance.sequenceSwitcher, GUILayout.Width(WindowConstants.selectorWidth)))
|
||||
ShowSequenceSelector();
|
||||
}
|
||||
}
|
||||
|
||||
void ShowSequenceSelector()
|
||||
{
|
||||
var allDirectors = TimelineUtility.GetDirectorsInSceneUsingAsset(null);
|
||||
|
||||
var formatter = new SequenceMenuNameFormater();
|
||||
var namesAndDirectors = new List<ValueTuple<string, PlayableDirector>>();
|
||||
foreach (var d in allDirectors)
|
||||
{
|
||||
if (d.playableAsset is TimelineAsset)
|
||||
{
|
||||
var text = formatter.Format(DisplayNameHelper.GetDisplayName(d));
|
||||
namesAndDirectors.Add(new ValueTuple<string, PlayableDirector>(text, d));
|
||||
}
|
||||
}
|
||||
|
||||
var sequenceMenu = new GenericMenu();
|
||||
foreach (var(timelineName, playableDirector) in namesAndDirectors.OrderBy(i => i.Item1))
|
||||
{
|
||||
var isCurrent = state.masterSequence.director == playableDirector;
|
||||
sequenceMenu.AddItem(new GUIContent(timelineName), isCurrent, OnSequenceSelected, playableDirector);
|
||||
}
|
||||
|
||||
if (allDirectors.Length == 0)
|
||||
sequenceMenu.AddDisabledItem(DirectorStyles.noTimelinesInScene);
|
||||
|
||||
sequenceMenu.DropDown(EditorGUILayout.s_LastRect);
|
||||
}
|
||||
|
||||
void OnSequenceSelected(object arg)
|
||||
{
|
||||
var directorToBindTo = (PlayableDirector)arg;
|
||||
if (directorToBindTo)
|
||||
{
|
||||
// don't just select the object, it may already be selected.
|
||||
SetTimeline(directorToBindTo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue