Ejemplo n.º 1
0
        private void DrawInspector()
        {
            var inspectorPos = new Rect(position.width - InspectorWidth, 16, InspectorWidth, position.height - 32);

            var bg = NodePreferences.Instance.InsepctorTexture2D;

            GUI.DrawTexture(inspectorPos, bg);

            GUILayout.BeginArea(inspectorPos);
            if (LoadedGraph != null)
            {
                var style   = NodeStyles.Instance.InspectorTitleLabel;
                var content = new GUIContent(LoadedGraph.name);
                var size    = style.CalcSize(content);

                EditorGUILayout.LabelField(content, style, GUILayout.Height(size.y));

                if (SelectedNodes != null && SelectedNodes.Count > 0)
                {
                    EditorGUILayout.LabelField("Selected Nodes:");

                    for (var i = 0; i < SelectedNodes.Count; i++)
                    {
                        var nodeData = LoadedGraph.FindNodeData(SelectedNodes[i]);
                        if (nodeData != null)
                        {
                            EditorGUILayout.LabelField(nodeData.NodeName);
                        }
                    }
                }
            }

            GUILayout.EndArea();
        }
        private void DestroyNode(NodeData node)
        {
            LoadedGraph.RemoveNodeById(node.Id);

            Repaint();
            AssetDatabase.SaveAssets();
        }
        public void ClearAllNodes()
        {
            var nodeIds = LoadedGraph.Nodes.Select(x => x.Key);

            for (var i = nodeIds.Count() - 1; i >= 0; i--)
            {
                LoadedGraph.RemoveNodeById(nodeIds.ElementAt(i));
            }

            AssetDatabase.SaveAssets();
        }
Ejemplo n.º 4
0
        private void ShowNodeContextMenu(string hoverNode)
        {
            var menu = new GenericMenu();
            var node = LoadedGraph.FindNodeData(hoverNode);

            foreach (var nodeContextMethod in NodeCache.NodeContextMethods)
            {
                var methodInfo = nodeContextMethod.Value;
                if (methodInfo != null)
                {
                    menu.AddItem(new GUIContent(nodeContextMethod.Key.MethodName), false,
                                 () => { methodInfo.Invoke(this, new object[] { node }); });
                }
            }

            menu.ShowAsContext();
        }
Ejemplo n.º 5
0
        private void CreateNewNode(Type type, Vector2 graphPosition)
        {
            if (LoadedGraph == null)
            {
                return;
            }

            var newNode = CreateInstance(type) as Node;

            if (newNode == null)
            {
                Debug.LogError("Can't create node instance :" + type);
                return;
            }

            AssetDatabase.AddObjectToAsset(newNode, LoadedGraph);
            newNode.Graph = LoadedGraph;

            var newNodeData = new NodeData(newNode.NodeName, newNode);
            var editor      = GetNodeEditor(newNodeData);
            var nodePos     = graphPosition;

            var headerPos = new Rect(nodePos, new Vector2(editor.GetNodeWidth(), editor.GetNodeHeaderHeight()));
            var bodyPos   = new Rect(nodePos + Vector2.up * editor.GetNodeHeaderHeight(),
                                     new Vector2(editor.GetNodeWidth(), 1000));

            newNodeData.HeaderRect = headerPos;
            newNodeData.BodyRect   = bodyPos;

            LoadedGraph.Nodes.Add(newNodeData.Id, newNodeData);
            LoadedGraph.RefreshPortDatas();

            EditorUtility.SetDirty(LoadedGraph);
            AssetDatabase.SaveAssets();

            Repaint();
        }
