Пример #1
0
        void TriangleSpriteChooser(TileInfo tile, TileSpriteInfo spriteInfo, int subId)
        {
            TileAtlas atlas = target as TileAtlas;

            GUILayout.BeginVertical("HelpBox");

            Sprite sprite = (Sprite)EditorGUILayout.ObjectField("Main sprite size=1", spriteInfo.importedSprite, typeof(Sprite), false);

            if (spriteInfo.importedSprite != sprite)
            {
                spriteInfo.importedSprite = sprite;

                atlas.BumpMinor();
            }

            if (spriteInfo.importedSprites != null)
            {
                for (int i = 0; i < spriteInfo.importedSprites.Length; i++)
                {
                    sprite = (Sprite)EditorGUILayout.ObjectField(
                        "Main sprite size=" + (i + 2),
                        spriteInfo.importedSprites [i],
                        typeof(Sprite),
                        false
                        );

                    if (spriteInfo.importedSprites [i] != sprite)
                    {
                        spriteInfo.importedSprites [i] = sprite;

                        atlas.BumpMinor();
                    }
                }
            }

            if (GUILayout.Button("Add sprite size"))
            {
                tile.AddSpriteSize(subId);

                atlas.BumpMinor();
            }
            if (GUILayout.Button("Remove sprite size"))
            {
                tile.RemoveSpriteSize(subId);

                atlas.BumpMinor();
            }

            GUILayout.EndVertical();
        }
Пример #2
0
        public override void OnInspectorGUI()
        {
            TileAtlas atlas = target as TileAtlas;

            atlas.useRelativePath = EditorGUILayout.Toggle("Paths are relative", atlas.useRelativePath);

            if (GUILayout.Button("bump minor"))
            {
                atlas.BumpMinor();
            }
            if (GUILayout.Button("bump major"))
            {
                atlas.BumpMajor();
            }

            GUI.enabled = false;
            EditorGUILayout.ObjectField("Sprite sheet", atlas.spriteSheet, typeof(Texture2D), false);
            GUI.enabled = true;

            atlas.material = EditorGUILayout.ObjectField("Material", atlas.material, typeof(Material), false) as Material;
            if (atlas.material == null)
            {
                atlas.material = new Material(Shader.Find("Sprites/Default"));
            }
            atlas.material.mainTexture = atlas.spriteSheet;

            // SPRITE SHEET PATH
            atlas.spriteSheetPath = EditorGUILayout.TextField("Sprite sheet path", atlas.spriteSheetPath);
            if (string.IsNullOrEmpty(atlas.spriteSheetPath))
            {
                atlas.spriteSheetPath = "sprite_sheet.png";
            }
            else
            {
                if (!atlas.spriteSheetPath.EndsWith(".png"))
                {
                    atlas.spriteSheetPath += ".png";
                }
            }

            // TILE PIXEL SIZE
            atlas.tilePixelSize = EditorGUILayout.IntField("Tile pixel size", atlas.tilePixelSize);
            atlas.tilePixelSize = Mathf.Clamp(atlas.tilePixelSize, 1, 1024);

            if (atlas.majorVersion != atlas.spriteSheetMajorVersion)
            {
                EditorGUILayout.HelpBox("Sprite sheet is outdated. It requires regeneration", MessageType.Error);
            }
            else if (atlas.minorVersion != atlas.spriteSheetMinorVersion)
            {
                EditorGUILayout.HelpBox("Sprite sheet is outdated. It requires regeneration", MessageType.Warning);
            }
            else
            {
                EditorGUILayout.HelpBox("Sprite sheet is up to date", MessageType.Info);
            }

            if (GUILayout.Button("Generate sprite sheet"))
            {
                GenerateSpriteSheet();
            }

            // HELPER SCRIPT
            atlas.scriptPath = EditorGUILayout.TextField("Script path", atlas.scriptPath);
            if (string.IsNullOrEmpty(atlas.scriptPath))
            {
                atlas.scriptPath = atlas.name + "Script.cs";
            }
            else
            {
                if (!atlas.scriptPath.EndsWith(".cs"))
                {
                    atlas.scriptPath += ".cs";
                }
            }

            if (atlas.majorVersion != atlas.helperMajorVersion)
            {
                EditorGUILayout.HelpBox("Helper is outdated. It requires regeneration", MessageType.Error);
            }
            else if (atlas.minorVersion != atlas.helperMinorVersion)
            {
                EditorGUILayout.HelpBox("Helper is outdated. It requires regeneration", MessageType.Warning);
            }
            else
            {
                EditorGUILayout.HelpBox("Helper is up to date", MessageType.Info);
            }

            if (GUILayout.Button("Generate script"))
            {
                GenerateScript();
            }

            foreach (TileInfo info in atlas.GetTileInfos())
            {
                TileInfoUI(atlas, info);
            }

            if (GUILayout.Button("Create new tile"))
            {
                atlas.AddTile();

                atlas.BumpMinor();
            }

            if (GUI.changed)
            {
                EditorUtility.SetDirty(target);
            }
        }
