public void OnGUI() { NodeWindow = GUILayout.Window(WindowID, NodeWindow, DrawNode, ""); //Draw the connections foreach (NodeConnection connection in nodeConnections.Where(x => x != null)) { if (connection.Destination != null) { NodeConnection.DrawConnected(connection.Source, connection.Destination.NodeWindow, NodeWindow); } else { NodeConnection.DrawConnected(connection.Source, new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y, 1, 1), NodeWindow); } } }
/// <summary> /// Setup for the Node itself /// </summary> /// <param name="id"></param> public void DrawNode(int id) { if (Event.current.type == EventType.MouseDown) { if (_ACTIVENODE != null && _ACTIVENODE != this) { //connection logic _ACTIVENODE.nodeConnections[_ANSWERNUMBER].Destination = this; _ACTIVENODE.ConPart.Next[_ANSWERNUMBER] = ConPart.PartID; _ACTIVENODE = null; } else { ClearConnection(); } } EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); //ModelArea EditorGUILayout.LabelField("Expression: "); GUILayout.FlexibleSpace(); selected = EditorGUILayout.Popup(selected, options, GUILayout.MinWidth(60f)); ConPart.Expression = (Expressions)selected; EditorGUILayout.EndHorizontal(); EditorGUILayout.LabelField("Main Text: "); ConPart.Text = EditorGUILayout.TextArea(ConPart.Text, GUILayout.MinHeight(60f)); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add Answer", EditorStyles.miniButtonLeft)) { ConPart.Choices.Add(""); ConPart.Next.Add(-1); nodeConnections.Add(null); } if (GUILayout.Button("Remove Answer", EditorStyles.miniButtonRight)) { if (ConPart.Choices.Count > 0) { ConPart.Choices.RemoveAt(ConPart.Choices.Count - 1); ConPart.Next.RemoveAt(ConPart.Next.Count - 1); nodeConnections.RemoveAt(nodeConnections.Count - 1); } } EditorGUILayout.EndHorizontal(); for (int i = 0; i < ConPart.Choices.Count; i++) { EditorGUILayout.BeginHorizontal(); ConPart.Choices[i] = EditorGUILayout.TextField(ConPart.Choices[i]); Rect tempRect = new Rect(GUILayoutUtility.GetLastRect().position.x + GUILayoutUtility.GetLastRect().width + 21, GUILayoutUtility.GetLastRect().position.y + 8, 16, 16); //connection from if (GUILayout.Button("", EditorStyles.radioButton, GUILayout.Width(16), GUILayout.Height(16))) { _ACTIVENODE = this; _ANSWERNUMBER = i; if (nodeConnections[i] != null) { nodeConnections[i].Source = tempRect; nodeConnections[i].Destination = null; } else { nodeConnections[i] = new NodeConnection(tempRect, null); } } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); GUI.DragWindow(); }