private void OnGUI() { var nodes = Selection.GetFiltered <XNode.Node>(SelectionMode.Unfiltered); if (nodes.Length == 1) { var nodeEditor = NodeEditor.GetEditor(nodes[0], _nodeEditorWindow); EditorGUI.BeginChangeCheck(); //draw editor via IInspectableNodeEditor: if (nodeEditor is IInspectableNodeEditor inspectable) { inspectable.InspectableNodeGUI(); } //draw default NodeEditor: else { nodeEditor.OnHeaderGUI(); nodeEditor.OnBodyGUI(); } //If user changed a value, notify other scripts through onUpdateNode if (EditorGUI.EndChangeCheck()) { if (NodeEditor.onUpdateNode != null) { NodeEditor.onUpdateNode(nodes[0]); } EditorUtility.SetDirty(nodes[0]); nodeEditor.serializedObject.ApplyModifiedProperties(); } } else if (nodes.Length > 0) { EditorGUILayout.LabelField("Editing multiple Nodes not supported."); } else { EditorGUILayout.LabelField("No Node selected."); } //make sure to update GraphEditorWindow even if this window is used _nodeEditorWindow.Repaint(); }