private void NodeContextMenu() { if (_currentEvent.type != EventType.MouseDown || _currentEvent.button != 1 || _currentEvent.clickCount != 1) { return; } Node node = MouseOverNode(); if (node == null) { return; } GenericMenu nodeMenu = new GenericMenu(); if (!(node is Root)) { nodeMenu.AddItem(new GUIContent("Add Decorator/Decorator"), false, delegate() { BehaviorTreesEditorUtility.AddDecorator <Decorator>(node, BehaviorTreesEditor.active); }); if (node is Composite) { nodeMenu.AddItem(new GUIContent("Add Service"), false, delegate() { BehaviorTreesEditorUtility.AddService <Service>((Composite)node, BehaviorTreesEditor.active); }); } else { nodeMenu.AddDisabledItem(new GUIContent("Add Service")); } nodeMenu.AddSeparator("/"); nodeMenu.AddItem(new GUIContent("Delete Node"), false, delegate() { if (_selection.Contains(node)) { foreach (Node mNode in _selection) { if (!(mNode is Root)) { BehaviorTreesEditorUtility.DeleteNode(mNode, BehaviorTreesEditor.active); } } _selection.Clear(); } else { BehaviorTreesEditorUtility.DeleteNode(node, BehaviorTreesEditor.active); } UpdateUnitySelection(); EditorUtility.SetDirty(BehaviorTreesEditor.active); }); nodeMenu.AddItem(new GUIContent("Unlink Node"), false, delegate() { if (_selection.Contains(node)) { foreach (Node mNode in _selection) { if (!(mNode is Root)) { BehaviorTreesEditorUtility.UnlinkNode(mNode, BehaviorTreesEditor.active); } } _selection.Clear(); } else { BehaviorTreesEditorUtility.UnlinkNode(node, BehaviorTreesEditor.active); } UpdateUnitySelection(); EditorUtility.SetDirty(BehaviorTreesEditor.active); }); } else { nodeMenu.AddDisabledItem(new GUIContent("Add Decorator")); nodeMenu.AddDisabledItem(new GUIContent("Delete Node")); } nodeMenu.ShowAsContext(); UnityEngine.Event.current.Use(); }