Пример #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 void Connect(NodeSocket socket)
        {
            if (FieldType != socket.FieldType)
            {
                return;
            }
            if (socketType == SocketType.Output && socket.SocketType == SocketType.Output)
            {
                return;
            }
            if (socket.Node == node)
            {
                return;
            }
            if (socketType == SocketType.Input)
            {
                RemoveAllConnections();
            }
            if (socket.socketType == SocketType.Input)
            {
                socket.RemoveAllConnections();
            }

            connections.Add(new SocketConnection(socket));
            socket.connections.Add(new SocketConnection(this));
        }
Пример #3
0
        public NodeSocket AddOutputSocket(string fieldName)
        {
            NodeSocket socket = new NodeSocket(this, fieldName, SocketType.Output, OutputCount);;

            sockets.Add(fieldName, socket);
            return(socket);
        }
Пример #4
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;
            }
        }
Пример #5
0
 private static void BuildConnectionCursorRects(NodeSocket socket)
 {
     foreach (SocketConnection connection in socket.Connections)
     {
         Vector2 pos = ((GetSocketRect(connection.Socket).center + GetSocketRect(socket).center) * 0.5f) - new Vector2(12, 12);
         EditorGUIUtility.AddCursorRect(new Rect(pos, new Vector2(24, 24)), MouseCursor.ArrowMinus);
     }
 }
Пример #6
0
        public T GetInputValue <T>(string fieldName)
        {
            NodeSocket socket = GetSocket(fieldName);

            if (socket != null && socket.IsConnected)
            {
                return(socket.GetInputValue <T>());
            }
            return(default(T));
        }
Пример #7
0
 private static void DrawSocketField(NodeSocket socket, Rect socketRect)
 {
     if (socket.FieldType == typeof(float))
     {
         socket.FloatFieldValue = EditorGUI.FloatField(new Rect(socketRect.position - new Vector2(24, 2), new Vector2(20, 14)), socket.FloatFieldValue);
     }
     else if (socket.FieldType == typeof(int))
     {
         socket.IntFieldValue = EditorGUI.IntField(new Rect(socketRect.position - new Vector2(24, 2), new Vector2(20, 14)), socket.IntFieldValue);
     }
 }
Пример #8
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);
         }
     }
 }
Пример #9
0
        public static Rect GetSocketRect(NodeSocket socket)
        {
            Vector2 size = new Vector2(10, 10);
            Vector2 pos  = Vector2.zero;

            switch (socket.SocketType)
            {
            case SocketType.Input: pos = new Vector2(socket.Node.Rect.xMin - size.x, socket.Node.Rect.yMin + (socket.Node.Rect.height * (((float)socket.Index + 1) / ((float)socket.Node.InputCount + 1)))); break;

            case SocketType.Output: pos = new Vector2(socket.Node.Rect.xMax, socket.Node.Rect.yMin + (socket.Node.Rect.height * (((float)socket.Index + 1) / ((float)socket.Node.OutputCount + 1)))); break;
            }

            return(new Rect(pos, size));
        }
Пример #10
0
        public void Disconnect(NodeSocket socket)
        {
            for (int i = connections.Count - 1; i >= 0; i--)
            {
                if (connections[i].Socket == socket)
                {
                    connections.RemoveAt(i);
                }
            }

            if (socket != null)
            {
                for (int i = socket.connections.Count - 1; i >= 0; i--)
                {
                    if (socket.connections[i].Socket == this)
                    {
                        socket.connections.RemoveAt(i);
                    }
                }
            }
        }
Пример #11
0
 public virtual object GetValue(NodeSocket socket)
 {
     return(null);
 }
 public SocketConnection(NodeSocket socket)
 {
     this.socket = socket;
     node        = socket.Node;
     fieldName   = socket.FieldName;
 }
Пример #13
0
 public override object GetValue(NodeSocket socket)
 {
     return(GetInputValue <Vector3>("vertex"));
 }