diff --git a/Source/Editor/Surface/Archetypes/BehaviorTree.cs b/Source/Editor/Surface/Archetypes/BehaviorTree.cs
index f8cd7bb5a..07005df28 100644
--- a/Source/Editor/Surface/Archetypes/BehaviorTree.cs
+++ b/Source/Editor/Surface/Archetypes/BehaviorTree.cs
@@ -755,6 +755,29 @@ namespace FlaxEditor.Surface.Archetypes
}
}
+ ///
+ public override void OnDeleted(SurfaceNodeActions action)
+ {
+ // Unlink from the current parent (when deleted by user)
+ var node = Node;
+ if (node != null)
+ {
+ if (action == SurfaceNodeActions.User)
+ {
+ var decorators = node.DecoratorIds;
+ decorators.Remove(ID);
+ node.DecoratorIds = decorators;
+ }
+ else
+ {
+ node._decorators = null;
+ node.ResizeAuto();
+ }
+ }
+
+ base.OnDeleted(action);
+ }
+
public override void OnSurfaceCanEditChanged(bool canEdit)
{
base.OnSurfaceCanEditChanged(canEdit);
diff --git a/Source/Editor/Surface/Undo/AddRemoveNodeAction.cs b/Source/Editor/Surface/Undo/AddRemoveNodeAction.cs
index ba6770287..0deb66fbe 100644
--- a/Source/Editor/Surface/Undo/AddRemoveNodeAction.cs
+++ b/Source/Editor/Surface/Undo/AddRemoveNodeAction.cs
@@ -19,6 +19,7 @@ namespace FlaxEditor.Surface.Undo
private ushort _typeId;
private Float2 _nodeLocation;
private object[] _nodeValues;
+ private SurfaceNodeActions _actionType = SurfaceNodeActions.User; // Action usage flow is first to apply user effect such as removing/adding node, then we use Undo type so node can react to this
public AddRemoveNodeAction(SurfaceNode node, bool isAdd)
{
@@ -38,6 +39,7 @@ namespace FlaxEditor.Surface.Undo
Add();
else
Remove();
+ _actionType = SurfaceNodeActions.Undo;
}
///
@@ -67,8 +69,8 @@ namespace FlaxEditor.Surface.Undo
else if (_nodeValues != null && _nodeValues.Length != 0)
throw new InvalidOperationException("Invalid node values.");
node.Location = _nodeLocation;
- context.OnControlLoaded(node, SurfaceNodeActions.Undo);
- node.OnSurfaceLoaded(SurfaceNodeActions.Undo);
+ context.OnControlLoaded(node, _actionType);
+ node.OnSurfaceLoaded(_actionType);
context.MarkAsModified();
}
@@ -89,7 +91,7 @@ namespace FlaxEditor.Surface.Undo
// Remove node
context.Nodes.Remove(node);
- context.OnControlDeleted(node, SurfaceNodeActions.Undo);
+ context.OnControlDeleted(node, _actionType);
context.MarkAsModified();
}
diff --git a/Source/Editor/Surface/VisjectSurface.cs b/Source/Editor/Surface/VisjectSurface.cs
index 3ac702549..530f3265f 100644
--- a/Source/Editor/Surface/VisjectSurface.cs
+++ b/Source/Editor/Surface/VisjectSurface.cs
@@ -837,7 +837,7 @@ namespace FlaxEditor.Surface
actions.Add(action);
}
- Undo.AddAction(new MultiUndoAction(actions, nodes.Count == 1 ? "Remove node" : "Remove nodes"));
+ AddBatchedUndoAction(new MultiUndoAction(actions, nodes.Count == 1 ? "Remove node" : "Remove nodes"));
}
}