A game about forced loneliness, made by TACStudios
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}