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; } }
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; } }
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); } } }
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)); }