A game about forced loneliness, made by TACStudios
at master 126 lines 4.3 kB view raw
1using System; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEditor; 5using UnityEditor.Timeline; 6using UnityEngine.Serialization; 7using UnityEngine.Timeline; 8using UnityEngine.UIElements; 9#if !UNITY_2020_2_OR_NEWER 10using L10n = UnityEditor.Timeline.L10n; 11#endif 12 13/// <summary> 14/// Store the settings for Timeline that will be stored with the Unity Project. 15/// </summary> 16[FilePath("ProjectSettings/TimelineSettings.asset", FilePathAttribute.Location.ProjectFolder)] 17public class TimelineProjectSettings : ScriptableSingleton<TimelineProjectSettings> 18{ 19 /// <summary> 20 /// Define the default framerate when a Timeline asset is created. 21 /// </summary> 22 [HideInInspector, Obsolete("assetDefaultFramerate has been deprecated. Use defaultFrameRate instead.")] 23 public float assetDefaultFramerate = (float)TimelineAsset.EditorSettings.kDefaultFrameRate; 24 25 [SerializeField, FrameRateField, FormerlySerializedAs("assetDefaultFramerate")] 26 private double m_DefaultFrameRate = TimelineAsset.EditorSettings.kDefaultFrameRate; 27 /// <summary> 28 /// Defines the default frame rate when a Timeline asset is created from the project window. 29 /// </summary> 30 31 public double defaultFrameRate 32 { 33#pragma warning disable 0618 34 get 35 { 36 if (m_DefaultFrameRate != assetDefaultFramerate) 37 { 38 return assetDefaultFramerate; 39 } 40 return m_DefaultFrameRate; 41 } 42 set 43 { 44 m_DefaultFrameRate = value; 45 assetDefaultFramerate = (float)value; 46 } 47#pragma warning restore 0618 48 } 49 50 void OnDisable() 51 { 52 Save(); 53 } 54 55 /// <summary> 56 /// Save the timeline project settings file in the project directory. 57 /// </summary> 58 public void Save() 59 { 60 Save(true); 61 } 62 63 internal SerializedObject GetSerializedObject() 64 { 65 return new SerializedObject(this); 66 } 67 68 private void OnValidate() 69 { 70#pragma warning disable 0618 71 assetDefaultFramerate = (float)m_DefaultFrameRate; 72#pragma warning restore 0618 73 } 74} 75 76class TimelineProjectSettingsProvider : SettingsProvider 77{ 78 SerializedObject m_SerializedObject; 79 SerializedProperty m_Framerate; 80 81 private class Styles 82 { 83 public static readonly GUIContent DefaultFramerateLabel = L10n.TextContent("Default frame rate", "The default frame rate for new Timeline assets."); 84 public static readonly GUIContent TimelineAssetLabel = L10n.TextContent("Timeline Asset", ""); 85 public static readonly string WarningString = L10n.Tr("Locking playback cannot be enabled for this frame rate."); 86 } 87 88 public TimelineProjectSettingsProvider(string path, SettingsScope scopes, IEnumerable<string> keywords = null) 89 : base(path, scopes, keywords) { } 90 91 public override void OnActivate(string searchContext, VisualElement rootElement) 92 { 93 TimelineProjectSettings.instance.Save(); 94 m_SerializedObject = TimelineProjectSettings.instance.GetSerializedObject(); 95 m_Framerate = m_SerializedObject.FindProperty("m_DefaultFrameRate"); 96 } 97 98 public override void OnGUI(string searchContext) 99 { 100 using (new SettingsWindow.GUIScope()) 101 { 102 m_SerializedObject.Update(); 103 104 EditorGUILayout.LabelField(Styles.TimelineAssetLabel, EditorStyles.boldLabel); 105 EditorGUI.BeginChangeCheck(); 106 m_Framerate.doubleValue = FrameRateDrawer.FrameRateField(m_Framerate.doubleValue, Styles.DefaultFramerateLabel, 107 EditorGUILayout.GetControlRect(), out bool frameRateIsValid); 108 if (EditorGUI.EndChangeCheck()) 109 { 110 m_SerializedObject.ApplyModifiedProperties(); 111 TimelineProjectSettings.instance.Save(); 112 } 113#if TIMELINE_FRAMEACCURATE 114 if (!frameRateIsValid && TimelinePreferences.instance.playbackLockedToFrame) 115 EditorGUILayout.HelpBox(Styles.WarningString, MessageType.Warning); 116#endif 117 } 118 } 119 120 [SettingsProvider] 121 public static SettingsProvider CreateTimelineProjectSettingProvider() 122 { 123 var provider = new TimelineProjectSettingsProvider("Project/Timeline", SettingsScope.Project, GetSearchKeywordsFromGUIContentProperties<Styles>()); 124 return provider; 125 } 126}