Esempio n. 1
0
    // Use this for initialization
    void Start()
    {
        loaded         = false;
        currentLoading = null;
        loadables      = new Queue <Loadable>();

        tileDataGenerator = gameObject.GetComponent <Component_TileDataGenerator>();
        loadables.Enqueue(tileDataGenerator);
        world = gameObject.GetComponent <World>();
        loadables.Enqueue(world);
        level = gameObject.GetComponent <Level>();
        loadables.Enqueue(level);
    }
    public override void OnInspectorGUI()
    {
        editor = this;
        gen    = (Component_TileDataGenerator)target;

        //Init
        stateInit();

        if (runOnce)
        {
            //Dont know why this needs to be ran once, but it does! Don't question the clusterfuck that is unity
            increaseMemory(gen.tileset.Length);

            runOnce = false;
        }

        //Textures
        Texture texHorSep    = Resources.Load <Texture>("layout_horizontalseperator");
        Texture texVerSep    = Resources.Load <Texture>("layout_verticalseperator");
        Texture texPlus      = Resources.Load <Texture>("inspectorbutton_plus");
        Texture texMinus     = Resources.Load <Texture>("inspectorbutton_minus");
        Texture texReverse   = Resources.Load <Texture>("inspectorbutton_reverse");
        Texture texCopy      = Resources.Load <Texture>("inspectorbutton_copy");
        Texture texMagnify   = Resources.Load <Texture>("inspectorbutton_magnify");
        Texture texReduce    = Resources.Load <Texture>("inspectorbutton_reduce");
        Texture texUpArrow   = Resources.Load <Texture>("inspectorbutton_uparrow");
        Texture texDownArrow = Resources.Load <Texture>("inspectorbutton_downarrow");

        /* Styles */
        //Full Image Button
        GUIStyle styleFullImageBtn = new GUIStyle(GUI.skin.button);

        styleFullImageBtn.fixedWidth    = 0;
        styleFullImageBtn.fixedHeight   = 0;
        styleFullImageBtn.stretchWidth  = true;
        styleFullImageBtn.stretchHeight = true;
        styleFullImageBtn.clipping      = TextClipping.Overflow;
        styleFullImageBtn.padding       = new RectOffset(0, 0, 0, 0);


        //Begin Inspector
        GUILayout.BeginVertical();

        GUILayout.Space(8);

        drawHorizontalSeperator(texHorSep, 4f);

        GUILayout.BeginHorizontal();

        //Create Add Element Button / Zoom All / Reduce All
        if (GUILayout.Button(texPlus, styleFullImageBtn, GUILayout.Width(32), GUILayout.Height(32)))
        {
            int oldLength = gen.tileset.Length;

            gen.addData(new Component_TileDataGenerator.Data());

            increaseMemory(oldLength);
        }

        GUILayout.FlexibleSpace();

        if (GUILayout.Button(texMagnify, styleFullImageBtn, GUILayout.Width(32), GUILayout.Height(32)))
        {
            for (int i = 0; i < gen.tileset.Length; i++)
            {
                zoomButton[i] = true;
            }
        }

        if (GUILayout.Button(texReduce, styleFullImageBtn, GUILayout.Width(32), GUILayout.Height(32)))
        {
            for (int i = 0; i < gen.tileset.Length; i++)
            {
                zoomButton[i] = false;
            }
        }

        GUILayout.EndHorizontal();

        drawHorizontalSeperator(texHorSep, 4f);

        GUILayout.Space(8);

        //Display Tilesets
        foldTilesets = EditorGUI.Foldout(EditorGUILayout.GetControlRect(), foldTilesets, "Tilesets (Count: " + gen.tileset.Length + ")", true);
        if (foldTilesets)
        {
            GUILayout.BeginVertical();

            drawHorizontalSeperator(texHorSep, 3f);

            //Expand/Collapse buttons
            GUILayout.BeginHorizontal();

            if (GUILayout.Button("Expand All"))
            {
                for (int i = 0; i < foldTile.Length; i++)
                {
                    foldTile[i] = true;
                }
            }

            if (GUILayout.Button("Collapse All"))
            {
                for (int i = 0; i < foldTile.Length; i++)
                {
                    foldTile[i] = false;
                }
            }

            GUILayout.EndHorizontal();

            drawHorizontalSeperator(texHorSep, 3f);

            //List Tilesets
            for (int i = 0; i < gen.tileset.Length; i++)
            {
                Component_TileDataGenerator.Data data = gen.tileset[i];

                GUILayout.BeginHorizontal();

                GUILayout.Space(8);

                GUILayout.BeginVertical();

                foldTile[i] = EditorGUI.Foldout(EditorGUILayout.GetControlRect(), foldTile[i], data.name, true);
                if (foldTile[i])
                {
                    GUILayout.BeginVertical();

                    //Name / TextField / Tileable Toggle / Copy Button / Reset to Default Button / Delete Button
                    GUILayout.BeginHorizontal();

                    GUILayout.Space(8);

                    GUILayout.Label("Name", GUILayout.ExpandWidth(false));

                    data.name = EditorGUILayout.DelayedTextField(data.name, GUILayout.Width(160));

                    //Display mutate buttons when none have been clicked
                    if (!mutateEnabled(i))
                    {
                        data.isTileable = GUILayout.Toggle(data.isTileable, "Tileable", GUILayout.ExpandWidth(false));

                        GUILayout.FlexibleSpace();

                        if (i > 0)
                        {
                            if (GUILayout.Button(texUpArrow, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22)))
                            {
                                gen.swapData(data, gen.tileset[i - 1]);
                            }
                        }

                        if (i < gen.tileset.Length - 1)
                        {
                            if (GUILayout.Button(texDownArrow, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22)))
                            {
                                gen.swapData(data, gen.tileset[i + 1]);
                            }
                        }
                        else
                        {
                            GUILayout.Space(22);
                        }

                        if (zoomButton[i])
                        {
                            if (GUILayout.Button(texReduce, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22)))
                            {
                                zoomButton[i] = false;
                            }
                        }
                        else
                        {
                            if (GUILayout.Button(texMagnify, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22)))
                            {
                                zoomButton[i] = true;
                            }
                        }

                        if (GUILayout.Button(texCopy, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22)))
                        {
                            int oldLength = gen.tileset.Length;

                            gen.copyDataExceptName(data);

                            increaseMemory(oldLength);
                        }

                        if (GUILayout.Button(texReverse, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22)))
                        {
                            clearMutates();
                            mutateButton[MUTATE_DEFAULT, i] = true;
                        }

                        if (GUILayout.Button(texMinus, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22)))
                        {
                            clearMutates();
                            mutateButton[MUTATE_DELETE, i] = true;
                        }
                    }

                    //Display mutate buttons when one has been clicked
                    if (mutateButton[MUTATE_DEFAULT, i])
                    {
                        GUILayout.FlexibleSpace();

                        GUILayout.Label("Reset to Default?", GUILayout.ExpandWidth(false));

                        if (GUILayout.Button("Yes", GUILayout.Width(44), GUILayout.Height(22)))
                        {
                            gen.tileset[i] = new Component_TileDataGenerator.Data();
                            mutateButton[MUTATE_DEFAULT, i] = false;
                        }

                        if (GUILayout.Button("No", GUILayout.Width(44), GUILayout.Height(22)))
                        {
                            mutateButton[MUTATE_DEFAULT, i] = false;
                        }
                    }

                    if (mutateButton[MUTATE_DELETE, i])
                    {
                        GUILayout.FlexibleSpace();

                        GUILayout.Label("Delete?", GUILayout.ExpandWidth(false));

                        if (GUILayout.Button("Yes", GUILayout.Width(44), GUILayout.Height(22)))
                        {
                            gen.deleteData(i);
                            mutateButton[MUTATE_DELETE, i] = false;
                        }

                        if (GUILayout.Button("No", GUILayout.Width(44), GUILayout.Height(22)))
                        {
                            mutateButton[MUTATE_DELETE, i] = false;
                        }
                    }


                    GUILayout.EndHorizontal();
                    //-------------------------------------------

                    drawHorizontalSeperator(texHorSep, 1f);

                    //Sprite / Normal Map
                    GUILayout.BeginHorizontal();

                    int zoomwidth  = (zoomButton[i]) ? (128) : (40);
                    int zoomheight = (zoomButton[i]) ? (128) : (40);

                    GUILayout.BeginVertical();

                    GUILayout.Label("Sprite");
                    if (data.isTileable)
                    {
                        data.sprites = (Texture2D)EditorGUILayout.ObjectField(data.sprites, typeof(Texture2D), false, GUILayout.Width(zoomwidth), GUILayout.Height(zoomheight));
                    }
                    else
                    {
                        data.sprite = (Sprite)EditorGUILayout.ObjectField(data.sprite, typeof(Sprite), false, GUILayout.Width(zoomwidth), GUILayout.Height(zoomheight));
                    }

                    GUILayout.EndVertical();

                    drawVerticalSeperator(texVerSep, 1f, zoomheight);

                    GUILayout.BeginVertical();

                    data.isNormalMapped = GUILayout.Toggle(data.isNormalMapped, "Normal Map");

                    if (data.isNormalMapped)
                    {
                        data.normalMap = (Texture)EditorGUILayout.ObjectField(data.normalMap, typeof(Texture), false, GUILayout.Width(zoomwidth), GUILayout.Height(zoomheight));
                    }

                    GUILayout.EndVertical();

                    GUILayout.FlexibleSpace();

                    GUILayout.EndHorizontal();
                    //-------------------------------------------

                    GUILayout.Space(8);

                    drawHorizontalSeperator(texHorSep, 1f);

                    GUILayout.Space(8);

                    //Color / Shiny
                    GUILayout.BeginHorizontal();

                    GUILayout.Label("Sprite Color", GUILayout.ExpandWidth(false));
                    data.mainColor = EditorGUILayout.ColorField(data.mainColor);

                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();

                    data.isShiny = GUILayout.Toggle(data.isShiny, "  Shiny    ", GUILayout.ExpandWidth(false));

                    if (data.isShiny)
                    {
                        data.specularColor = EditorGUILayout.ColorField(data.specularColor);
                    }

                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();

                    if (data.isShiny)
                    {
                        GUILayout.Label("Shininess    ", GUILayout.ExpandWidth(false));
                        data.shininess = EditorGUILayout.DelayedFloatField(data.shininess);
                    }

                    GUILayout.EndHorizontal();
                    //-------------------------------------------

                    GUILayout.Space(8);

                    drawHorizontalSeperator(texHorSep, 1f);

                    GUILayout.Space(8);

                    //Shader
                    GUILayout.BeginHorizontal();

                    GUILayout.Label("Shader       ", GUILayout.ExpandWidth(false));
                    data.shader = (Shader)EditorGUILayout.ObjectField(data.shader, typeof(Shader), false);

                    GUILayout.EndHorizontal();
                    //-------------------------------------------

                    GUILayout.Space(8);

                    GUILayout.EndVertical();
                }

                GUILayout.EndVertical();

                GUILayout.EndHorizontal();

                drawHorizontalSeperator(texHorSep, 3f);
            }

            GUILayout.EndVertical();
        }

        GUILayout.Space(32);

        GUILayout.EndVertical();
    }