コード例 #1
0
        private static void DrawSocket(NodeSocket socket)
        {
            Rect socketRect = TerraUtility.GetSocketRect(socket);

            if (socket.SocketType == SocketType.Output)
            {
                foreach (SocketConnection connection in socket.Connections)
                {
                    DrawConnection(socketRect.center, TerraUtility.GetSocketRect(connection.Socket).center, TerraUtility.TypeToColor(socket.FieldType));
                }
            }

            Handles.DrawSolidRectangleWithOutline(socketRect, Color.white, new Color(0, 0, 0, 0.6f));
            Handles.DrawSolidRectangleWithOutline(new Rect(socket.SocketType == SocketType.Input ? socketRect.position : (socketRect.position + new Vector2(socketRect.size.x, 0) - new Vector2(socketRect.size.x * 0.3f, 0)), new Vector2(socketRect.size.x * 0.4f, socketRect.size.y)), TerraUtility.TypeToColor(socket.FieldType), new Color(0, 0, 0, 0.6f));

            if (socket.UseField)
            {
                DrawSocketField(socket, socketRect);
            }
            else
            {
                GUI.enabled = false;
                GUIStyle textStyle = new GUIStyle(EditorStyles.centeredGreyMiniLabel);
                textStyle.alignment = socket.SocketType == SocketType.Input ? TextAnchor.MiddleLeft : TextAnchor.MiddleRight;
                GUI.TextField(new Rect(socketRect.position + (socket.SocketType == SocketType.Input ? new Vector2(15, -4) : new Vector2(-105, -4)), new Vector2(100, 16)), socket.FieldName, textStyle);
                GUI.enabled = true;
            }
        }
コード例 #2
0
        public static void ProcessSocketEvent(Event e, NodeSocket socket)
        {
            foreach (SocketConnection connection in socket.Connections)
            {
                ProcessConnectionEvent(e, socket, connection);
            }

            switch (e.type)
            {
            case EventType.MouseDown:

                if (e.button == 0 && TerraUtility.GetSocketRect(socket).Contains(e.mousePosition))
                {
                    TerraGraphEditor.NodeSelection.Clear();
                    TerraGraphEditor.CommentSelection.Clear();
                    TerraGraphEditor.HeldSocket = socket;
                    GUI.FocusControl(null);
                    e.Use();
                }

                break;

            case EventType.MouseUp:

                if (e.button == 0 && TerraUtility.GetSocketRect(socket).Contains(e.mousePosition) && TerraGraphEditor.HeldSocket != null)
                {
                    socket.Connect(TerraGraphEditor.HeldSocket);
                    TerraGraphEditor.HeldSocket.Connect(socket);
                    TerraGraphEditor.HeldSocket = null;
                    e.Use();
                }

                break;
            }
        }
コード例 #3
0
 public static void ProcessConnectionEvent(Event e, NodeSocket socket, SocketConnection connection)
 {
     if (socket.SocketType == SocketType.Output)
     {
         Vector2 center = (TerraUtility.GetSocketRect(socket).center + TerraUtility.GetSocketRect(connection.Socket).center) * 0.5f;
         if (Handles.Button(center, Quaternion.identity, 4, 8, Handles.RectangleHandleCap))
         {
             connection.Socket.Disconnect(socket);
         }
     }
 }
コード例 #4
0
        private void DrawActiveConnection()
        {
            if (HeldSocket == null)
            {
                return;
            }

            Vector2 output = HeldSocket.SocketType == SocketType.Output ? TerraUtility.GetSocketRect(HeldSocket).center : Event.current.mousePosition;
            Vector2 input  = HeldSocket.SocketType == SocketType.Input ? TerraUtility.GetSocketRect(HeldSocket).center : Event.current.mousePosition;

            TerraGUI.DrawConnection(output, input, TerraUtility.TypeToColor(HeldSocket.FieldType));
        }