Clear VisjectSurface node caches and context menus during scripts reload

This commit is contained in:
2024-04-23 21:38:42 +03:00
parent 83b301684d
commit bdb28b8589
4 changed files with 29 additions and 2 deletions

View File

@@ -19,6 +19,8 @@ namespace FlaxEditor.Surface
[HideInEditor] [HideInEditor]
public class AnimGraphSurface : VisjectSurface public class AnimGraphSurface : VisjectSurface
{ {
private static NodesCache _nodesCache = new NodesCache(IterateNodesCache);
private static readonly List<GroupArchetype> StateMachineGroupArchetypes = new List<GroupArchetype>(new[] private static readonly List<GroupArchetype> StateMachineGroupArchetypes = new List<GroupArchetype>(new[]
{ {
// Customized Animations group with special nodes to use here // Customized Animations group with special nodes to use here
@@ -87,8 +89,6 @@ namespace FlaxEditor.Surface
} }
}; };
private static NodesCache _nodesCache = new NodesCache(IterateNodesCache);
/// <summary> /// <summary>
/// The state machine editing context menu. /// The state machine editing context menu.
/// </summary> /// </summary>
@@ -158,6 +158,8 @@ namespace FlaxEditor.Surface
private void OnScriptsReloadBegin() private void OnScriptsReloadBegin()
{ {
_nodesCache.Clear();
// Check if any of the nodes comes from the game scripts - those can be reloaded at runtime so prevent crashes // Check if any of the nodes comes from the game scripts - those can be reloaded at runtime so prevent crashes
bool hasTypeFromGameScripts = Editor.Instance.CodeEditing.AnimGraphNodes.HasTypeFromGameScripts; bool hasTypeFromGameScripts = Editor.Instance.CodeEditing.AnimGraphNodes.HasTypeFromGameScripts;

View File

@@ -24,6 +24,7 @@ namespace FlaxEditor.Surface
public BehaviorTreeSurface(IVisjectSurfaceOwner owner, Action onSave, FlaxEditor.Undo undo) public BehaviorTreeSurface(IVisjectSurfaceOwner owner, Action onSave, FlaxEditor.Undo undo)
: base(owner, onSave, undo, CreateStyle()) : base(owner, onSave, undo, CreateStyle())
{ {
ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
} }
private static SurfaceStyle CreateStyle() private static SurfaceStyle CreateStyle()
@@ -35,6 +36,11 @@ namespace FlaxEditor.Surface
return style; return style;
} }
private void OnScriptsReloadBegin()
{
_nodesCache.Clear();
}
private static void DrawBox(Box box) private static void DrawBox(Box box)
{ {
var rect = new Rectangle(Float2.Zero, box.Size); var rect = new Rectangle(Float2.Zero, box.Size);
@@ -186,6 +192,7 @@ namespace FlaxEditor.Surface
{ {
if (IsDisposing) if (IsDisposing)
return; return;
ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin;
_nodesCache.Wait(); _nodesCache.Wait();
base.OnDestroy(); base.OnDestroy();

View File

@@ -397,6 +397,15 @@ namespace FlaxEditor.Surface
// Init drag handlers // Init drag handlers
DragHandlers.Add(_dragAssets = new DragAssets<DragDropEventArgs>(ValidateDragItem)); DragHandlers.Add(_dragAssets = new DragAssets<DragDropEventArgs>(ValidateDragItem));
DragHandlers.Add(_dragParameters = new DragNames<DragDropEventArgs>(SurfaceParameter.DragPrefix, ValidateDragParameter)); DragHandlers.Add(_dragParameters = new DragNames<DragDropEventArgs>(SurfaceParameter.DragPrefix, ValidateDragParameter));
ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
}
private void OnScriptsReloadBegin()
{
_activeVisjectCM = null;
_cmPrimaryMenu?.Dispose();
_cmPrimaryMenu = null;
} }
/// <summary> /// <summary>
@@ -995,6 +1004,8 @@ namespace FlaxEditor.Surface
_activeVisjectCM = null; _activeVisjectCM = null;
_cmPrimaryMenu?.Dispose(); _cmPrimaryMenu?.Dispose();
ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin;
base.OnDestroy(); base.OnDestroy();
} }
} }

View File

@@ -55,6 +55,12 @@ namespace FlaxEditor.Surface
{ {
_supportsImplicitCastFromObjectToBoolean = true; _supportsImplicitCastFromObjectToBoolean = true;
DragHandlers.Add(_dragActors = new DragActors(ValidateDragActor)); DragHandlers.Add(_dragActors = new DragActors(ValidateDragActor));
ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin;
}
private void OnScriptsReloadBegin()
{
_nodesCache.Clear();
} }
private bool ValidateDragActor(ActorNode actor) private bool ValidateDragActor(ActorNode actor)
@@ -596,6 +602,7 @@ namespace FlaxEditor.Surface
{ {
if (IsDisposing) if (IsDisposing)
return; return;
ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin;
_nodesCache.Wait(); _nodesCache.Wait();
base.OnDestroy(); base.OnDestroy();