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 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)); }
public NodeSocket AddOutputSocket(string fieldName) { NodeSocket socket = new NodeSocket(this, fieldName, SocketType.Output, OutputCount);; sockets.Add(fieldName, socket); return(socket); }
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; } }
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); } }
public T GetInputValue <T>(string fieldName) { NodeSocket socket = GetSocket(fieldName); if (socket != null && socket.IsConnected) { return(socket.GetInputValue <T>()); } return(default(T)); }
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); } }
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); } } }
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)); }
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); } } } }
public virtual object GetValue(NodeSocket socket) { return(null); }
public SocketConnection(NodeSocket socket) { this.socket = socket; node = socket.Node; fieldName = socket.FieldName; }
public override object GetValue(NodeSocket socket) { return(GetInputValue <Vector3>("vertex")); }