Ejemplo n.º 6
0
        private void ControlActions()
        {
            var evt = Event.current;

            switch (evt.type)
            {
            case EventType.MouseDown:
                if (evt.button == 0)
                {
                    SelectActions();
                }
                else if (evt.button == 1)
                {
                    var node = MouseOverNode();
                    if (node != null)
                    {
                        ShowNodeContextMenu(node);
                    }
                    else
                    {
                        ShowGraphContextMenu();
                    }
                }

                break;

            case EventType.MouseUp:
                if (_hoverPort != null)
                {
                    var targetPort = MouseOverPort();
                    if (targetPort != null)
                    {
                        var sourcePortData = LoadedGraph.Ports[_hoverPort];
                        var targetPortData = LoadedGraph.Ports[targetPort];

                        if (sourcePortData.VerifyConnection(targetPortData))
                        {
                            if (_hoveringConnection != null)
                            {
                                var inPort = sourcePortData.Direction == PortDirection.In
                                        ? sourcePortData.PortId
                                        : targetPortData.PortId;
                                var outPort = sourcePortData.Direction == PortDirection.Out
                                        ? sourcePortData.PortId
                                        : targetPortData.PortId;

                                _hoveringConnection.Connection.InPortId  = inPort;
                                _hoveringConnection.Connection.OutPortId = outPort;
                                _hoveringConnection.Hovering             = false;
                            }
                            else
                            {
                                var connectionType = LoadedGraph.DefaultConnectionType;
                                if (sourcePortData.OverrideConnectionType != null)
                                {
                                    connectionType = sourcePortData.OverrideConnectionType;
                                }

                                CreateNewConnection(connectionType, sourcePortData, targetPortData);
                            }
                        }
                    }
                    else
                    {
                        if (_hoveringConnection != null)
                        {
                            LoadedGraph.RemoveConnectionById(_hoveringConnection.ConnectionId);
                            AssetDatabase.SaveAssets();
                        }
                    }
                }

                _hoveringConnection = null;
                _hoverNode          = null;
                _hoverPort          = null;
                Repaint();
                break;

            case EventType.MouseDrag:
                if (evt.alt)
                {
                    PanBackground(evt);
                }
                else
                {
                    if (_hoverNode != null)
                    {
                        if (SelectedNodes != null && SelectedNodes.Count > 0)
                        {
                            for (var i = 0; i < SelectedNodes.Count; i++)
                            {
                                var selection  = SelectedNodes[i];
                                var selectNode = LoadedGraph.FindNodeData(selection);

                                var headerPos = selectNode.HeaderRect;
                                var bodyPos   = selectNode.BodyRect;

                                headerPos.position += evt.delta * _zoom.x;
                                bodyPos.position   += evt.delta * _zoom.x;

                                selectNode.HeaderRect = headerPos;
                                selectNode.BodyRect   = bodyPos;
                            }
                        }

                        evt.Use();
                    }
                }

                Repaint();

                break;

            case EventType.ScrollWheel:
                Zoom(evt.delta.y);
                Repaint();
                break;
            }
        }
Ejemplo n.º 7
0
        private void DrawConnections()
        {
            // Draw Temporary Connection
            if (_hoverPort != null)
            {
                var portData = LoadedGraph.FindPortData(_hoverPort);
                if (portData == null)
                {
                    return;
                }

                if (portData.Connections.Count > 0 && portData.Direction == PortDirection.In)
                {
                    var connectionId   = portData.Connections[portData.Connections.Count - 1];
                    var connectionData = LoadedGraph.Connections[connectionId];
                    connectionData.Hovering = true;
                    _hoverPort = portData.Direction == PortDirection.In
                        ? connectionData.OutputPortId
                        : connectionData.InputPortId;
                    portData = LoadedGraph.Ports[_hoverPort];

                    _hoveringConnection = connectionData;
                }

                var startPos  = GraphToScreenSpace(portData.ConnectPoint);
                var endPos    = Event.current.mousePosition;
                var direction = portData.Direction == PortDirection.Out ? 1 : -1;

                var mnog = Vector3.Distance(startPos, endPos);

                var startTan = startPos + Vector2.right * (NodePreferences.Instance.StartTanOff * mnog * direction);
                var endTan   = endPos + Vector2.left * (NodePreferences.Instance.EndTanOff * mnog * direction);

                DrawCurve(startPos, endPos, startTan, endTan, Color.magenta, 3);
            }

            // Draw Saved Connections
            foreach (var connectionData in LoadedGraph.Connections.Values)
            {
                if (connectionData.Hovering)
                {
                    continue;
                }

                var sourPortData   = LoadedGraph.Ports[connectionData.InputPortId];
                var targetPortData = LoadedGraph.Ports[connectionData.OutputPortId];
                var direction      = sourPortData.Direction == PortDirection.Out ? 1 : -1;

                var startPos = GraphToScreenSpace(sourPortData.ConnectPoint);
                var endPos   = GraphToScreenSpace(targetPortData.ConnectPoint);
                var center   = (startPos + endPos) / 2f;
                var mnog     = Vector3.Distance(startPos, endPos);

                var startTan = startPos + Vector2.right * (NodePreferences.Instance.StartTanOff * mnog * direction);
                var endTan   = endPos + Vector2.left * (NodePreferences.Instance.EndTanOff * mnog * direction);

                DrawCurve(startPos, endPos, startTan, endTan,
                          connectionData.Connection.ConnectionColor, connectionData.Connection.LineWidth);

                DrawKnob(center, connectionData.Connection.KnobColor);
                DrawConnectionLabel(center, connectionData);
            }
        }