diff --git a/Source/Editor/CustomEditors/Editors/GenericEditor.cs b/Source/Editor/CustomEditors/Editors/GenericEditor.cs
index f078c7778..8dd34675d 100644
--- a/Source/Editor/CustomEditors/Editors/GenericEditor.cs
+++ b/Source/Editor/CustomEditors/Editors/GenericEditor.cs
@@ -799,6 +799,7 @@ namespace FlaxEditor.CustomEditors.Editors
OnGroupsEnd();
}
+ ///
protected override void Deinitialize()
{
_visibleIfCaches = null;
diff --git a/Source/Editor/Modules/ContentDatabaseModule.cs b/Source/Editor/Modules/ContentDatabaseModule.cs
index 0e4e96d30..61797676e 100644
--- a/Source/Editor/Modules/ContentDatabaseModule.cs
+++ b/Source/Editor/Modules/ContentDatabaseModule.cs
@@ -88,6 +88,8 @@ namespace FlaxEditor.Modules
// Register AssetItems serialization helper (serialize ref ID only)
FlaxEngine.Json.JsonSerializer.Settings.Converters.Add(new AssetItemConverter());
+
+ ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
}
private void OnContentAssetDisposing(Asset asset)
@@ -1260,6 +1262,47 @@ namespace FlaxEditor.Modules
}
}
+ private void OnScriptsReloadBegin()
+ {
+ var enabledEvents = _enableEvents;
+ _enableEvents = false;
+ _isDuringFastSetup = true;
+ var startItems = _itemsCreated;
+ foreach (var project in Projects)
+ {
+ if (project.Content != null)
+ {
+ //Dispose(project.Content.Folder);
+ for (int i = 0; i < project.Content.Folder.Children.Count; i++)
+ {
+ Dispose(project.Content.Folder.Children[i]);
+ i--;
+ }
+ }
+ if (project.Source != null)
+ {
+ //Dispose(project.Source.Folder);
+ for (int i = 0; i < project.Source.Folder.Children.Count; i++)
+ {
+ Dispose(project.Source.Folder.Children[i]);
+ i--;
+ }
+ }
+ }
+
+ List removeProxies = new List();
+ foreach (var proxy in Editor.Instance.ContentDatabase.Proxy)
+ {
+ if (proxy.GetType().IsCollectible)
+ removeProxies.Add(proxy);
+ }
+ foreach (var proxy in removeProxies)
+ RemoveProxy(proxy, false);
+
+ _isDuringFastSetup = false;
+ _enableEvents = enabledEvents;
+ }
+
///
public override void OnUpdate()
{
@@ -1285,6 +1328,7 @@ namespace FlaxEditor.Modules
public override void OnExit()
{
FlaxEngine.Content.AssetDisposing -= OnContentAssetDisposing;
+ ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin;
// Disable events
_enableEvents = false;
diff --git a/Source/Editor/Modules/ContentImportingModule.cs b/Source/Editor/Modules/ContentImportingModule.cs
index 65821cd43..d235a792e 100644
--- a/Source/Editor/Modules/ContentImportingModule.cs
+++ b/Source/Editor/Modules/ContentImportingModule.cs
@@ -391,6 +391,20 @@ namespace FlaxEditor.Modules
public override void OnInit()
{
ImportFileEntry.RegisterDefaultTypes();
+ ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
+ }
+
+ private void OnScriptsReloadBegin()
+ {
+ // Remove import file types from scripting assemblies
+ List removeFileTypes = new List();
+ foreach (var pair in ImportFileEntry.FileTypes)
+ {
+ if (pair.Value.Method.IsCollectible || (pair.Value.Target != null && pair.Value.Target.GetType().IsCollectible))
+ removeFileTypes.Add(pair.Key);
+ }
+ foreach (var fileType in removeFileTypes)
+ ImportFileEntry.FileTypes.Remove(fileType);
}
///
@@ -451,6 +465,7 @@ namespace FlaxEditor.Modules
///
public override void OnExit()
{
+ ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin;
EndWorker();
}
}
diff --git a/Source/Editor/Modules/WindowsModule.cs b/Source/Editor/Modules/WindowsModule.cs
index cf77d00e9..37a8e3e2b 100644
--- a/Source/Editor/Modules/WindowsModule.cs
+++ b/Source/Editor/Modules/WindowsModule.cs
@@ -52,7 +52,6 @@ namespace FlaxEditor.Modules
public Float2 FloatPosition;
public AssetItem Item;
- public AssetItem Item2;
// Constructor, to allow for default values
public WindowRestoreData()
diff --git a/Source/Editor/Windows/ContentWindow.cs b/Source/Editor/Windows/ContentWindow.cs
index 323bcdb68..a473f93aa 100644
--- a/Source/Editor/Windows/ContentWindow.cs
+++ b/Source/Editor/Windows/ContentWindow.cs
@@ -29,6 +29,7 @@ namespace FlaxEditor.Windows
private const string ProjectDataLastViewedFolder = "LastViewedFolder";
private bool _isWorkspaceDirty;
private string _workspaceRebuildLocation;
+ private string _lastViewedFolderBeforeReload;
private SplitPanel _split;
private Panel _contentViewPanel;
private Panel _contentTreePanel;
@@ -1029,6 +1030,41 @@ namespace FlaxEditor.Windows
ShowRoot();
};
+ Refresh();
+
+ // Load last viewed folder
+ if (Editor.ProjectCache.TryGetCustomData(ProjectDataLastViewedFolder, out var lastViewedFolder))
+ {
+ if (Editor.ContentDatabase.Find(lastViewedFolder) is ContentFolder folder)
+ _tree.Select(folder.Node);
+ }
+
+ ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
+ ScriptsBuilder.ScriptsReloadEnd += OnScriptsReloadEnd;
+ }
+
+ private void OnScriptsReloadBegin()
+ {
+ var lastViewedFolder = _tree.Selection.Count == 1 ? _tree.SelectedNode as ContentTreeNode : null;
+ _lastViewedFolderBeforeReload = lastViewedFolder?.Path ?? string.Empty;
+
+ _tree.RemoveChild(_root);
+ _root = null;
+ }
+
+ private void OnScriptsReloadEnd()
+ {
+ Refresh();
+
+ if (!string.IsNullOrEmpty(_lastViewedFolderBeforeReload))
+ {
+ if (Editor.ContentDatabase.Find(_lastViewedFolderBeforeReload) is ContentFolder folder)
+ _tree.Select(folder.Node);
+ }
+ }
+
+ private void Refresh()
+ {
// Setup content root node
_root = new RootContentTreeNode
{
@@ -1064,13 +1100,6 @@ namespace FlaxEditor.Windows
// Update UI layout
_isLayoutLocked = false;
PerformLayout();
-
- // Load last viewed folder
- if (Editor.ProjectCache.TryGetCustomData(ProjectDataLastViewedFolder, out var lastViewedFolder))
- {
- if (Editor.ContentDatabase.Find(lastViewedFolder) is ContentFolder folder)
- _tree.Select(folder.Node);
- }
}
///
@@ -1218,6 +1247,8 @@ namespace FlaxEditor.Windows
_viewDropdown = null;
Editor.Options.OptionsChanged -= OnOptionsChanged;
+ ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin;
+ ScriptsBuilder.ScriptsReloadEnd -= OnScriptsReloadEnd;
base.OnDestroy();
}
diff --git a/Source/Editor/Windows/ToolboxWindow.cs b/Source/Editor/Windows/ToolboxWindow.cs
index 7c15d29c9..8d4a61593 100644
--- a/Source/Editor/Windows/ToolboxWindow.cs
+++ b/Source/Editor/Windows/ToolboxWindow.cs
@@ -150,6 +150,22 @@ namespace FlaxEditor.Windows
_searchBox.Clear();
_groupSearch.DisposeChildren();
_groupSearch.PerformLayout();
+
+ // Remove tabs
+ var tabs = new List();
+ foreach (var child in _actorGroups.Children)
+ {
+ if (child is Tab tab)
+ {
+ if (tab.Text != "Search")
+ tabs.Add(tab);
+ }
+ }
+ foreach (var tab in tabs)
+ {
+ var group = _actorGroups.Children.Find(T => T == tab);
+ group.Dispose();
+ }
}
private void OnScriptsReloadEnd()
diff --git a/Source/Engine/Scripting/Scripting.cs b/Source/Engine/Scripting/Scripting.cs
index 66a34faf0..33aea8a26 100644
--- a/Source/Engine/Scripting/Scripting.cs
+++ b/Source/Engine/Scripting/Scripting.cs
@@ -170,6 +170,10 @@ namespace FlaxEngine
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
TaskScheduler.UnobservedTaskException += OnUnobservedTaskException;
Localization.LocalizationChanged += OnLocalizationChanged;
+#if FLAX_EDITOR
+ FlaxEditor.ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
+ FlaxEditor.ScriptsBuilder.ScriptsReloadEnd += OnScriptsReloadEnd;
+#endif
OnLocalizationChanged();
if (!Engine.IsEditor)
@@ -178,6 +182,19 @@ namespace FlaxEngine
}
}
+#if FLAX_EDITOR
+ private static void OnScriptsReloadBegin()
+ {
+ // Tooltip might hold references to scripting assemblies
+ Style.Current.SharedTooltip = null;
+ }
+
+ private static void OnScriptsReloadEnd()
+ {
+ Style.Current.SharedTooltip = new Tooltip();
+ }
+#endif
+
private static void OnLocalizationChanged()
{
// Invariant-globalization only (see InitHostfxr with Mono)
@@ -359,6 +376,10 @@ namespace FlaxEngine
MainThreadTaskScheduler.Dispose();
Json.JsonSerializer.Dispose();
+#if FLAX_EDITOR
+ FlaxEditor.ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin;
+ FlaxEditor.ScriptsBuilder.ScriptsReloadEnd -= OnScriptsReloadEnd;
+#endif
}
///