コード例 #1
0
        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();
        }