// Menu static void PopupMenu() { if (Event.current != null && Event.current.type == EventType.mouseDown) { if (Event.current.button == 1) { ModifierEditorMenu.Popup(Event.current.mousePosition, Content2Node(Event.current.mousePosition)); } } }
static void NodeWindowFunc(int windowID) { Node node = null; if (windowID < modifier.nodes.Count) { node = modifier.nodes[windowID]; } else { node = modifier.output; } if (node == null) { GUI.DragWindow(); return; } // Delete this node if (draggingSlot == null && editingSlot == null && Event.current != null && Event.current.type == EventType.mouseDown) { if (Event.current.button == 1 && Event.current.mousePosition.y < 16) { ModifierEditorMenu.PopupDelete(Event.current.mousePosition, node); } } GUILayout.BeginHorizontal(GUILayout.MinHeight(10)); if (node.slots.Length > 0) { GUILayout.BeginVertical(); GUILayout.Space(1); for (int i = 0; i < node.slots.Length; ++i) { //GUILayout.Space(-1); Rect rct = EditorGUILayout.BeginHorizontal(); GUI.color = node.slots[i].input == null ? new Color(1, 1, 1, 0.2f) : Color.white; GUILayout.Label(node.slots[i].input == null ? cfwindow.texInputSlot : cfwindow.texInputSlotActive); GUI.color = Color.white; EditorGUILayout.EndHorizontal(); GUILayout.Space(-3); // Draw "drag slot area" GUIStyle gs = new GUIStyle(); gs.normal.background = cfwindow.texInputSlot; gs.hover.background = cfwindow.texInputSlot; gs.active.background = cfwindow.texInputSlot; rct.x += 2; rct.y += 1; rct.width = 16; rct.height = 16; Color c = NodeColor(node); c.a = 0.7f; GUI.color = c; if (Event.current != null && rct.Contains(Event.current.mousePosition)) { GUI.Label(rct, "", gs); // Begin drag slot if (Event.current.type == EventType.MouseDown) { if (Event.current.button == 0) { draggingSlot = node.slots[i]; draggingSlotIndex = i; draggingSlot.input = null; dragSlotExcludeNode = node; } } } GUI.color = Color.white; } GUILayout.Space(3); GUILayout.EndVertical(); Rect nameRect = EditorGUILayout.BeginVertical(GUILayout.MinWidth(30), GUILayout.MaxWidth(200)); GUILayout.Space(2); for (int i = 0; i < node.slots.Length; ++i) { if (node.slots[i] == editingSlot) { GUI.color = Color.clear; } GUILayout.Label(node.slots[i].name); GUI.color = Color.white; } EditorGUILayout.EndVertical(); GUILayout.BeginVertical(GUILayout.MinWidth(20), GUILayout.MaxWidth(200)); GUILayout.Space(2); for (int i = 0; i < node.slots.Length; ++i) { string value = ""; if (!node.slots[i].value.isNull) { value = node.slots[i].value.ToEditString(false); } Rect rct = EditorGUILayout.BeginHorizontal(); GUIStyle gs = new GUIStyle(EditorStyles.label); gs.alignment = TextAnchor.MiddleRight; gs.padding = new RectOffset(gs.padding.left, 5, gs.padding.top, gs.padding.bottom); Color c = NodeColor(node); c.a = 0.25f; if (node.slots[i].input != null) { GUI.color = c; GUILayout.Label(value, gs); GUI.color = Color.white; } else { GUIStyle gbs = new GUIStyle(EditorStyles.miniButton); gbs.hover.background = gbs.normal.background; Rect btn_rct = new Rect(rct.xMin - (nameRect.width + 8), rct.yMin, rct.width + (nameRect.width + 8), rct.height - 1); c.a = 0.5f; GUI.color = c; if (!node.slots[i].value.isNull) { gbs.normal.background = null; } if (node.slots[i] != editingSlot && GUI.Button(btn_rct, "", gbs)) { if (Event.current != null && Event.current.button == 0) { EndEditingSlot(); editingSlot = node.slots[i]; editingSlotValue = node.slots[i].value.ToEditString(true); GUI.FocusControl(""); } } GUI.color = Color.white; if (node.slots[i].value.isNull) { value = "?"; } if (node.slots[i] == editingSlot) { GUI.color = Color.clear; } GUILayout.Label(value, gs); GUI.color = Color.white; if (node.slots[i] == editingSlot) { GUIStyle gfs = new GUIStyle(EditorStyles.textField); gfs.alignment = TextAnchor.MiddleRight; gfs.padding = new RectOffset(gfs.padding.left, 5, gfs.padding.top, gfs.padding.bottom); gfs.fontSize = 10; c.a = 1; //GUI.color = c; GUI.SetNextControlName("EditSlot"); editingSlotValue = GUI.TextField(btn_rct, editingSlotValue, gfs); } } EditorGUILayout.EndHorizontal(); } GUILayout.EndVertical(); } else { GUILayout.BeginVertical(GUILayout.MaxWidth(5)); GUILayout.Space(2); GUILayout.EndVertical(); GUILayout.BeginVertical(GUILayout.MaxWidth(5)); GUILayout.Space(2); GUILayout.EndVertical(); GUILayout.BeginVertical(GUILayout.MinWidth(90)); GUILayout.Space(0); Color c = NodeColor(node); c.a = 0.25f; GUI.color = c; GUIStyle gs = new GUIStyle(); gs.normal.textColor = Color.white; gs.alignment = TextAnchor.LowerRight; GUILayout.Label(node.Calculate().ToEditString(false), gs); GUI.color = Color.white; GUILayout.Space(1); GUILayout.EndVertical(); } if (!(node is OutputNode)) { GUILayout.Space(-13); GUILayout.BeginVertical(); GUILayout.Space(-21); GUI.color = NodeColor(node); if (!nodeOutputs[windowID]) { GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 0.2f); } if (node == dragSlotExcludeNode) { GUI.color = Color.clear; } GUILayout.Label(nodeOutputs[windowID] ? cfwindow.texOutputSlotActive : cfwindow.texOutputSlot); GUI.color = Color.white; GUILayout.EndVertical(); GUILayout.Space(-7); } else { GUILayout.BeginVertical(); GUILayout.EndVertical(); } GUILayout.EndHorizontal(); if (dragSlotExcludeNode != node) { GUI.DragWindow(); } }