A game about forced loneliness, made by TACStudios
1using UnityEngine;
2using UnityEditor;
3
4namespace Unity.VisualScripting
5{
6 internal class ProjectSettingsProviderView : SettingsProvider
7 {
8 private const string Path = "Project/Visual Scripting";
9 private const string Title = "Visual Scripting";
10 private const string TitleGroup = "Generate Nodes";
11 private readonly GUIStyle marginStyle = new GUIStyle() { margin = new RectOffset(10, 10, 10, 10) };
12
13 private AssemblyOptionsSettings _assemblyOptionsSettings;
14 private TypeOptionsSettings _typeOptionsSettings;
15 private CustomPropertyProviderSettings _customPropertyProviderSettings;
16 private LinkerPropertyProviderSettings _linkerPropertyProviderSettings;
17 private BackupSettings _backupSettings;
18 private ScriptReferenceResolverSettings _scriptReferenceResolverSettings;
19
20 private BoltCoreConfiguration _vsCoreConfig = null;
21
22 public ProjectSettingsProviderView() : base(Path, SettingsScope.Project)
23 {
24 label = Title;
25 EditorTypeUtility.Initialize();
26 }
27
28 private void CreateOptionsIfNeeded()
29 {
30 _assemblyOptionsSettings ??= new AssemblyOptionsSettings(_vsCoreConfig);
31 _typeOptionsSettings ??= new TypeOptionsSettings(_vsCoreConfig);
32 _customPropertyProviderSettings ??= new CustomPropertyProviderSettings();
33 _linkerPropertyProviderSettings ??= new LinkerPropertyProviderSettings(_vsCoreConfig);
34 _backupSettings ??= new BackupSettings();
35 _scriptReferenceResolverSettings ??= new ScriptReferenceResolverSettings();
36 }
37
38 private void EnsureConfig()
39 {
40 if (_vsCoreConfig != null)
41 return;
42
43 if (BoltCore.instance == null || BoltCore.Configuration == null)
44 {
45 UnityAPI.Initialize();
46 PluginContainer.Initialize();
47 }
48
49 _vsCoreConfig = BoltCore.Configuration;
50 }
51
52 public override void OnGUI(string searchContext)
53 {
54 GUILayout.BeginVertical(marginStyle);
55
56 if (VSUsageUtility.isVisualScriptingUsed)
57 {
58 EnsureConfig();
59
60 GUILayout.Space(5f);
61
62 GUILayout.Label(TitleGroup, EditorStyles.boldLabel);
63
64 GUILayout.Space(10f);
65
66 // happens when opening unity with the settings window already opened. there's a delay until the singleton is assigned
67 if (_vsCoreConfig == null)
68 {
69 EditorGUILayout.HelpBox("Loading Configuration...", MessageType.Info);
70 return;
71 }
72
73 CreateOptionsIfNeeded();
74
75 _typeOptionsSettings.OnGUI();
76
77 GUILayout.Space(10f);
78
79 _assemblyOptionsSettings.OnGUI();
80
81 GUILayout.Space(10f);
82
83 _customPropertyProviderSettings.OnGUI();
84
85 GUILayout.Space(10f);
86
87 _linkerPropertyProviderSettings.OnGUI();
88
89 GUILayout.Space(10f);
90
91 _backupSettings.OnGUI();
92
93 GUILayout.Space(10f);
94
95 _scriptReferenceResolverSettings.OnGUI();
96 }
97 else
98 {
99 GUILayout.Space(5f);
100
101 GUILayout.BeginHorizontal(EditorStyles.label);
102 if (GUILayout.Button("Initialize Visual Scripting", Styles.defaultsButton))
103 {
104 VSUsageUtility.isVisualScriptingUsed = true;
105 }
106
107 GUILayout.Space(5f);
108 GUILayout.EndHorizontal();
109 }
110
111 GUILayout.EndVertical();
112 }
113
114 private static class Styles
115 {
116 static Styles()
117 {
118 defaultsButton = new GUIStyle("Button");
119 defaultsButton.padding = new RectOffset(10, 10, 4, 4);
120 }
121
122 public static readonly GUIStyle defaultsButton;
123 }
124 }
125}