Add SealedNodes feature to Visject Surface nodes

This commit is contained in:
Wojtek Figat
2023-08-24 10:41:02 +02:00
parent c58dc51291
commit 60e5c5446c
3 changed files with 43 additions and 1 deletions

View File

@@ -390,6 +390,11 @@ namespace FlaxEditor.Surface
UpdateBoxesTypes(); UpdateBoxesTypes();
} }
/// <summary>
/// Array of nodes that are sealed to this node - sealed nodes are duplicated/copied/pasted/removed in a batch. Null if unused.
/// </summary>
public virtual SurfaceNode[] SealedNodes => null;
/// <summary> /// <summary>
/// Gets a value indicating whether this node uses dependent boxes. /// Gets a value indicating whether this node uses dependent boxes.
/// </summary> /// </summary>

View File

@@ -65,6 +65,25 @@ namespace FlaxEditor.Surface
return; return;
} }
// Collect sealed nodes to be copied as well
foreach (var control in selection.ToArray())
{
if (control is SurfaceNode node)
{
var sealedNodes = node.SealedNodes;
if (sealedNodes != null)
{
foreach (var sealedNode in sealedNodes)
{
if (sealedNode != null && !selection.Contains(sealedNode))
{
selection.Add(sealedNode);
}
}
}
}
}
var dataModel = new DataModel(); var dataModel = new DataModel();
var dataModelNodes = new List<DataModelNode>(selection.Count); var dataModelNodes = new List<DataModelNode>(selection.Count);
var dataModelComments = new List<DataModelComment>(); var dataModelComments = new List<DataModelComment>();

View File

@@ -749,7 +749,25 @@ namespace FlaxEditor.Surface
{ {
if (nodes == null) if (nodes == null)
nodes = new List<SurfaceNode>(); nodes = new List<SurfaceNode>();
nodes.Add(node); var sealedNodes = node.SealedNodes;
if (sealedNodes != null)
{
foreach (var sealedNode in sealedNodes)
{
if (sealedNode != null)
{
if (sealedNode.IsSelected)
{
selectionChanged = true;
sealedNode.IsSelected = false;
}
if (!nodes.Contains(sealedNode))
nodes.Add(sealedNode);
}
}
}
if (!nodes.Contains(node))
nodes.Add(node);
} }
} }
else else