Add SealedNodes feature to Visject Surface nodes
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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>();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user