/// <summary> Make sure the graph editor is assigned and to the right object </summary>
        private void ValidateGraphEditor()
        {
            NodeGraphEditor graphEditor = NodeGraphEditor.GetEditor(graph, this);

            if (this.graphEditor != graphEditor)
            {
                this.graphEditor = graphEditor;
                graphEditor.OnOpen();
            }
        }
        /// <summary> Make sure the graph editor is assigned and to the right object </summary>
        private void ValidateGraphEditor()
        {
            NodeGraphEditor graphEditor = NodeGraphEditor.GetEditor(graph, this);

            if (this.graphEditor != graphEditor && graphEditor != null)
            {
                var oldgraphEditor = this.graphEditor;
                this.graphEditor = graphEditor;

                oldgraphEditor?.OnClose();
                graphEditor.OnOpen();
            }
        }
Exemple #3
0
        /// <summary> Make a simple port field. </summary>
        public static void PortField(GUIContent label, XNode.NodePort port, params GUILayoutOption[] options)
        {
            if (port == null)
            {
                return;
            }
            if (label == null)
            {
                EditorGUILayout.LabelField(ObjectNames.NicifyVariableName(port.fieldName), options);
            }
            else
            {
                EditorGUILayout.LabelField(label, options);
            }
            Rect rect = GUILayoutUtility.GetLastRect();

            if (port.direction == XNode.NodePort.IO.Input)
            {
                rect.position = rect.position - new Vector2(16, 0);
            }
            else if (port.direction == XNode.NodePort.IO.Output)
            {
                rect.position = rect.position + new Vector2(rect.width, 0);
            }
            rect.size = new Vector2(16, 16);

            Color backgroundColor = new Color32(90, 97, 105, 255);

            if (NodeEditorWindow.nodeTint.ContainsKey(port.node.GetType()))
            {
                backgroundColor *= NodeEditorWindow.nodeTint[port.node.GetType()];
            }
            Color col = NodeGraphEditor.GetEditor(port.node.graph).GetTypeColor(port.ValueType);

            DrawPortHandle(rect, backgroundColor, col);

            // Register the handle position
            Vector2 portPos = rect.center;

            if (NodeEditor.portPositions.ContainsKey(port))
            {
                NodeEditor.portPositions[port] = portPos;
            }
            else
            {
                NodeEditor.portPositions.Add(port, portPos);
            }
        }
        private void OnGUI()
        {
            Event     e = Event.current;
            Matrix4x4 m = GUI.matrix;

            if (graph == null)
            {
                return;
            }
            graphEditor = NodeGraphEditor.GetEditor(graph);
            if (graphEditor == null)
            {
                return;
            }
            graphEditor.position = position;

            Controls();

            DrawGrid(position, zoom, panOffset);
            DrawConnections();
            DrawDraggedConnection();
            DrawNodes();
            DrawSelectionBox();
            DrawTooltip();
            graphEditor.OnGUI();

            if (currentActivity == NodeActivity.AddingNode)
            {
                BeginWindows();
                contextWindowRect = new Rect(contextMenuMousePos, Vector2.one * 400);
                // All GUI.Window or GUILayout.Window must come inside here
                contextWindowRect = GUILayout.Window(1, contextWindowRect, DrawWindow, "Add node");
                EndWindows();
            }

            // Run and reset onLateGUI
            if (onLateGUI != null)
            {
                onLateGUI();
                onLateGUI = null;
            }

            GUI.matrix = m;
        }
Exemple #5
0
 /// <summary> Make sure the graph editor is assigned and to the right object </summary>
 private void ValidateGraphEditor()
 {
     if (graph is DialogGraph)
     {
         DialogGraphEditor graphEditor = (DialogGraphEditor)DialogGraphEditor.GetEditor(graph, this);
         if (this.graphEditor != graphEditor && graphEditor != null)
         {
             this.graphEditor = graphEditor;
             graphEditor.OnOpen();
         }
     }
     else
     {
         NodeGraphEditor graphEditor = NodeGraphEditor.GetEditor(graph, this);
         if (this.graphEditor != graphEditor && graphEditor != null)
         {
             this.graphEditor = graphEditor;
             graphEditor.OnOpen();
         }
     }
 }
Exemple #6
0
        private void OnGUI()
        {
            Event     e = Event.current;
            Matrix4x4 m = GUI.matrix;

            if (graph == null)
            {
                return;
            }
            currentGraphEditor = NodeGraphEditor.GetEditor(graph);

            Controls();

            DrawGrid(position, zoom, panOffset);
            DrawConnections();
            DrawDraggedConnection();
            DrawNodes();
            DrawTooltip();

            GUI.matrix = m;
        }
Exemple #7
0
        /// <summary> Make a field for a serialized property. Manual node port override. </summary>
        public static void PropertyField(SerializedProperty property, GUIContent label, XNode.NodePort port, bool includeChildren = true, params GUILayoutOption[] options)
        {
            if (property == null)
            {
                throw new NullReferenceException();
            }

            // If property is not a port, display a regular property field
            if (port == null)
            {
                EditorGUILayout.PropertyField(property, label, includeChildren, GUILayout.MinWidth(30));
            }
            else
            {
                Rect rect = new Rect();

                // If property is an input, display a regular property field and put a port handle on the left side
                if (port.direction == XNode.NodePort.IO.Input)
                {
                    // Get data from [Input] attribute
                    XNode.Node.ShowBackingValue showBacking = XNode.Node.ShowBackingValue.Unconnected;
                    XNode.Node.InputAttribute   inputAttribute;
                    if (NodeEditorUtilities.GetAttrib(port.node.GetType(), property.name, out inputAttribute))
                    {
                        showBacking = inputAttribute.backingValue;
                    }

                    switch (showBacking)
                    {
                    case XNode.Node.ShowBackingValue.Unconnected:
                        // Display a label if port is connected
                        if (port.IsConnected)
                        {
                            EditorGUILayout.LabelField(label != null ? label : new GUIContent(property.displayName));
                        }
                        // Display an editable property field if port is not connected
                        else
                        {
                            EditorGUILayout.PropertyField(property, label, includeChildren, GUILayout.MinWidth(30));
                        }
                        break;

                    case XNode.Node.ShowBackingValue.Never:
                        // Display a label
                        EditorGUILayout.LabelField(label != null ? label : new GUIContent(property.displayName));
                        break;

                    case XNode.Node.ShowBackingValue.Always:
                        // Display an editable property field
                        EditorGUILayout.PropertyField(property, label, includeChildren, GUILayout.MinWidth(30));
                        break;
                    }

                    rect          = GUILayoutUtility.GetLastRect();
                    rect.position = rect.position - new Vector2(16, 0);
                    // If property is an output, display a text label and put a port handle on the right side
                }
                else if (port.direction == XNode.NodePort.IO.Output)
                {
                    // Get data from [Output] attribute
                    XNode.Node.ShowBackingValue showBacking = XNode.Node.ShowBackingValue.Unconnected;
                    XNode.Node.OutputAttribute  outputAttribute;
                    if (NodeEditorUtilities.GetAttrib(port.node.GetType(), property.name, out outputAttribute))
                    {
                        showBacking = outputAttribute.backingValue;
                    }

                    switch (showBacking)
                    {
                    case XNode.Node.ShowBackingValue.Unconnected:
                        // Display a label if port is connected
                        if (port.IsConnected)
                        {
                            EditorGUILayout.LabelField(label != null ? label : new GUIContent(property.displayName), NodeEditorResources.styles.outputPort, GUILayout.MinWidth(30));
                        }
                        // Display an editable property field if port is not connected
                        else
                        {
                            EditorGUILayout.PropertyField(property, label, includeChildren, GUILayout.MinWidth(30));
                        }
                        break;

                    case XNode.Node.ShowBackingValue.Never:
                        // Display a label
                        EditorGUILayout.LabelField(label != null ? label : new GUIContent(property.displayName), NodeEditorResources.styles.outputPort, GUILayout.MinWidth(30));
                        break;

                    case XNode.Node.ShowBackingValue.Always:
                        // Display an editable property field
                        EditorGUILayout.PropertyField(property, label, includeChildren, GUILayout.MinWidth(30));
                        break;
                    }

                    rect          = GUILayoutUtility.GetLastRect();
                    rect.position = rect.position + new Vector2(rect.width, 0);
                }

                rect.size = new Vector2(16, 16);

                Color backgroundColor = new Color32(90, 97, 105, 255);
                if (NodeEditorWindow.nodeTint.ContainsKey(port.node.GetType()))
                {
                    backgroundColor *= NodeEditorWindow.nodeTint[port.node.GetType()];
                }
                Color col = NodeGraphEditor.GetEditor(port.node.graph).GetTypeColor(port.ValueType);
                DrawPortHandle(rect, backgroundColor, col);

                // Register the handle position
                Vector2 portPos = rect.center;
                if (NodeEditor.portPositions.ContainsKey(port))
                {
                    NodeEditor.portPositions[port] = portPos;
                }
                else
                {
                    NodeEditor.portPositions.Add(port, portPos);
                }
            }
        }