diff --git a/Source/Editor/Modules/ContentDatabaseModule.cs b/Source/Editor/Modules/ContentDatabaseModule.cs
index f5d7dfe61..2eee39221 100644
--- a/Source/Editor/Modules/ContentDatabaseModule.cs
+++ b/Source/Editor/Modules/ContentDatabaseModule.cs
@@ -61,7 +61,7 @@ namespace FlaxEditor.Modules
public event Action WorkspaceModified;
///
- /// Occurs when workspace has will be rebuilt.
+ /// Occurs when workspace will be rebuilt.
///
public event Action WorkspaceRebuilding;
@@ -89,7 +89,7 @@ namespace FlaxEditor.Modules
// Register AssetItems serialization helper (serialize ref ID only)
FlaxEngine.Json.JsonSerializer.Settings.Converters.Add(new AssetItemConverter());
- ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
+ ScriptsBuilder.ScriptsReload += OnScriptsReload;
ScriptsBuilder.ScriptsReloadEnd += OnScriptsReloadEnd;
}
@@ -1314,7 +1314,7 @@ namespace FlaxEditor.Modules
}
}
- private void OnScriptsReloadBegin()
+ private void OnScriptsReload()
{
var enabledEvents = _enableEvents;
_enableEvents = false;
@@ -1387,7 +1387,8 @@ namespace FlaxEditor.Modules
public override void OnExit()
{
FlaxEngine.Content.AssetDisposing -= OnContentAssetDisposing;
- ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin;
+ ScriptsBuilder.ScriptsReload -= OnScriptsReload;
+ ScriptsBuilder.ScriptsReloadEnd -= OnScriptsReloadEnd;
// Disable events
_enableEvents = false;
diff --git a/Source/Editor/Modules/WindowsModule.cs b/Source/Editor/Modules/WindowsModule.cs
index f3c3b06e4..3a9778c85 100644
--- a/Source/Editor/Modules/WindowsModule.cs
+++ b/Source/Editor/Modules/WindowsModule.cs
@@ -51,7 +51,7 @@ namespace FlaxEditor.Modules
public Float2 FloatSize;
public Float2 FloatPosition;
- public AssetItem Item;
+ public Guid AssetItemID;
// Constructor, to allow for default values
public WindowRestoreData()
@@ -808,11 +808,11 @@ namespace FlaxEditor.Modules
Level.SceneSaving += OnSceneSaving;
Level.SceneUnloaded += OnSceneUnloaded;
Level.SceneUnloading += OnSceneUnloading;
- ScriptsBuilder.ScriptsReloadEnd += OnScriptsReloadEnd;
+ Editor.ContentDatabase.WorkspaceRebuilt += OnWorkspaceRebuilt;
Editor.StateMachine.StateChanged += OnEditorStateChanged;
}
- internal void AddToRestore(PrefabWindow win)
+ internal void AddToRestore(AssetEditorWindow win)
{
var type = win.GetType();
var winData = new WindowRestoreData();
@@ -858,7 +858,7 @@ namespace FlaxEditor.Modules
}
winData.AssemblyName = type.Assembly.GetName().Name;
winData.TypeName = type.FullName;
- winData.Item = win.Item;
+ winData.AssetItemID = win.Item.ID;
_restoreWindows.Add(winData);
}
@@ -907,7 +907,7 @@ namespace FlaxEditor.Modules
_restoreWindows.Add(winData);
}
- private void OnScriptsReloadEnd()
+ private void OnWorkspaceRebuilt()
{
// Go in reverse order to create floating Prefab windows first before docked windows
for (int i = _restoreWindows.Count - 1; i >= 0; i--)
@@ -924,9 +924,11 @@ namespace FlaxEditor.Modules
if (type == null)
continue;
- if (type == typeof(PrefabWindow))
+ if (type.IsAssignableTo(typeof(AssetEditorWindow)))
{
- var win = new PrefabWindow(Editor.Instance, winData.Item);
+ var ctor = type.GetConstructor(new Type[] { typeof(Editor), typeof(AssetItem) });
+ var assetItem = Editor.ContentDatabase.FindAsset(winData.AssetItemID);
+ var win = (AssetEditorWindow)ctor.Invoke(new object[] { Editor.Instance, assetItem });
win.Show(winData.DockState, winData.DockState != DockState.Float ? winData.DockedTo : null, winData.SelectOnShow, winData.SplitterValue);
if (winData.DockState == DockState.Float)
{
@@ -1157,7 +1159,7 @@ namespace FlaxEditor.Modules
Level.SceneSaving -= OnSceneSaving;
Level.SceneUnloaded -= OnSceneUnloaded;
Level.SceneUnloading -= OnSceneUnloading;
- ScriptsBuilder.ScriptsReloadEnd -= OnScriptsReloadEnd;
+ Editor.ContentDatabase.WorkspaceRebuilt -= OnWorkspaceRebuilt;
Editor.StateMachine.StateChanged -= OnEditorStateChanged;
// Close main window
diff --git a/Source/Editor/Windows/Assets/AssetEditorWindow.cs b/Source/Editor/Windows/Assets/AssetEditorWindow.cs
index f781d49dc..e97cb7371 100644
--- a/Source/Editor/Windows/Assets/AssetEditorWindow.cs
+++ b/Source/Editor/Windows/Assets/AssetEditorWindow.cs
@@ -58,6 +58,8 @@ namespace FlaxEditor.Windows.Assets
InputActions.Add(options => options.Save, Save);
UpdateTitle();
+
+ ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
}
///
@@ -151,6 +153,8 @@ namespace FlaxEditor.Windows.Assets
///
public override void OnDestroy()
{
+ ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin;
+
if (_item != null)
{
// Ensure to remove linkage to the item
@@ -160,6 +164,15 @@ namespace FlaxEditor.Windows.Assets
base.OnDestroy();
}
+ ///
+ protected virtual void OnScriptsReloadBegin()
+ {
+ if (!IsHidden)
+ {
+ Editor.Instance.Windows.AddToRestore(this);
+ }
+ }
+
#region IEditable Implementation
private bool _isEdited;
diff --git a/Source/Editor/Windows/Assets/BehaviorTreeWindow.cs b/Source/Editor/Windows/Assets/BehaviorTreeWindow.cs
index 3d6399365..212e0c82f 100644
--- a/Source/Editor/Windows/Assets/BehaviorTreeWindow.cs
+++ b/Source/Editor/Windows/Assets/BehaviorTreeWindow.cs
@@ -268,8 +268,11 @@ namespace FlaxEditor.Windows.Assets
UpdateKnowledge();
}
- private void OnScriptsReloadBegin()
+ ///
+ protected override void OnScriptsReloadBegin()
{
+ base.OnScriptsReloadBegin();
+
// TODO: impl hot-reload for BT to nicely refresh state (save asset, clear undo/properties, reload surface)
Close();
}
diff --git a/Source/Editor/Windows/Assets/JsonAssetWindow.cs b/Source/Editor/Windows/Assets/JsonAssetWindow.cs
index dc1e1e71f..fec7ccb63 100644
--- a/Source/Editor/Windows/Assets/JsonAssetWindow.cs
+++ b/Source/Editor/Windows/Assets/JsonAssetWindow.cs
@@ -124,8 +124,10 @@ namespace FlaxEditor.Windows.Assets
UpdateToolstrip();
}
- private void OnScriptsReloadBegin()
+ ///
+ protected override void OnScriptsReloadBegin()
{
+ base.OnScriptsReloadBegin();
Close();
}
diff --git a/Source/Editor/Windows/Assets/PrefabWindow.cs b/Source/Editor/Windows/Assets/PrefabWindow.cs
index 120ffda57..f5d738880 100644
--- a/Source/Editor/Windows/Assets/PrefabWindow.cs
+++ b/Source/Editor/Windows/Assets/PrefabWindow.cs
@@ -286,8 +286,10 @@ namespace FlaxEditor.Windows.Assets
return false;
}
- private void OnScriptsReloadBegin()
+ ///
+ protected override void OnScriptsReloadBegin()
{
+ base.OnScriptsReloadBegin();
_isScriptsReloading = true;
if (_asset == null || !_asset.IsLoaded)
@@ -310,11 +312,6 @@ namespace FlaxEditor.Windows.Assets
}
}
- if (!IsHidden)
- {
- Editor.Instance.Windows.AddToRestore(this);
- }
-
// Cleanup
Deselect();
Graph.MainActor = null;