Skip to content

Commit dc98d89

Browse files
committed
Fix fetching and initializing Toolbox features when assets are updating
1 parent c6bbdd3 commit dc98d89

File tree

2 files changed

+44
-18
lines changed

2 files changed

+44
-18
lines changed

Assets/Editor Toolbox/Editor/ToolboxAssetProcessor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ private static AssetDeleteResult OnWillDeleteAsset(string assetPath, RemoveAsset
1010
if (ToolboxManager.Settings &&
1111
ToolboxManager.SettingsGuid == AssetDatabase.AssetPathToGUID(assetPath))
1212
{
13-
ToolboxManager.InitializeSettings(null);
13+
ToolboxManager.TryInitializeSettings(null);
1414
}
1515

1616
return AssetDeleteResult.DidNotDelete;

Assets/Editor Toolbox/Editor/ToolboxManager.cs

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System.IO;
1+
using System.Collections;
2+
using System.IO;
3+
using Unity.EditorCoroutines.Editor;
24
using UnityEditor;
35
using UnityEngine;
46

@@ -87,35 +89,62 @@ private static void ManageSceneViewCore(IToolboxSceneViewSettings settings)
8789
ToolboxEditorSceneView.UpdateSettings(settings);
8890
}
8991

90-
91-
[InitializeOnLoadMethod]
92-
internal static bool InitializeSettings()
92+
private static string GetSettingsFileGuid()
9393
{
9494
var guids = AssetDatabase.FindAssets("t:" + settingsType);
95+
string targetGuid = null;
9596
//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--)
9798
{
99+
var guid = guids[i];
98100
var path = AssetDatabase.GUIDToAssetPath(guid);
101+
targetGuid = guid;
99102
if (path.StartsWith("Assets"))
100103
{
101-
guids[0] = guid;
102104
break;
103105
}
104106
}
105107

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())
107116
{
117+
IsInitializing = false;
108118
IsInitialized = true;
109-
return true;
119+
return;
110120
}
111-
else
121+
122+
EditorCoroutineUtility.StartCoroutineOwnerless(InitializeSettingsAsync());
123+
static IEnumerator InitializeSettingsAsync()
112124
{
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;
115138
}
116139
}
117140

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)
119148
{
120149
SettingsGuid = settingsGuid;
121150
SettingsPath = AssetDatabase.GUIDToAssetPath(settingsGuid);
@@ -152,15 +181,14 @@ internal static void ReimportSettings()
152181
AssetDatabase.ImportAsset(path);
153182
}
154183

155-
156184
[SettingsProvider]
157185
internal static SettingsProvider SettingsProvider()
158186
{
159187
var provider = new SettingsProvider("Project/Editor Toolbox", SettingsScope.Project);
160188

161189
void ReintializeProvider()
162190
{
163-
InitializeSettings();
191+
InitializeToolbox();
164192

165193
//rebuild the settings provider right after initialization
166194
provider.OnDeactivate();
@@ -226,11 +254,9 @@ void ReintializeProvider()
226254
return provider;
227255
}
228256

229-
230257
internal static bool IsInitialized { get; private set; }
231-
258+
internal static bool IsInitializing { get; private set; }
232259
internal static ToolboxEditorSettings Settings { get; private set; }
233-
234260
internal static string SettingsPath { get; private set; }
235261
internal static string SettingsGuid { get; private set; }
236262
}

0 commit comments

Comments
 (0)