|
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