Skip to content

Commit 3bbe37d

Browse files
committed
fix: relay node copy paste bug
1 parent fd7ae5d commit 3bbe37d

1 file changed

Lines changed: 34 additions & 2 deletions

File tree

Editor/Flow/UIElements/FlowGraphView.cs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,10 +317,12 @@ public FlowGraphData SerializeGraph(bool copyPaste = false)
317317
.ToDictionary(nodeElement => nodeElement, nodeElement => nodeElement.View.Guid);
318318

319319
/* Collect relay nodes */
320-
var relayNodes = _graphView.nodes
320+
var relayNodes = _graphElements
321321
.Where(n => n.userData is RelayNodeView)
322322
.Select(n => n.userData as RelayNodeView)
323323
.ToList();
324+
var relayIdMap = relayNodes
325+
.ToDictionary(relay => relay, relay => relay.Guid);
324326

325327
/* Need assign new guid before serialization */
326328
if (copyPaste)
@@ -336,7 +338,7 @@ public FlowGraphData SerializeGraph(bool copyPaste = false)
336338
}
337339

338340
/* Record relay node connections BEFORE CompileNode flattens them */
339-
var relayNodeData = relayNodes.Select(view => view.Compile()).ToArray();
341+
var relayNodeData = relayNodes.Select(view => CloneRelayNode(view.Compile())).ToArray();
340342

341343
var nodeInstances = serializableNodes.Select(element => (CeresNode)element.View.CompileNode()).ToArray();
342344
var nodeGroupData = new List<NodeGroup>();
@@ -352,6 +354,11 @@ public FlowGraphData SerializeGraph(bool copyPaste = false)
352354
{
353355
nodeElement.View.Guid = idMap[nodeElement];
354356
}
357+
foreach (var relay in relayNodes)
358+
{
359+
relay.Guid = relayIdMap[relay];
360+
relay.Compile();
361+
}
355362
}
356363

357364
/* Copy and paste may log warning for missing connect nodes which is expected. */
@@ -375,6 +382,31 @@ public FlowGraphData SerializeGraph(bool copyPaste = false)
375382

376383
}
377384

385+
private static RelayNode CloneRelayNode(RelayNode relayNode)
386+
{
387+
return new RelayNode
388+
{
389+
guid = relayNode.guid,
390+
graphPosition = relayNode.graphPosition,
391+
portType = relayNode.portType,
392+
inputs = CloneRelayConnections(relayNode.inputs),
393+
outputs = CloneRelayConnections(relayNode.outputs)
394+
};
395+
}
396+
397+
private static RelayConnection[] CloneRelayConnections(RelayConnection[] connections)
398+
{
399+
return connections?
400+
.Select(connection => new RelayConnection
401+
{
402+
connectionType = connection.connectionType,
403+
nodeId = connection.nodeId,
404+
portId = connection.portId,
405+
portIndex = connection.portIndex
406+
})
407+
.ToArray() ?? Array.Empty<RelayConnection>();
408+
}
409+
378410
private static CeresNodeData LinkAndGetNodeSerializedData(CeresLinker linker, CeresNode node)
379411
{
380412
var data = node.GetSerializedData();

0 commit comments

Comments
 (0)