A game about forced loneliness, made by TACStudios
at master 81 lines 2.8 kB view raw
1using System; 2using System.Collections.Generic; 3using System.Reflection; 4using UnityEngine.Rendering; 5 6namespace UnityEditor.Rendering 7{ 8 /// <summary> 9 /// Core Render Pipeline preferences. 10 /// </summary> 11 public static class CoreRenderPipelinePreferences 12 { 13 /// <summary> 14 /// Path to the Render Pipeline Preferences 15 /// </summary> 16 public static readonly string corePreferencePath = "Preferences/Graphics"; 17 18 private static readonly List<ICoreRenderPipelinePreferencesProvider> s_Providers = new(); 19 20 [InitializeOnLoadMethod] 21 static void InitPreferenceProviders() 22 { 23 foreach (var provider in TypeCache.GetTypesDerivedFrom<ICoreRenderPipelinePreferencesProvider>()) 24 { 25 if (provider.GetConstructor(BindingFlags.Public | BindingFlags.Instance, null, Type.EmptyTypes, null) == null) 26 continue; 27 s_Providers.Add(Activator.CreateInstance(provider) as ICoreRenderPipelinePreferencesProvider); 28 } 29 30 s_Providers.Sort((x, y) => GetDisplayInfoOrder(x.GetType()).CompareTo(GetDisplayInfoOrder(y.GetType()))); 31 } 32 33 static int GetDisplayInfoOrder(Type type) 34 { 35 var attribute = type.GetCustomAttribute<DisplayInfoAttribute>(); 36 return attribute?.order ?? int.MaxValue; 37 } 38 39 [SettingsProvider] 40 static SettingsProvider PreferenceGUI() 41 { 42 var provider = new SettingsProvider(corePreferencePath, SettingsScope.User) 43 { 44 guiHandler = searchContext => 45 { 46 using (new SettingsProviderGUIScope()) 47 { 48 foreach (var providers in s_Providers) 49 { 50 if (providers.header != null) 51 { 52 EditorGUILayout.LabelField(providers.header, EditorStyles.boldLabel); 53 providers.PreferenceGUI(); 54 } 55 } 56 } 57 } 58 }; 59 60 FillKeywords(provider); 61 62 return provider; 63 } 64 65 private static void FillKeywords(SettingsProvider provider) 66 { 67 List<string> keywords = new List<string>(); 68 foreach (var providers in s_Providers) 69 keywords.AddRange(providers.keywords); 70 provider.keywords = keywords; 71 } 72 73 /// <summary> 74 /// Open the Core Rendering Pipeline preference window. 75 /// </summary> 76 public static void Open() 77 { 78 SettingsService.OpenUserPreferences(corePreferencePath); 79 } 80 } 81}