A game about forced loneliness, made by TACStudios
at master 4.0 kB view raw
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}