From f790b77575201989ac2be6f46b95ca4ba2615f0f Mon Sep 17 00:00:00 2001 From: Emre Dogan <48212096+EmreDogann@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:43:26 +0100 Subject: [PATCH] Removed resize corner icon. --- Scripts/Editor/NodeGroupEditor.cs | 277 ++++++++++++++++--------- Scripts/Editor/NodeGroupEditor.cs.meta | 11 + Scripts/NodeGroup.cs.meta | 11 + 3 files changed, 199 insertions(+), 100 deletions(-) create mode 100644 Scripts/Editor/NodeGroupEditor.cs.meta create mode 100644 Scripts/NodeGroup.cs.meta diff --git a/Scripts/Editor/NodeGroupEditor.cs b/Scripts/Editor/NodeGroupEditor.cs index 40e093d..e5a81ae 100644 --- a/Scripts/Editor/NodeGroupEditor.cs +++ b/Scripts/Editor/NodeGroupEditor.cs @@ -1,109 +1,186 @@ -using System.Collections; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using UnityEditor; using UnityEngine; +using XNodeEditor.Internal; -namespace XNodeEditor.NodeGroups { - [CustomNodeEditor(typeof(NodeGroup))] - public class NodeGroupEditor : NodeEditor { - private NodeGroup group { get { return _group != null ? _group : _group = target as NodeGroup; } } - private NodeGroup _group; - public static Texture2D corner { get { return _corner != null ? _corner : _corner = Resources.Load("xnode_corner"); } } - private static Texture2D _corner; - private bool isDragging; - private Vector2 size; +namespace XNodeEditor.NodeGroups +{ + [CustomNodeEditor(typeof(NodeGroup))] + public class NodeGroupEditor : NodeEditor + { + private NodeGroup group => _group != null ? _group : _group = target as NodeGroup; + private NodeGroup _group; + private bool isDragging; + private Vector2 size; - public override void OnBodyGUI() { - Event e = Event.current; - switch (e.type) { - case EventType.MouseDrag: - if (isDragging) { - group.width = Mathf.Max(200, (int) e.mousePosition.x + 16); - group.height = Mathf.Max(100, (int) e.mousePosition.y - 34); - NodeEditorWindow.current.Repaint(); - } - break; - case EventType.MouseDown: - // Ignore everything except left clicks - if (e.button != 0) return; - if (NodeEditorWindow.current.nodeSizes.TryGetValue(target, out size)) { - // Mouse position checking is in node local space - Rect lowerRight = new Rect(size.x - 34, size.y - 34, 30, 30); - if (lowerRight.Contains(e.mousePosition)) { - isDragging = true; - } - } - break; - case EventType.MouseUp: - isDragging = false; - // Select nodes inside the group - if (Selection.Contains(target)) { - List selection = Selection.objects.ToList(); - // Select Nodes - selection.AddRange(group.GetNodes()); - // Select Reroutes - foreach (Node node in target.graph.nodes) { - if (node != null) - { - foreach (NodePort port in node.Ports) { - for (int i = 0; i < port.ConnectionCount; i++) { - List reroutes = port.GetReroutePoints(i); - for (int k = 0; k < reroutes.Count; k++) { - Vector2 p = reroutes[k]; - if (p.x < group.position.x) continue; - if (p.y < group.position.y) continue; - if (p.x > group.position.x + group.width) continue; - if (p.y > group.position.y + group.height + 30) continue; - if (NodeEditorWindow.current.selectedReroutes.Any(x => x.port == port && x.connectionIndex == i && x.pointIndex == k)) continue; - NodeEditorWindow.current.selectedReroutes.Add( - new Internal.RerouteReference(port, i, k) - ); - } - } - } - } - else - { - continue; - } - } - Selection.objects = selection.Distinct().ToArray(); - } - break; - case EventType.Repaint: - // Move to bottom - if (target.graph.nodes.IndexOf(target) != 0) { - target.graph.nodes.Remove(target); - target.graph.nodes.Insert(0, target); - } - // Add scale cursors - if (NodeEditorWindow.current.nodeSizes.TryGetValue(target, out size)) { - Rect lowerRight = new Rect(target.position, new Vector2(30, 30)); - lowerRight.y += size.y - 34; - lowerRight.x += size.x - 34; - lowerRight = NodeEditorWindow.current.GridToWindowRect(lowerRight); - NodeEditorWindow.current.onLateGUI += () => AddMouseRect(lowerRight); - } - break; - } + public override void OnBodyGUI() + { + Event e = Event.current; + switch (e.type) + { + case EventType.MouseDrag: + if (isDragging) + { + group.width = Mathf.Max(200, (int)e.mousePosition.x + 16); + group.height = Mathf.Max(100, (int)e.mousePosition.y - 34); + NodeEditorWindow.current.Repaint(); + } - // Control height of node - GUILayout.Space(group.height); + break; + case EventType.MouseDown: + // Ignore everything except left clicks + if (e.button != 0) + { + return; + } - GUI.DrawTexture(new Rect(group.width - 34, group.height + 16, 24, 24), corner); - } + if (NodeEditorWindow.current.nodeSizes.TryGetValue(target, out size)) + { + // Mouse position checking is in node local space + Rect lowerRight = new Rect(size.x - 34, size.y - 34, 30, 30); + if (lowerRight.Contains(e.mousePosition)) + { + isDragging = true; + } + } - public override int GetWidth() { - return group.width; - } + break; + case EventType.MouseUp: + isDragging = false; + // Select nodes inside the group + if (Selection.Contains(target)) + { + var selection = Selection.objects.ToList(); + // Select Nodes + selection.AddRange(group.GetNodes()); + // Select Reroutes + foreach (Node node in target.graph.nodes) + { + if (node != null) + { + foreach (NodePort port in node.Ports) + { + for (int i = 0; i < port.ConnectionCount; i++) + { + var reroutes = port.GetReroutePoints(i); + for (int k = 0; k < reroutes.Count; k++) + { + Vector2 p = reroutes[k]; + if (p.x < group.position.x) + { + continue; + } - public override Color GetTint() { - return group.color; - } + if (p.y < group.position.y) + { + continue; + } - public static void AddMouseRect(Rect rect) { - EditorGUIUtility.AddCursorRect(rect, MouseCursor.ResizeUpLeft); - } - } -} + if (p.x > group.position.x + group.width) + { + continue; + } + + if (p.y > group.position.y + group.height + 30) + { + continue; + } + + if (NodeEditorWindow.current.selectedReroutes.Any(x => + x.port == port && x.connectionIndex == i && x.pointIndex == k)) + { + continue; + } + + NodeEditorWindow.current.selectedReroutes.Add( + new RerouteReference(port, i, k) + ); + } + } + } + } + } + + Selection.objects = selection.Distinct().ToArray(); + } + + break; + case EventType.Repaint: + // Move to bottom + if (target.graph.nodes.IndexOf(target) != 0) + { + target.graph.nodes.Remove(target); + target.graph.nodes.Insert(0, target); + } + + // Add scale cursors + if (NodeEditorWindow.current.nodeSizes.TryGetValue(target, out size)) + { + Rect lowerRight = new Rect(target.position, new Vector2(30, 30)); + lowerRight.y += size.y - 34; + lowerRight.x += size.x - 34; + lowerRight = NodeEditorWindow.current.GridToWindowRect(lowerRight); + NodeEditorWindow.current.onLateGUI += () => AddMouseRect(lowerRight); + } + + break; + } + + // Control height of node + GUILayout.Space(group.height); + } + + public override int GetWidth() + { + return group.width; + } + + public override Color GetTint() + { + return group.color; + } + + public static void AddMouseRect(Rect rect) + { + EditorGUIUtility.AddCursorRect(rect, MouseCursor.ResizeUpLeft); + } + + public override void AddContextMenuItems(GenericMenu menu) + { + bool canRemove = true; + + menu.AddItem(new GUIContent("Rename Group"), false, RenameNodeGroup); + + // Add actions to any number of selected nodes + menu.AddItem(new GUIContent("Copy"), false, NodeEditorWindow.current.CopySelectedNodes); + menu.AddItem(new GUIContent("Duplicate"), false, NodeEditorWindow.current.DuplicateSelectedNodes); + + if (canRemove) + { + menu.AddItem(new GUIContent("Remove"), false, NodeEditorWindow.current.RemoveSelectedNodes); + } + else + { + menu.AddItem(new GUIContent("Remove"), false, null); + } + } + + public void RenameNodeGroup() + { + var nodeGroups = Selection.objects.ToList().Where(x => x is NodeGroup).ToList(); + if (nodeGroups.Count == 1) + { + NodeGroup group = nodeGroups[0] as NodeGroup; + Vector2 size; + if (NodeEditorWindow.current.nodeSizes.TryGetValue(group, out size)) + { + RenamePopup.Show(group, size.x); + } + else + { + RenamePopup.Show(group); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Editor/NodeGroupEditor.cs.meta b/Scripts/Editor/NodeGroupEditor.cs.meta new file mode 100644 index 0000000..8e889fa --- /dev/null +++ b/Scripts/Editor/NodeGroupEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8f0cf758226756468d74e8705be5d9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/NodeGroup.cs.meta b/Scripts/NodeGroup.cs.meta new file mode 100644 index 0000000..2530133 --- /dev/null +++ b/Scripts/NodeGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5787b2461d90cae4b924a89398060381 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: