From 25053eaa2cee53d3ee02dde5901ff337dd2c34c8 Mon Sep 17 00:00:00 2001 From: Icarus <1375400884@qq.com> Date: Fri, 29 Nov 2019 18:19:55 +0800 Subject: [PATCH] !WO(Node Editor Window) Multi Open Support --- Scripts/Editor/NodeEditorWindow.cs | 49 ++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/Scripts/Editor/NodeEditorWindow.cs b/Scripts/Editor/NodeEditorWindow.cs index 53699b0..c5126e5 100644 --- a/Scripts/Editor/NodeEditorWindow.cs +++ b/Scripts/Editor/NodeEditorWindow.cs @@ -7,7 +7,29 @@ using Object = UnityEngine.Object; namespace XNodeEditor { [InitializeOnLoad] - public partial class NodeEditorWindow : EditorWindow { + public partial class NodeEditorWindow : EditorWindow,IHasCustomMenu { + + public bool Lock { get; private set; } + + [System.NonSerialized] + GUIStyle lockButtonStyle; + + /// + /// Magic method which Unity detects automatically. + /// + /// Position of button. + void ShowButton(Rect position) { + if (lockButtonStyle == null) + lockButtonStyle = "IN LockButton"; + Lock = GUI.Toggle(position, Lock, GUIContent.none, lockButtonStyle); + } + + public void AddItemsToMenu(GenericMenu menu) + { + menu.AddItem(new GUIContent("Lock"), Lock, () => { + Lock = !Lock; + }); + } [MenuItem("Icarus/Node Editor/Close All Editor Window")] static void CloseAllNodeEditorWindow() @@ -203,7 +225,30 @@ namespace XNodeEditor { public static void Open(XNode.NodeGraph graph) { if (!graph) return; - NodeEditorWindow w = GetWindow(typeof(NodeEditorWindow), false, "xNode", true) as NodeEditorWindow; + var windows = Resources.FindObjectsOfTypeAll(); + NodeEditorWindow w = null; + foreach (var window in windows) + { + if (window.Lock) + { + if (window.graph == graph) + { + w = window; + } + } + else + { + w = window; + } + } + + if (!w) + { + w = CreateWindow("xNode"); + } + + w.Show(true); + w.Focus(); w.wantsMouseMove = true; w.graph = graph; }