public void HandleGraphChanges() { previewManager.HandleGraphChanges(); previewManager.RenderPreviews(); m_BlackboardProvider.HandleGraphChanges(); foreach (var node in m_Graph.removedNodes) { node.UnregisterCallback(OnNodeChanged); var nodeView = m_GraphView.nodes.ToList().OfType <MaterialNodeView>().FirstOrDefault(p => p.node != null && p.node.guid == node.guid); if (nodeView != null) { nodeView.Dispose(); nodeView.userData = null; m_GraphView.RemoveElement(nodeView); } } foreach (var node in m_Graph.addedNodes) { AddNode(node); } foreach (var node in m_Graph.pastedNodes) { var nodeView = m_GraphView.nodes.ToList().OfType <MaterialNodeView>().FirstOrDefault(p => p.node != null && p.node.guid == node.guid); m_GraphView.AddToSelection(nodeView); } var nodesToUpdate = m_NodeViewHashSet; nodesToUpdate.Clear(); foreach (var edge in m_Graph.removedEdges) { var edgeView = m_GraphView.graphElements.ToList().OfType <Edge>().FirstOrDefault(p => p.userData is IEdge && Equals((IEdge)p.userData, edge)); if (edgeView != null) { var nodeView = edgeView.input.node as MaterialNodeView; if (nodeView != null && nodeView.node != null) { nodesToUpdate.Add(nodeView); } edgeView.output.Disconnect(edgeView); edgeView.input.Disconnect(edgeView); edgeView.output = null; edgeView.input = null; m_GraphView.RemoveElement(edgeView); } } foreach (var edge in m_Graph.addedEdges) { var edgeView = AddEdge(edge); if (edgeView != null) { nodesToUpdate.Add((MaterialNodeView)edgeView.input.node); } } foreach (var node in nodesToUpdate) { node.UpdatePortInputVisibilities(); } UpdateEdgeColors(nodesToUpdate); }
public void HandleGraphChanges() { previewManager.HandleGraphChanges(); previewManager.RenderPreviews(); m_BlackboardProvider.HandleGraphChanges(); foreach (GroupData groupData in m_Graph.removedGroups) { var group = m_GraphView.graphElements.ToList().OfType <ShaderGroup>().ToList().First(g => g.userData == groupData); m_GraphView.RemoveElement(group); } foreach (var node in m_Graph.removedNodes) { node.UnregisterCallback(OnNodeChanged); var nodeView = m_GraphView.nodes.ToList().OfType <IShaderNodeView>() .FirstOrDefault(p => p.node != null && p.node.guid == node.guid); if (nodeView != null) { nodeView.Dispose(); m_GraphView.RemoveElement((Node)nodeView); } } foreach (var groupData in m_Graph.addedGroups) { AddGroup(groupData); } foreach (var node in m_Graph.addedNodes) { AddNode(node); } foreach (var groupChange in m_Graph.nodeGroupChanges) { var nodeView = m_GraphView.GetNodeByGuid(groupChange.nodeGuid.ToString()); if (nodeView != null) { var groupView = nodeView.GetContainingScope() as ShaderGroup; if (groupView?.userData.guid != groupChange.newGroupGuid) { groupView?.RemoveElement(nodeView); if (groupChange.newGroupGuid != Guid.Empty) { var newGroupView = m_GraphView.graphElements.ToList() .OfType <ShaderGroup>() .First(x => x.userData.guid == groupChange.newGroupGuid); newGroupView.AddElement(nodeView); } } } } foreach (var groupData in m_Graph.pastedGroups) { var group = m_GraphView.graphElements.ToList().OfType <ShaderGroup>().ToList().First(g => g.userData == groupData); m_GraphView.AddToSelection(group); } foreach (var node in m_Graph.pastedNodes) { var nodeView = m_GraphView.nodes.ToList().OfType <IShaderNodeView>() .FirstOrDefault(p => p.node != null && p.node.guid == node.guid); m_GraphView.AddToSelection((Node)nodeView); } var nodesToUpdate = m_NodeViewHashSet; nodesToUpdate.Clear(); foreach (var edge in m_Graph.removedEdges) { var edgeView = m_GraphView.graphElements.ToList().OfType <Edge>() .FirstOrDefault(p => p.userData is IEdge && Equals((IEdge)p.userData, edge)); if (edgeView != null) { var nodeView = (IShaderNodeView)edgeView.input.node; if (nodeView.node != null) { nodesToUpdate.Add(nodeView); } edgeView.output.Disconnect(edgeView); edgeView.input.Disconnect(edgeView); edgeView.output = null; edgeView.input = null; m_GraphView.RemoveElement(edgeView); } } foreach (var edge in m_Graph.addedEdges) { var edgeView = AddEdge(edge); if (edgeView != null) { nodesToUpdate.Add((IShaderNodeView)edgeView.input.node); } } foreach (var node in nodesToUpdate) { if (node is MaterialNodeView materialNodeView) { materialNodeView.UpdatePortInputVisibilities(); } } UpdateEdgeColors(nodesToUpdate); UpdateBadges(); }