Пример #3
0
        void TileInfoUI(TileAtlas atlas, TileInfo tile)
        {
            GUILayout.BeginVertical("HelpBox");

            EditorGUI.indentLevel++;

            TileEditorInfo info = GetTileEditorInfo(tile.id);

            EditorGUILayout.BeginHorizontal();

            info.isRevealed = EditorGUILayout.Foldout(info.isRevealed, "ID:" + tile.id + " " + tile.name);

            GUILayout.FlexibleSpace();

            Sprite mainSprite = tile.GetSprite();

            if (mainSprite != null)
            {
                DrawOnGUISprite(mainSprite);
            }

            if (GUILayout.Button("remove", GUILayout.MaxWidth(80)))
            {
                atlas.RemoveTile(tile.id);

                atlas.BumpMajor();
            }
            EditorGUILayout.EndHorizontal();

            if (info.isRevealed)
            {
                string old = EditorGUILayout.TextField("Name", tile.name);
                if (old != tile.name)
                {
                    tile.name = old;

                    atlas.BumpMinor();
                }

                if (tile.tileGO == null)
                {
                    TileShape shape = (TileShape)EditorGUILayout.EnumPopup("Shape", tile.shape);
                    if (shape != tile.shape)
                    {
                        tile.shape = shape;

                        atlas.BumpMinor();
                    }

                    bool isVertical;

                    if (TileShapeHelper.IsTriangle(tile.shape))
                    {
                        isVertical = EditorGUILayout.Toggle("Triangle can stretch vertically", tile.isVertical);
                        isVertical = !EditorGUILayout.Toggle("Triangle can stretch horizontally", !tile.isVertical);
                    }
                    else
                    {
                        isVertical = tile.shape == TileShape.LEFT_ONEWAY || tile.shape == TileShape.RIGHT_ONEWAY;
                    }

                    if (tile.isVertical != isVertical)
                    {
                        tile.isVertical = isVertical;

                        atlas.BumpMinor();
                    }

                    bool isTrigger = EditorGUILayout.Toggle("Is trigger?", tile.isTrigger);
                    if (isTrigger != tile.isTrigger)
                    {
                        tile.isTrigger = isTrigger;

                        atlas.BumpMinor();
                    }
                    int layer = EditorGUILayout.LayerField("Layer", tile.layer);
                    if (layer != tile.layer)
                    {
                        tile.layer = layer;

                        atlas.BumpMinor();
                    }
                    string tag = EditorGUILayout.TagField("Tag", tile.tag);
                    if (tag != tile.tag)
                    {
                        tile.tag = tag;

                        atlas.BumpMinor();
                    }
                }
                else
                {
                    if (tile.shape != TileShape.EMPTY)
                    {
                        tile.shape = TileShape.EMPTY;

                        atlas.BumpMinor();
                    }
                }

                GameObject obj = EditorGUILayout.ObjectField("Tile GO", tile.tileGO, typeof(GameObject), false) as GameObject;
                if (tile.tileGO != obj)
                {
                    tile.tileGO = obj;

                    atlas.BumpMajor();
                }
                if (tile.tileGO != null)
                {
                    bool val = EditorGUILayout.Toggle("Tile GO is detached", tile.isGODetached);
                    if (val != tile.isGODetached)
                    {
                        tile.isGODetached = val;

                        atlas.BumpMinor();
                    }
                }

                bool isTriangle = TileShapeHelper.IsTriangle(tile.shape);

                if (isTriangle)
                {
                    TriangleSpriteChooser(tile, tile.idSpriteInfo, 0);

                    if (tile.subIdSpriteInfo != null)
                    {
                        for (int i = 0; i < tile.subIdSpriteInfo.Length; i++)
                        {
                            TriangleSpriteChooser(tile, tile.subIdSpriteInfo [i], i);
                        }
                    }
                }
                else
                {
                    Sprite sprite = (Sprite)EditorGUILayout.ObjectField("Main sprite", tile.idSpriteInfo.importedSprite, typeof(Sprite), false);
                    if (tile.idSpriteInfo.importedSprite != sprite)
                    {
                        tile.idSpriteInfo.importedSprite = sprite;

                        atlas.BumpMinor();
                    }

                    if (tile.subIdSpriteInfo != null)
                    {
                        for (int i = 0; i < tile.subIdSpriteInfo.Length; i++)
                        {
                            if (tile.subIdSpriteInfo [i] != null)
                            {
                                sprite = (Sprite)EditorGUILayout.ObjectField("Sub id sprite " + i, tile.subIdSpriteInfo [i].importedSprite, typeof(Sprite), false);

                                if (sprite != tile.subIdSpriteInfo[i].importedSprite)
                                {
                                    tile.subIdSpriteInfo [i].importedSprite = sprite;

                                    atlas.BumpMinor();
                                }
                            }
                        }
                    }
                }

                if (GUILayout.Button("Add sub id sprite"))
                {
                    tile.AddSubId();

                    atlas.BumpMinor();
                }
                if (GUILayout.Button("Remove sub id sprite"))
                {
                    tile.RemoveSubId();

                    atlas.BumpMajor();
                }

                EditorGUILayout.BeginHorizontal();

                EditorGUILayout.EndHorizontal();
            }

            EditorGUI.indentLevel--;

            GUILayout.EndVertical();

            if (GUI.changed)
            {
                EditorUtility.SetDirty(target);
            }
        }