Add SealedNodes feature to Visject Surface nodes
This commit is contained in:
@@ -390,6 +390,11 @@ namespace FlaxEditor.Surface
|
||||
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>
|
||||
/// Gets a value indicating whether this node uses dependent boxes.
|
||||
/// </summary>
|
||||
|
||||
@@ -65,6 +65,25 @@ namespace FlaxEditor.Surface
|
||||
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 dataModelNodes = new List<DataModelNode>(selection.Count);
|
||||
var dataModelComments = new List<DataModelComment>();
|
||||
|
||||
@@ -749,7 +749,25 @@ namespace FlaxEditor.Surface
|
||||
{
|
||||
if (nodes == null)
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user