|
1 |
| -using System.IO; |
| 1 | +using System.Collections; |
| 2 | +using System.IO; |
| 3 | +using Unity.EditorCoroutines.Editor; |
2 | 4 | using UnityEditor;
|
3 | 5 | using UnityEngine;
|
4 | 6 |
|
@@ -87,35 +89,62 @@ private static void ManageSceneViewCore(IToolboxSceneViewSettings settings)
|
87 | 89 | ToolboxEditorSceneView.UpdateSettings(settings);
|
88 | 90 | }
|
89 | 91 |
|
90 |
| - |
91 |
| - [InitializeOnLoadMethod] |
92 |
| - internal static bool InitializeSettings() |
| 92 | + private static string GetSettingsFileGuid() |
93 | 93 | {
|
94 | 94 | var guids = AssetDatabase.FindAssets("t:" + settingsType);
|
| 95 | + string targetGuid = null; |
95 | 96 | //try to find a settings file in a non-package directory
|
96 |
| - foreach (var guid in guids) |
| 97 | + for (var i = guids.Length - 1; i >= 0; i--) |
97 | 98 | {
|
| 99 | + var guid = guids[i]; |
98 | 100 | var path = AssetDatabase.GUIDToAssetPath(guid);
|
| 101 | + targetGuid = guid; |
99 | 102 | if (path.StartsWith("Assets"))
|
100 | 103 | {
|
101 |
| - guids[0] = guid; |
102 | 104 | break;
|
103 | 105 | }
|
104 | 106 | }
|
105 | 107 |
|
106 |
| - if (InitializeSettings(guids.Length > 0 ? guids[0] : null)) |
| 108 | + return targetGuid; |
| 109 | + } |
| 110 | + |
| 111 | + [InitializeOnLoadMethod] |
| 112 | + internal static void InitializeToolbox() |
| 113 | + { |
| 114 | + IsInitializing = true; |
| 115 | + if (TryInitializeSettings()) |
107 | 116 | {
|
| 117 | + IsInitializing = false; |
108 | 118 | IsInitialized = true;
|
109 |
| - return true; |
| 119 | + return; |
110 | 120 | }
|
111 |
| - else |
| 121 | + |
| 122 | + EditorCoroutineUtility.StartCoroutineOwnerless(InitializeSettingsAsync()); |
| 123 | + static IEnumerator InitializeSettingsAsync() |
112 | 124 | {
|
113 |
| - ToolboxEditorLog.KitInitializationMessage(); |
114 |
| - return false; |
| 125 | + yield return null; |
| 126 | + yield return new WaitWhile(() => EditorApplication.isUpdating); |
| 127 | + if (TryInitializeSettings()) |
| 128 | + { |
| 129 | + IsInitialized = true; |
| 130 | + } |
| 131 | + else |
| 132 | + { |
| 133 | + IsInitialized = false; |
| 134 | + ToolboxEditorLog.KitInitializationMessage(); |
| 135 | + } |
| 136 | + |
| 137 | + IsInitializing = false; |
115 | 138 | }
|
116 | 139 | }
|
117 | 140 |
|
118 |
| - internal static bool InitializeSettings(string settingsGuid) |
| 141 | + internal static bool TryInitializeSettings() |
| 142 | + { |
| 143 | + var settingsGuid = GetSettingsFileGuid(); |
| 144 | + return TryInitializeSettings(settingsGuid); |
| 145 | + } |
| 146 | + |
| 147 | + internal static bool TryInitializeSettings(string settingsGuid) |
119 | 148 | {
|
120 | 149 | SettingsGuid = settingsGuid;
|
121 | 150 | SettingsPath = AssetDatabase.GUIDToAssetPath(settingsGuid);
|
@@ -152,15 +181,14 @@ internal static void ReimportSettings()
|
152 | 181 | AssetDatabase.ImportAsset(path);
|
153 | 182 | }
|
154 | 183 |
|
155 |
| - |
156 | 184 | [SettingsProvider]
|
157 | 185 | internal static SettingsProvider SettingsProvider()
|
158 | 186 | {
|
159 | 187 | var provider = new SettingsProvider("Project/Editor Toolbox", SettingsScope.Project);
|
160 | 188 |
|
161 | 189 | void ReintializeProvider()
|
162 | 190 | {
|
163 |
| - InitializeSettings(); |
| 191 | + InitializeToolbox(); |
164 | 192 |
|
165 | 193 | //rebuild the settings provider right after initialization
|
166 | 194 | provider.OnDeactivate();
|
@@ -226,11 +254,9 @@ void ReintializeProvider()
|
226 | 254 | return provider;
|
227 | 255 | }
|
228 | 256 |
|
229 |
| - |
230 | 257 | internal static bool IsInitialized { get; private set; }
|
231 |
| - |
| 258 | + internal static bool IsInitializing { get; private set; } |
232 | 259 | internal static ToolboxEditorSettings Settings { get; private set; }
|
233 |
| - |
234 | 260 | internal static string SettingsPath { get; private set; }
|
235 | 261 | internal static string SettingsGuid { get; private set; }
|
236 | 262 | }
|
|
0 commit comments