void AddNode(AbstractMaterialNode node) { var materialNode = (AbstractMaterialNode)node; Node nodeView; if (node is PropertyNode propertyNode) { var tokenNode = new PropertyNodeView(propertyNode, m_EdgeConnectorListener); m_GraphView.AddElement(tokenNode); nodeView = tokenNode; } else { var materialNodeView = new MaterialNodeView { userData = materialNode }; m_GraphView.AddElement(materialNodeView); materialNodeView.Initialize(materialNode, m_PreviewManager, m_EdgeConnectorListener); nodeView = materialNodeView; } node.RegisterCallback(OnNodeChanged); nodeView.MarkDirtyRepaint(); if (m_SearchWindowProvider.nodeNeedsRepositioning && m_SearchWindowProvider.targetSlotReference.nodeGuid.Equals(node.guid)) { m_SearchWindowProvider.nodeNeedsRepositioning = false; foreach (var element in nodeView.inputContainer.Children().Union(nodeView.outputContainer.Children())) { var port = (ShaderPort)element; if (port.slot.slotReference.Equals(m_SearchWindowProvider.targetSlotReference)) { port.RegisterCallback <GeometryChangedEvent>(RepositionNode); return; } } } m_AddNodeGraphElements.Clear(); m_GraphView.graphElements.ToList(m_AddNodeGraphElements); if (materialNode.groupGuid != Guid.Empty) { foreach (var element in m_AddNodeGraphElements) { if (element is ShaderGroup groupView && groupView.userData.guid == materialNode.groupGuid) { groupView.AddElement(nodeView); } } } }
public void CreateAllNodeViews() { foreach (var materialNode in GetAllNodes()) { string nType = materialNode.GetType().ToString().Split('.').Last(); if (!m_NotAllowedNodes.Contains(nType)) { m_Graph.AddNode(materialNode); if (materialNode is PropertyNode propertyNode) { var tokenNode = new PropertyNodeView(propertyNode, null); } else { var materialNodeView = new MaterialNodeView { userData = materialNode }; } } } }