Close and restore AssetEditorWindows on scripting reload

This commit is contained in:
2024-07-31 23:08:52 +03:00
committed by Ari Vuollet
parent 800b163de9
commit c740d27b0e
6 changed files with 38 additions and 20 deletions

View File

@@ -61,7 +61,7 @@ namespace FlaxEditor.Modules
public event Action WorkspaceModified;
/// <summary>
/// Occurs when workspace has will be rebuilt.
/// Occurs when workspace will be rebuilt.
/// </summary>
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;

View File

@@ -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

View File

@@ -58,6 +58,8 @@ namespace FlaxEditor.Windows.Assets
InputActions.Add(options => options.Save, Save);
UpdateTitle();
ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
}
/// <summary>
@@ -151,6 +153,8 @@ namespace FlaxEditor.Windows.Assets
/// <inheritdoc />
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();
}
/// <inheritdoc />
protected virtual void OnScriptsReloadBegin()
{
if (!IsHidden)
{
Editor.Instance.Windows.AddToRestore(this);
}
}
#region IEditable Implementation
private bool _isEdited;

View File

@@ -268,8 +268,11 @@ namespace FlaxEditor.Windows.Assets
UpdateKnowledge();
}
private void OnScriptsReloadBegin()
/// <inheritdoc />
protected override void OnScriptsReloadBegin()
{
base.OnScriptsReloadBegin();
// TODO: impl hot-reload for BT to nicely refresh state (save asset, clear undo/properties, reload surface)
Close();
}

View File

@@ -124,8 +124,10 @@ namespace FlaxEditor.Windows.Assets
UpdateToolstrip();
}
private void OnScriptsReloadBegin()
/// <inheritdoc />
protected override void OnScriptsReloadBegin()
{
base.OnScriptsReloadBegin();
Close();
}

View File

@@ -286,8 +286,10 @@ namespace FlaxEditor.Windows.Assets
return false;
}
private void OnScriptsReloadBegin()
/// <inheritdoc />
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;