Example #1
0
    void OnGUI()
    {
        GUIStyle generateButton = new GUIStyle(GUI.skin.button), label = EditorStyles.boldLabel;

        generateButton.active.textColor  = AnyWalkerEditor.col_black;
        generateButton.normal.textColor  = AnyWalkerEditor.col_semiblack;
        generateButton.onHover.textColor = AnyWalkerEditor.col_black;
        generateButton.fontStyle         = FontStyle.Bold;
        generateButton.padding           = new RectOffset(10, 10, 10, 5);

        label.normal.textColor = AnyWalkerEditor.col_egg;

        bgCol = new GUIStyle();
        bgCol.normal.background = Texture2D.blackTexture;

        if (obj == null)
        {
            return;
        }
        if (editor == null)
        {
            editor = Editor.CreateEditor(obj);
        }
        editor.OnInteractivePreviewGUI(GUILayoutUtility.GetRect(size.x, size.y - 30), bgCol);

        //Loaded File Display
        if (settings.file != null && settings.file.GetType() == typeof(Texture2D))
        {
            GUI.DrawTexture(new Rect(size.x - 70, size.y - 100, 60, 60), (Texture2D)settings.file);
        }

        //Settings
        int settingAmount       = settings.variables.Count + 1;
        int generateButtonWidth = 150;

        GUI.backgroundColor = AnyWalkerEditor.col_semiblack;
        GUILayout.BeginHorizontal();
        GUILayout.BeginVertical("Box", GUILayout.Width(size.x - (generateButtonWidth + 10)));
        GUILayout.Label("Settings", EditorStyles.boldLabel);
        GUI.backgroundColor = AnyWalkerEditor.col_egg;

        GUIStyle        setting = EditorStyles.boldLabel;
        int             oldFontSize = setting.fontSize;
        float           elementX = (size.x - (generateButtonWidth + 10)) / settingAmount, elementY = 30;
        GUILayoutOption elementWidth = GUILayout.Width(elementX), elementHeight = GUILayout.Height(elementY);

        setting.fontSize = 10;
        GUILayout.BeginHorizontal();

        //Individual Settings
        EditorGUI.BeginChangeCheck();
        for (int i = 0; i < settings.variables.Count; i++)
        {
            GUI.backgroundColor = AnyWalkerEditor.col_black;
            GUILayout.BeginVertical("Box");
            GUI.backgroundColor = AnyWalkerEditor.col_egg;
            GUILayout.Label(settings.variables[i].name, setting, elementWidth);

            if (values[i].GetType() == typeof(float))
            {
                values[i] = EditorGUILayout.Slider((float)values[i], (float)settings.variables[i].options[0], (float)settings.variables[i].options[1], elementWidth, GUILayout.Height(elementY / 2));
                GUILayout.Space(15);
            }
            else if (values[i].GetType() == typeof(int))
            {
                values[i] = EditorGUILayout.IntSlider((int)values[i], (int)settings.variables[i].options[0], (int)settings.variables[i].options[1], GUILayout.Height(elementY / 2));
                GUILayout.Space(15);
            }
            else if (values[i].GetType() == typeof(bool))
            {
                int val = ((bool)values[i])? 1 : 0;
                val       = GUILayout.SelectionGrid(val, new string[] { settings.variables[i].options[0].ToString(), settings.variables[i].options[1].ToString() }, 2);
                values[i] = (val == 0)? true : false;
                GUILayout.Space(12.5f);
            }
            else if (values[i].GetType() == typeof(string))
            {
                values[i] = GUILayout.TextField((string)values[i], elementWidth, GUILayout.Height(elementY / 2));
                GUILayout.Space(15);
            }
            else if (values[i].GetType() == typeof(Color))
            {
                values[i] = EditorGUILayout.ColorField((Color)values[i], GUILayout.Width(elementX / 1.6f), GUILayout.Height(elementY / 2));
            }
            //Color array
            else if (values[i].GetType() == typeof(AnyWalker.TerrainType))
            {
                GUILayout.BeginHorizontal();
                AnyWalker.TerrainType cast = (AnyWalker.TerrainType)values[i];
                int count = (int)settings.variables[i].options[0];
                cast.Synchronize(count);
                for (int v = 0; v < count; v++)
                {
                    GUILayout.BeginVertical();
                    cast.colors[v]  = EditorGUILayout.ColorField(cast.colors[v], GUILayout.Width(elementX / 2f), GUILayout.Height(elementY / 2));
                    cast.heights[v] = EditorGUILayout.FloatField(cast.heights[v], GUILayout.Width(elementX / 2.8f), GUILayout.Height(elementY / 2));
                    GUILayout.EndVertical();
                }
                GUILayout.EndHorizontal();
            }
            else if (values[i].GetType() == typeof(FilterMode))
            {
                int selected = 0;
                if ((FilterMode)values[i] == FilterMode.Point)
                {
                    selected = 0;
                }
                else if ((FilterMode)values[i] == FilterMode.Bilinear)
                {
                    selected = 1;
                }
                else
                {
                    selected = 2;
                }
                string[] names = { "Low", "Medium", "High" };
                selected = EditorGUILayout.Popup(selected, names, GUILayout.Width(elementX / 2));
                if (selected == 0)
                {
                    values[i] = FilterMode.Point;
                }
                else if (selected == 1)
                {
                    values[i] = FilterMode.Bilinear;
                }
                else
                {
                    values[i] = FilterMode.Trilinear;
                }

                GUILayout.Space(15);
            }
            GUILayout.EndVertical();
        }
        if (EditorGUI.EndChangeCheck())
        {
            UpdateMesh();
        }

        GUILayout.EndHorizontal();
        GUILayout.EndVertical();

        //Generate Button
        GUI.backgroundColor = AnyWalkerEditor.col_semiblack;
        GUILayout.BeginVertical("Box", GUILayout.Width(generateButtonWidth));
        GUILayout.Label("Finalise", EditorStyles.boldLabel);
        GUI.backgroundColor = AnyWalkerEditor.col_egg;
        GUILayout.Space(32);
        if (GUILayout.Button("Generate", generateButton))
        {
            tar.Generate(obj, settings.size);
            this.Close();
        }
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        setting.fontSize       = oldFontSize;
        label.normal.textColor = Color.black;
    }