79 lines
3.2 KiB
C#
79 lines
3.2 KiB
C#
|
using UnityEngine;
|
||
|
using UnityEngine.Timeline;
|
||
|
|
||
|
namespace UnityEditor.Timeline
|
||
|
{
|
||
|
[CustomEditor(typeof(TimelineAsset)), CanEditMultipleObjects]
|
||
|
class TimelineAssetInspector : Editor
|
||
|
{
|
||
|
static class Styles
|
||
|
{
|
||
|
public static readonly GUIContent FrameRate = EditorGUIUtility.TrTextContent("Frame Rate", "The frame rate at which this sequence updates");
|
||
|
public static readonly GUIContent DurationMode = EditorGUIUtility.TrTextContent("Duration Mode", "Specified how the duration of the sequence is calculated");
|
||
|
public static readonly GUIContent Duration = EditorGUIUtility.TrTextContent("Duration", "The length of the sequence");
|
||
|
public static readonly GUIContent HeaderTitleMultiselection = EditorGUIUtility.TrTextContent("Timeline Assets");
|
||
|
}
|
||
|
|
||
|
SerializedProperty m_FrameRateProperty;
|
||
|
SerializedProperty m_DurationModeProperty;
|
||
|
SerializedProperty m_FixedDurationProperty;
|
||
|
|
||
|
void InitializeProperties()
|
||
|
{
|
||
|
m_FrameRateProperty = serializedObject.FindProperty("m_EditorSettings").FindPropertyRelative("m_Framerate");
|
||
|
m_DurationModeProperty = serializedObject.FindProperty("m_DurationMode");
|
||
|
m_FixedDurationProperty = serializedObject.FindProperty("m_FixedDuration");
|
||
|
}
|
||
|
|
||
|
public void OnEnable()
|
||
|
{
|
||
|
InitializeProperties();
|
||
|
}
|
||
|
|
||
|
internal override bool IsEnabled()
|
||
|
{
|
||
|
return !FileUtil.HasReadOnly(targets) && base.IsEnabled();
|
||
|
}
|
||
|
|
||
|
protected override void OnHeaderGUI()
|
||
|
{
|
||
|
string headerTitle;
|
||
|
if (targets.Length == 1)
|
||
|
headerTitle = target.name;
|
||
|
else
|
||
|
headerTitle = targets.Length.ToString() + " " + Styles.HeaderTitleMultiselection.text;
|
||
|
|
||
|
DrawHeaderGUI(this, headerTitle, 0);
|
||
|
}
|
||
|
|
||
|
public override void OnInspectorGUI()
|
||
|
{
|
||
|
serializedObject.Update();
|
||
|
|
||
|
EditorGUI.BeginChangeCheck();
|
||
|
|
||
|
EditorGUILayout.PropertyField(m_FrameRateProperty, Styles.FrameRate, GUILayout.MinWidth(140));
|
||
|
var frameRate = m_FrameRateProperty.doubleValue;
|
||
|
|
||
|
EditorGUILayout.PropertyField(m_DurationModeProperty, Styles.DurationMode, GUILayout.MinWidth(140));
|
||
|
|
||
|
var durationMode = (TimelineAsset.DurationMode)m_DurationModeProperty.enumValueIndex;
|
||
|
var inputEvent = InputEvent.None;
|
||
|
if (durationMode == TimelineAsset.DurationMode.FixedLength)
|
||
|
TimelineInspectorUtility.TimeField(m_FixedDurationProperty, Styles.Duration, false, frameRate, double.Epsilon, TimelineClip.kMaxTimeValue * 2, ref inputEvent);
|
||
|
else
|
||
|
{
|
||
|
var isMixed = targets.Length > 1;
|
||
|
TimelineInspectorUtility.TimeField(Styles.Duration, ((TimelineAsset)target).duration, true, isMixed, frameRate, double.MinValue, double.MaxValue, ref inputEvent);
|
||
|
}
|
||
|
|
||
|
bool changed = EditorGUI.EndChangeCheck();
|
||
|
|
||
|
serializedObject.ApplyModifiedProperties();
|
||
|
|
||
|
if (changed)
|
||
|
TimelineWindow.RepaintIfEditingTimelineAsset((TimelineAsset)target);
|
||
|
}
|
||
|
}
|
||
|
}
|