private void OnGUI()
        {
            if (tex == null)
            {
                tex = AssetDatabase.LoadAssetAtPath <Texture>("Assets/AndreLibrary/Editor/BT_Lighter_Grey_Blue.jpg");
            }

            GUI.DrawTexture(new Rect(0, 0, maxSize.x, maxSize.y), tex, ScaleMode.StretchToFill);
            GUILayout.BeginVertical("HelpBox");
            GUILayout.Space(10);
            tab = GUILayout.Toolbar(tab, new string[] { "Picker", "Names", "Position" });
            var style = new GUIStyle(GUI.skin.label)
            {
                alignment = TextAnchor.MiddleCenter
            };

            switch (tab)
            {
            case 0:
                GUILayout.Space(10);
                GUILayout.Label("Node A", style, GUILayout.ExpandWidth(true));
                nodeASelected = EditorGUILayout.Popup(nodeASelected, nodeAOptions);
                GUILayout.Space(5);
                GUILayout.Label("Node B", style, GUILayout.ExpandWidth(true));
                nodeBSelected = EditorGUILayout.Popup(nodeBSelected, nodeBOptions);
                GUILayout.Space(2.5f);
                if (nodeASelected != nodeBSelected)
                {
                    GUILayout.Space(2.5f);
                    if (GUILayout.Button("Swap Nodes"))
                    {
                        AssetToUpdate.MoveNodePositions(AssetToUpdate.Children[nodeASelected].name, AssetToUpdate.Children[nodeBSelected].name);
                        this.Close();
                    }
                    GUILayout.Space(2.5f);
                }
                else
                {
                    GUILayout.Space(27.5f);
                }
                break;

            case 1:
                GUILayout.Space(10);
                GUILayout.Label("Node A Name", style, GUILayout.ExpandWidth(true));
                nodeAName = GUILayout.TextField(nodeAName);
                GUILayout.Space(5);
                GUILayout.Label("Node B Name", style, GUILayout.ExpandWidth(true));
                nodeBName = GUILayout.TextField(nodeBName);
                GUILayout.Space(2.5f);
                if ((!string.IsNullOrEmpty(nodeAName) && !string.IsNullOrWhiteSpace(nodeAName)) &&
                    (!string.IsNullOrEmpty(nodeBName) && !string.IsNullOrWhiteSpace(nodeBName)) &&
                    nodeAName != nodeBName)
                {
                    if (AssetToUpdate.ContainsName(nodeAName) && AssetToUpdate.ContainsName(nodeBName))
                    {
                        GUILayout.Space(2.5f);
                        if (GUILayout.Button("Swap Nodes"))
                        {
                            AssetToUpdate.MoveNodePositions(nodeAName, nodeBName);
                            this.Close();
                        }
                        GUILayout.Space(2.5f);
                    }
                    else
                    {
                        GUILayout.Space(27.5f);
                    }
                }
                else
                {
                    GUILayout.Space(27.5f);
                }
                break;

            case 2:
                GUILayout.Space(10);
                GUILayout.Label("Node A Position", style, GUILayout.ExpandWidth(true));
                nodeAPos = EditorGUILayout.IntField(nodeAPos);
                GUILayout.Space(5);
                GUILayout.Label("Node B Position", style, GUILayout.ExpandWidth(true));
                nodeBPos = EditorGUILayout.IntField(nodeBPos);
                GUILayout.Space(2.5f);
                if ((nodeAPos > 0 && AssetToUpdate.Children.Count >= nodeAPos) &&
                    (nodeBPos > 0 && AssetToUpdate.Children.Count >= nodeBPos) &&
                    nodeAPos != nodeBPos)
                {
                    GUILayout.Space(2.5f);
                    if (GUILayout.Button("Swap Nodes"))
                    {
                        AssetToUpdate.MoveNodePositions(AssetToUpdate.Children[nodeAPos - 1].name, AssetToUpdate.Children[nodeBPos - 1].name);
                        this.Close();
                    }
                    GUILayout.Space(2.5f);
                }
                else
                {
                    GUILayout.Space(27.5f);
                }
                break;

            default:
                break;
            }
            GUILayout.EndVertical();
        }
        private void OnClickAddNode(NODEOPTIONS options, SO_Node _AssetToUpdate)
        {
            SO_Node node = null;

            switch (options)
            {
            case NODEOPTIONS.Selector:
                node          = _AssetToUpdate.Create <SO_Selector>(name);
                node.Type     = "Selector";
                node.nodeType = (int)NODETYPE.Composite;
                break;

            case NODEOPTIONS.Sequence:
                node          = _AssetToUpdate.Create <SO_Sequence>(name);
                node.Type     = "Sequence";
                node.nodeType = (int)NODETYPE.Composite;
                break;

            case NODEOPTIONS.BooleanSelector:
                node          = _AssetToUpdate.Create <SO_BooleanSelector>(name);
                node.Type     = "BSelector";
                node.nodeType = (int)NODETYPE.Composite;
                break;

            case NODEOPTIONS.FailRepeater:
                node = _AssetToUpdate.Create <SO_FailRepeater>(name);
                node.SwapableNodes = false;
                node.Type          = "FRepeater";
                node.nodeType      = (int)NODETYPE.Decorator;
                break;

            case NODEOPTIONS.FakeSate:
                node = _AssetToUpdate.Create <SO_FakeSate>(name);
                node.SwapableNodes = false;
                node.Type          = "FakeSate";
                node.nodeType      = (int)NODETYPE.Decorator;
                break;

            case NODEOPTIONS.InfiniteRepeater:
                node = _AssetToUpdate.Create <SO_InfiniteRepeater>(name);
                node.SwapableNodes = false;
                node.Type          = "IRepeater";
                node.nodeType      = (int)NODETYPE.Decorator;
                break;

            case NODEOPTIONS.Inverter:
                node = _AssetToUpdate.Create <SO_Inverter>(name);
                node.SwapableNodes = false;
                node.Type          = "Inverter";
                node.nodeType      = (int)NODETYPE.Decorator;
                break;

            case NODEOPTIONS.Limiter:
                node = _AssetToUpdate.Create <SO_Limiter>(name);
                node.SwapableNodes = false;
                node.Type          = "Limiter";
                node.nodeType      = (int)NODETYPE.Decorator;
                break;

            case NODEOPTIONS.Repeater:
                node = _AssetToUpdate.Create <SO_Repeater>(name);
                node.SwapableNodes = false;
                node.Type          = "Repeater";
                node.nodeType      = (int)NODETYPE.Decorator;
                break;

            case NODEOPTIONS.Leaf:
                node = _AssetToUpdate.Create <SO_LeafNode>(name);
                node.SwapableNodes = false;
                node.Type          = "Leaf";
                node.nodeType      = (int)NODETYPE.Leaf;
                break;

            case NODEOPTIONS.Debug:
                node = _AssetToUpdate.Create <SO_TestNode>(name);
                node.SwapableNodes = false;
                node.Type          = "Debug";
                node.nodeType      = (int)NODETYPE.Debug;
                break;
            }
            string tempBaseName = "New Node";
            string tempName     = tempBaseName;
            int    number       = 0;

            while (_AssetToUpdate.ContainsName(tempName))
            {
                tempName = tempBaseName + $" {number}";
                number++;
            }
            node.name = tempName;
            _AssetToUpdate.AddNode(node);
            InContexMenu = false;
        }
