diff --git a/Source/Editor/Content/Proxy/SceneProxy.cs b/Source/Editor/Content/Proxy/SceneProxy.cs
index 78d88b440..004c2aed7 100644
--- a/Source/Editor/Content/Proxy/SceneProxy.cs
+++ b/Source/Editor/Content/Proxy/SceneProxy.cs
@@ -30,6 +30,12 @@ namespace FlaxEditor.Content
return item is SceneItem;
}
+ ///
+ public override bool AcceptsAsset(string typeName, string path)
+ {
+ return (typeName == Scene.AssetTypename || typeName == Scene.EditorPickerTypename) && path.EndsWith(FileExtension, StringComparison.OrdinalIgnoreCase);
+ }
+
///
public override bool CanCreate(ContentFolder targetLocation)
{
diff --git a/Source/Editor/Content/Thumbnails/ThumbnailsModule.cs b/Source/Editor/Content/Thumbnails/ThumbnailsModule.cs
index 160c783ed..1282e4daa 100644
--- a/Source/Editor/Content/Thumbnails/ThumbnailsModule.cs
+++ b/Source/Editor/Content/Thumbnails/ThumbnailsModule.cs
@@ -406,18 +406,16 @@ namespace FlaxEditor.Content.Thumbnails
for (int i = 0; i < maxChecks; i++)
{
var request = _requests[i];
-
try
{
if (request.IsReady)
- {
return request;
- }
}
catch (Exception ex)
{
- Editor.LogWarning(ex);
Editor.LogWarning($"Failed to prepare thumbnail rendering for {request.Item.ShortName}.");
+ Editor.LogWarning(ex);
+ _requests.RemoveAt(i--);
}
}
@@ -515,7 +513,6 @@ namespace FlaxEditor.Content.Thumbnails
for (int i = 0; i < checks; i++)
{
var request = _requests[i];
-
try
{
if (request.IsReady)
@@ -529,8 +526,9 @@ namespace FlaxEditor.Content.Thumbnails
}
catch (Exception ex)
{
- Editor.LogWarning(ex);
Editor.LogWarning($"Failed to prepare thumbnail rendering for {request.Item.ShortName}.");
+ Editor.LogWarning(ex);
+ _requests.RemoveAt(i--);
}
}
diff --git a/Source/Editor/Modules/ContentDatabaseModule.cs b/Source/Editor/Modules/ContentDatabaseModule.cs
index b1de78456..80f419a6f 100644
--- a/Source/Editor/Modules/ContentDatabaseModule.cs
+++ b/Source/Editor/Modules/ContentDatabaseModule.cs
@@ -811,10 +811,9 @@ namespace FlaxEditor.Modules
{
if (node == null)
return;
-
- // Temporary data
var folder = node.Folder;
var path = folder.Path;
+ var canHaveAssets = node.CanHaveAssets;
if (_isDuringFastSetup)
{
@@ -833,20 +832,38 @@ namespace FlaxEditor.Modules
var child = folder.Children[i];
if (!child.Exists)
{
- // Send info
+ // Item doesn't exist anymore
Editor.Log(string.Format($"Content item \'{child.Path}\' has been removed"));
-
- // Destroy it
Delete(child, false);
-
i--;
}
+ else if (canHaveAssets && child is AssetItem childAsset)
+ {
+ // Check if asset type doesn't match the item proxy (eg. item reimported as Material Instance instead of Material)
+ if (FlaxEngine.Content.GetAssetInfo(child.Path, out var assetInfo))
+ {
+ bool changed = assetInfo.ID != childAsset.ID;
+ if (!changed && assetInfo.TypeName != childAsset.TypeName)
+ {
+ // Use proxy check (eg. scene asset might accept different typename than AssetInfo reports)
+ var proxy = GetAssetProxy(childAsset.TypeName, child.Path);
+ if (proxy == null)
+ proxy = GetAssetProxy(assetInfo.TypeName, child.Path);
+ changed = !proxy.AcceptsAsset(assetInfo.TypeName, child.Path);
+ }
+ if (changed)
+ {
+ OnAssetTypeInfoChanged(childAsset, ref assetInfo);
+ i--;
+ }
+ }
+ }
}
}
// Find files
var files = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly);
- if (node.CanHaveAssets)
+ if (canHaveAssets)
{
LoadAssets(node, files);
}
@@ -1157,19 +1174,8 @@ namespace FlaxEditor.Modules
// For eg. change texture to sprite atlas on reimport
if (binaryAssetItem.TypeName != assetInfo.TypeName)
{
- // Asset type has been changed!
- Editor.LogWarning(string.Format("Asset \'{0}\' changed type from {1} to {2}", item.Path, binaryAssetItem.TypeName, assetInfo.TypeName));
- Editor.Windows.CloseAllEditors(item);
-
- // Remove this item from the database and some related data
var toRefresh = binaryAssetItem.ParentFolder;
- binaryAssetItem.Dispose();
- toRefresh.Children.Remove(binaryAssetItem);
- if (!binaryAssetItem.HasDefaultThumbnail)
- {
- // Delete old thumbnail and remove it from the cache
- Editor.Instance.Thumbnails.DeletePreview(binaryAssetItem);
- }
+ OnAssetTypeInfoChanged(binaryAssetItem, ref assetInfo);
// Refresh the parent folder to find the new asset (it should have different type or some other format)
RefreshFolder(toRefresh, false);
@@ -1186,6 +1192,23 @@ namespace FlaxEditor.Modules
}
}
+ private void OnAssetTypeInfoChanged(AssetItem assetItem, ref AssetInfo assetInfo)
+ {
+ // Asset type has been changed!
+ Editor.LogWarning(string.Format("Asset \'{0}\' changed type from {1} to {2}", assetItem.Path, assetItem.TypeName, assetInfo.TypeName));
+ Editor.Windows.CloseAllEditors(assetItem);
+
+ // Remove this item from the database and some related data
+ assetItem.Dispose();
+ assetItem.ParentFolder.Children.Remove(assetItem);
+
+ // Delete old thumbnail and remove it from the cache
+ if (!assetItem.HasDefaultThumbnail)
+ {
+ Editor.Instance.Thumbnails.DeletePreview(assetItem);
+ }
+ }
+
internal void OnDirectoryEvent(MainContentTreeNode node, FileSystemEventArgs e)
{
// Ensure to be ready for external events
diff --git a/Source/Editor/Surface/SurfaceUtils.cs b/Source/Editor/Surface/SurfaceUtils.cs
index 5f4c3ef07..6fc54545c 100644
--- a/Source/Editor/Surface/SurfaceUtils.cs
+++ b/Source/Editor/Surface/SurfaceUtils.cs
@@ -295,6 +295,8 @@ namespace FlaxEditor.Surface
continue;
var tag = e.Tag;
var parameter = e.Parameter;
+ if (parameter == null)
+ continue;
// Editor Display
var itemLayout = CustomEditors.Editors.GenericEditor.OnGroup(layout, e.Display);
diff --git a/Source/Editor/Windows/Assets/AssetEditorWindow.cs b/Source/Editor/Windows/Assets/AssetEditorWindow.cs
index 0d244479c..2e048b924 100644
--- a/Source/Editor/Windows/Assets/AssetEditorWindow.cs
+++ b/Source/Editor/Windows/Assets/AssetEditorWindow.cs
@@ -388,14 +388,16 @@ namespace FlaxEditor.Windows.Assets
protected override void OnShow()
{
// Check if has no asset (but has item linked)
- if (_asset == null && _item != null)
+ var item = _item;
+ if (_asset == null && item != null)
{
// Load asset
_asset = LoadAsset();
if (_asset == null)
{
- Editor.LogError(string.Format("Cannot load asset \'{0}\' ({1})", _item.Path, typeof(T)));
+ Editor.LogError(string.Format("Cannot load asset \'{0}\' ({1})", item.Path, typeof(T)));
Close();
+ Editor.ContentDatabase.RefreshFolder(item, false);
return;
}
diff --git a/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs b/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs
index 5f1273999..3e0525fb7 100644
--- a/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs
+++ b/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs
@@ -521,8 +521,11 @@ namespace FlaxEditor.Windows.Assets
///
protected override void OnClose()
{
- // Discard unsaved changes
- _properties.DiscardChanges();
+ if (Asset)
+ {
+ // Discard unsaved changes
+ _properties.DiscardChanges();
+ }
// Cleanup
_undo.Clear();