Exemple #1
0
        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);
                    }
                }
            }
        }
Exemple #2
0
        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
                        };
                    }
                }
            }
        }