127 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| using UnityEditor;
 | |
| using UnityEditor.Timeline;
 | |
| using UnityEngine.Serialization;
 | |
| using UnityEngine.Timeline;
 | |
| using UnityEngine.UIElements;
 | |
| #if !UNITY_2020_2_OR_NEWER
 | |
| using L10n = UnityEditor.Timeline.L10n;
 | |
| #endif
 | |
| 
 | |
| /// <summary>
 | |
| /// Store the settings for Timeline that will be stored with the Unity Project.
 | |
| /// </summary>
 | |
| [FilePath("ProjectSettings/TimelineSettings.asset", FilePathAttribute.Location.ProjectFolder)]
 | |
| public class TimelineProjectSettings : ScriptableSingleton<TimelineProjectSettings>
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Define the default framerate when a Timeline asset is created.
 | |
|     /// </summary>
 | |
|     [HideInInspector, Obsolete("assetDefaultFramerate has been deprecated. Use defaultFrameRate instead.")]
 | |
|     public float assetDefaultFramerate = (float)TimelineAsset.EditorSettings.kDefaultFrameRate;
 | |
| 
 | |
|     [SerializeField, FrameRateField, FormerlySerializedAs("assetDefaultFramerate")]
 | |
|     private double m_DefaultFrameRate = TimelineAsset.EditorSettings.kDefaultFrameRate;
 | |
|     /// <summary>
 | |
|     /// Defines the default frame rate when a Timeline asset is created from the project window.
 | |
|     /// </summary>
 | |
| 
 | |
|     public double defaultFrameRate
 | |
|     {
 | |
| #pragma warning disable 0618
 | |
|         get
 | |
|         {
 | |
|             if (m_DefaultFrameRate != assetDefaultFramerate)
 | |
|             {
 | |
|                 return assetDefaultFramerate;
 | |
|             }
 | |
|             return m_DefaultFrameRate;
 | |
|         }
 | |
|         set
 | |
|         {
 | |
|             m_DefaultFrameRate = value;
 | |
|             assetDefaultFramerate = (float)value;
 | |
|         }
 | |
| #pragma warning restore 0618
 | |
|     }
 | |
| 
 | |
|     void OnDisable()
 | |
|     {
 | |
|         Save();
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Save the timeline project settings file in the project directory.
 | |
|     /// </summary>
 | |
|     public void Save()
 | |
|     {
 | |
|         Save(true);
 | |
|     }
 | |
| 
 | |
|     internal SerializedObject GetSerializedObject()
 | |
|     {
 | |
|         return new SerializedObject(this);
 | |
|     }
 | |
| 
 | |
|     private void OnValidate()
 | |
|     {
 | |
| #pragma warning disable 0618
 | |
|         assetDefaultFramerate = (float)m_DefaultFrameRate;
 | |
| #pragma warning restore 0618
 | |
|     }
 | |
| }
 | |
| 
 | |
| class TimelineProjectSettingsProvider : SettingsProvider
 | |
| {
 | |
|     SerializedObject m_SerializedObject;
 | |
|     SerializedProperty m_Framerate;
 | |
| 
 | |
|     private class Styles
 | |
|     {
 | |
|         public static readonly GUIContent DefaultFramerateLabel = L10n.TextContent("Default frame rate", "The default frame rate for new Timeline assets.");
 | |
|         public static readonly GUIContent TimelineAssetLabel = L10n.TextContent("Timeline Asset", "");
 | |
|         public static readonly string WarningString = L10n.Tr("Locking playback cannot be enabled for this frame rate.");
 | |
|     }
 | |
| 
 | |
|     public TimelineProjectSettingsProvider(string path, SettingsScope scopes, IEnumerable<string> keywords = null)
 | |
|         : base(path, scopes, keywords) { }
 | |
| 
 | |
|     public override void OnActivate(string searchContext, VisualElement rootElement)
 | |
|     {
 | |
|         TimelineProjectSettings.instance.Save();
 | |
|         m_SerializedObject = TimelineProjectSettings.instance.GetSerializedObject();
 | |
|         m_Framerate = m_SerializedObject.FindProperty("m_DefaultFrameRate");
 | |
|     }
 | |
| 
 | |
|     public override void OnGUI(string searchContext)
 | |
|     {
 | |
|         using (new SettingsWindow.GUIScope())
 | |
|         {
 | |
|             m_SerializedObject.Update();
 | |
| 
 | |
|             EditorGUILayout.LabelField(Styles.TimelineAssetLabel, EditorStyles.boldLabel);
 | |
|             EditorGUI.BeginChangeCheck();
 | |
|             m_Framerate.doubleValue = FrameRateDrawer.FrameRateField(m_Framerate.doubleValue, Styles.DefaultFramerateLabel,
 | |
|                 EditorGUILayout.GetControlRect(), out bool frameRateIsValid);
 | |
|             if (EditorGUI.EndChangeCheck())
 | |
|             {
 | |
|                 m_SerializedObject.ApplyModifiedProperties();
 | |
|                 TimelineProjectSettings.instance.Save();
 | |
|             }
 | |
| #if TIMELINE_FRAMEACCURATE
 | |
|             if (!frameRateIsValid && TimelinePreferences.instance.playbackLockedToFrame)
 | |
|                 EditorGUILayout.HelpBox(Styles.WarningString, MessageType.Warning);
 | |
| #endif
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     [SettingsProvider]
 | |
|     public static SettingsProvider CreateTimelineProjectSettingProvider()
 | |
|     {
 | |
|         var provider = new TimelineProjectSettingsProvider("Project/Timeline", SettingsScope.Project, GetSearchKeywordsFromGUIContentProperties<Styles>());
 | |
|         return provider;
 | |
|     }
 | |
| }
 |