Clear VisjectSurface node caches and context menus during scripts reload
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user