Ejemplo n.º 3
0
        public override void OnInspectorGUI()
        {
            myTarget  = (SO_Node)target;
            assetName = EditorGUILayout.TextField("New asset name: ", assetName);
            if (!string.IsNullOrEmpty(assetName) && !string.IsNullOrWhiteSpace(assetName) &&
                assetName != myTarget.name)
            {
                if (GUILayout.Button("Change Name"))
                {
                    myTarget.ChangeName(assetName);
                }
            }

            GUILayout.Space(20);

            //serializedObject.Update();
            // EditorList.Show(serializedObject.FindProperty("m_nodes"), EditorListOption.ElementLabels | EditorListOption.Buttons);
            //serializedObject.ApplyModifiedProperties();

            DrawDefaultInspector();

            GUILayout.Space(20);

            if (myTarget.SwapableNodes)
            {
                tab = GUILayout.Toolbar(tab, new string[] { "Add", "Swap", "Remove" });
                switch (tab)
                {
                case 0:
                    op = (NODEOPTIONS)EditorGUILayout.EnumPopup("Node to create:", op);
                    if (op != NODEOPTIONS.None)
                    {
                        name = EditorGUILayout.TextField("Node Name: ", name);
                        if (!string.IsNullOrEmpty(name) && !string.IsNullOrWhiteSpace(name) && !myTarget.ContainsName(name))
                        {
                            if (GUILayout.Button("Add Node"))
                            {
                                SO_Node node = GetNodeType(op, name);
                                if (node != null)
                                {
                                    myTarget.AddNode(node);
                                }
                            }
                        }
                    }
                    break;

                case 1:
                    if (!myTarget.NodeAdd)
                    {
                        return;
                    }
                    nodeAName = EditorGUILayout.TextField("Node A Name: ", nodeAName);
                    nodeBName = EditorGUILayout.TextField("Node B Name: ", nodeBName);
                    if ((!string.IsNullOrEmpty(nodeAName) && !string.IsNullOrWhiteSpace(nodeAName) && myTarget.ContainsName(nodeAName)) &&
                        (!string.IsNullOrEmpty(nodeBName) && !string.IsNullOrWhiteSpace(nodeBName) && myTarget.ContainsName(nodeBName)))
                    {
                        if (GUILayout.Button("Swap Nodes"))
                        {
                            myTarget.MoveNodePositions(nodeAName, nodeBName);
                        }
                    }
                    break;

                case 2:
                    name = EditorGUILayout.TextField("Node Name: ", name);
                    if (!string.IsNullOrEmpty(name) && !string.IsNullOrWhiteSpace(name) && myTarget.ContainsName(name))
                    {
                        if (GUILayout.Button("Remove Nodes"))
                        {
                            myTarget.RemoveNode(name);
                            //AssetDatabase.Refresh();
                            // AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(myTarget), ImportAssetOptions.ForceUpdate);
                        }
                    }
                    break;

                default:
                    break;
                }
            }
            else
            {
                if (!myTarget.NodeAdd)
                {
                    return;
                }

                tab = GUILayout.Toolbar(tab, new string[] { "Add", "Remove" });
                switch (tab)
                {
                case 0:
                    op = (NODEOPTIONS)EditorGUILayout.EnumPopup("Node to create:", op);
                    if (op != NODEOPTIONS.None)
                    {
                        name = EditorGUILayout.TextField("Node Name: ", name);
                        if (!string.IsNullOrEmpty(name) && !string.IsNullOrWhiteSpace(name) && !myTarget.ContainsName(name))
                        {
                            if (GUILayout.Button("Add Node"))
                            {
                                SO_Node node = GetNodeType(op, name);
                                if (node != null)
                                {
                                    myTarget.AddNode(node);
                                }
                            }
                        }
                    }
                    break;

                case 1:
                    name = EditorGUILayout.TextField("Node Name: ", name);
                    if (!string.IsNullOrEmpty(name) && !string.IsNullOrWhiteSpace(name) && myTarget.ContainsName(name))
                    {
                        if (GUILayout.Button("Remove Nodes"))
                        {
                            myTarget.RemoveNode(name);
                            AssetDatabase.Refresh();
                            AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(myTarget), ImportAssetOptions.ForceUpdate);
                        }
                    }
                    break;

                default:
                    break;
                }
            }
        }