diff --git a/Source/Editor/Surface/AnimGraphSurface.cs b/Source/Editor/Surface/AnimGraphSurface.cs index c33224072..30a15d7f4 100644 --- a/Source/Editor/Surface/AnimGraphSurface.cs +++ b/Source/Editor/Surface/AnimGraphSurface.cs @@ -161,6 +161,8 @@ namespace FlaxEditor.Surface 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 bool hasTypeFromGameScripts = Editor.Instance.CodeEditing.AnimGraphNodes.HasTypeFromGameScripts; diff --git a/Source/Editor/Surface/BehaviorTreeSurface.cs b/Source/Editor/Surface/BehaviorTreeSurface.cs index 647c438e8..2dba081b0 100644 --- a/Source/Editor/Surface/BehaviorTreeSurface.cs +++ b/Source/Editor/Surface/BehaviorTreeSurface.cs @@ -24,6 +24,7 @@ namespace FlaxEditor.Surface public BehaviorTreeSurface(IVisjectSurfaceOwner owner, Action onSave, FlaxEditor.Undo undo) : base(owner, onSave, undo, CreateStyle()) { + ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin; } private static SurfaceStyle CreateStyle() @@ -35,6 +36,11 @@ namespace FlaxEditor.Surface return style; } + private void OnScriptsReloadBegin() + { + _nodesCache.Clear(); + } + private static void DrawBox(Box box) { var rect = new Rectangle(Float2.Zero, box.Size); @@ -186,6 +192,7 @@ namespace FlaxEditor.Surface { if (IsDisposing) return; + ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin; _nodesCache.Wait(); base.OnDestroy(); diff --git a/Source/Editor/Surface/VisjectSurface.cs b/Source/Editor/Surface/VisjectSurface.cs index 28ec17d53..66572324d 100644 --- a/Source/Editor/Surface/VisjectSurface.cs +++ b/Source/Editor/Surface/VisjectSurface.cs @@ -415,6 +415,15 @@ namespace FlaxEditor.Surface // Init drag handlers DragHandlers.Add(_dragAssets = new DragAssets(ValidateDragItem)); DragHandlers.Add(_dragParameters = new DragNames(SurfaceParameter.DragPrefix, ValidateDragParameter)); + + ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin; + } + + private void OnScriptsReloadBegin() + { + _activeVisjectCM = null; + _cmPrimaryMenu?.Dispose(); + _cmPrimaryMenu = null; } /// @@ -1023,6 +1032,8 @@ namespace FlaxEditor.Surface _activeVisjectCM = null; _cmPrimaryMenu?.Dispose(); + ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin; + base.OnDestroy(); } } diff --git a/Source/Editor/Surface/VisualScriptSurface.cs b/Source/Editor/Surface/VisualScriptSurface.cs index ff0153e8a..672a527a9 100644 --- a/Source/Editor/Surface/VisualScriptSurface.cs +++ b/Source/Editor/Surface/VisualScriptSurface.cs @@ -62,6 +62,12 @@ namespace FlaxEditor.Surface { _supportsImplicitCastFromObjectToBoolean = true; DragHandlers.Add(_dragActors = new DragActors(ValidateDragActor)); + ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin; + } + + private void OnScriptsReloadBegin() + { + _nodesCache.Clear(); } private bool ValidateDragActor(ActorNode actor) @@ -631,6 +637,7 @@ namespace FlaxEditor.Surface { if (IsDisposing) return; + ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin; _nodesCache.Wait(); base.OnDestroy();