private float SideMenuMoveNodeUp(Rect square, Vector2 pos, GUIStyle defaultNodeStyle, float offset, int index)
        {
            float   heightOffset = offset + 30;
            Vector2 size         = new Vector2(15, 15);

            pos.x = square.x + (square.width / 2) + 55;
            pos.y = square.y + square.height - (square.height - heightOffset);
            Rect rect = new Rect(pos, size);

            if (index == 0)
            {
                GUI.Button(rect, "", EditorStyles.miniButton);
                return(heightOffset);
            }

            if (GUI.Button(rect, "\u21D1", EditorStyles.miniButton))
            {
                SideMenuAssetToUpdate.MoveNodePositions(SideMenuAssetToUpdate.Children[index].name, SideMenuAssetToUpdate.Children[index - 1].name);
            }
            return(heightOffset);
        }
        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();
        }
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;
                }
            }
        }