Example #1
0
        public override GdxTextureAtlas Load(AssetManager assetManager, string assetPath)
        {
            using (var stream = assetManager.OpenStream(assetPath))
            {
                var data          = GdxTextureAtlasData.Load(assetPath, stream, string.Empty, false);
                var atlas         = new GdxTextureAtlas(data.Name);
                var textures      = new List <Texture>();
                var pageToTexture = new Dictionary <GdxTextureAtlasData.Page, Texture>();

                foreach (var page in data.Pages)
                {
                    var texture = assetManager.Load <Texture>(page.TextureHandle);
                    textures.Add(texture);
                    pageToTexture.Add(page, texture);
                }

                foreach (var region in data.Regions)
                {
                    var texture     = pageToTexture[region.Page];
                    var width       = region.Rotate ? region.Height : region.Width;
                    var height      = region.Rotate ? region.Width : region.Height;
                    var left        = region.Left;
                    var top         = region.Top;
                    var atlasRegion = new GdxTextureAtlasRegion(region.Name, texture, left, top, width, height)
                    {
                        Index          = region.Index,
                        OffsetX        = region.OffsetX,
                        OffsetY        = region.OffsetY,
                        OriginalHeight = region.OriginalHeight,
                        OriginalWidth  = region.OriginalWidth,
                        Rotate         = region.Rotate,
                        Splits         = region.Splits,
                        Pads           = region.Pads
                    };

                    if (region.Flip)
                    {
                        atlasRegion.Flip(false, true);
                    }

                    atlas.AddRegion(atlasRegion);
                }

                return(atlas);
            }
        }
        public static GdxTextureAtlasData Load(string name, Stream stream, string imageFolder, bool flip)
        {
            var data = new GdxTextureAtlasData(name);

            using (var reader = new StreamReader(stream))
            {
                try
                {
                    Page pageImage = null;
                    while (!reader.EndOfStream)
                    {
                        var line = reader.ReadLine();
                        if (line == null)
                        {
                            break;
                        }
                        if (line.Trim().Length == 0)
                        {
                            pageImage = null;
                        }
                        else if (pageImage == null)
                        {
                            // TODO: This code might not work on all platforms
                            if (!string.IsNullOrEmpty(imageFolder) && !imageFolder.EndsWith("/"))
                            {
                                imageFolder += "/";
                            }

                            var textureHandle = imageFolder + line;

                            var width  = 0f;
                            var height = 0f;

                            if (ReadTuple(reader) == 2)
                            {
                                // size is only optional for an atlas packed with an old TexturePacker.
                                width  = int.Parse(_tuple[0]);
                                height = int.Parse(_tuple[1]);
                                ReadTuple(reader);
                            }


                            ReadTuple(reader);
                            //TextureFilter min = TextureFilter.valueOf(tuple[0]);
                            //TextureFilter max = TextureFilter.valueOf(tuple[1]);

                            String direction = ReadValue(reader);
                            //TextureWrap repeatX = ClampToEdge;
                            //TextureWrap repeatY = ClampToEdge;

                            /*
                             * switch(direction)
                             * {
                             *  case "xy": repeatX = Repeat; repeatY = Repeat;
                             *      break;
                             *  case "x": repeatX = Repeat;
                             *      break;
                             *  case "y": repeatY = Repeat;
                             *      break;
                             * }*/
                            pageImage = new Page(textureHandle, width, height, false);
                            data._pages.Add(pageImage);
                        }
                        else
                        {
                            var rotate = bool.Parse(ReadValue(reader));

                            ReadTuple(reader);
                            var left = int.Parse(_tuple[0]);
                            var top  = int.Parse(_tuple[1]);

                            ReadTuple(reader);
                            var width  = int.Parse(_tuple[0]);
                            var height = int.Parse(_tuple[1]);

                            var region = new Region
                            {
                                Page   = pageImage,
                                Left   = left,
                                Top    = top,
                                Width  = width,
                                Height = height,
                                Name   = line,
                                Rotate = rotate
                            };

                            if (ReadTuple(reader) == 4)
                            {
                                // split is optional
                                region.Splits = new[]
                                {
                                    int.Parse(_tuple[0]), int.Parse(_tuple[1]),
                                    int.Parse(_tuple[2]), int.Parse(_tuple[3])
                                };

                                if (ReadTuple(reader) == 4)
                                {
                                    // pad is optional, but only present with splits
                                    region.Pads = new[]
                                    {
                                        int.Parse(_tuple[0]), int.Parse(_tuple[1]),
                                        int.Parse(_tuple[2]), int.Parse(_tuple[3])
                                    };

                                    ReadTuple(reader);
                                }
                            }

                            region.OriginalWidth  = int.Parse(_tuple[0]);
                            region.OriginalHeight = int.Parse(_tuple[1]);

                            ReadTuple(reader);
                            region.OffsetX = int.Parse(_tuple[0]);
                            region.OffsetY = int.Parse(_tuple[1]);

                            region.Index = int.Parse(ReadValue(reader));

                            if (flip)
                            {
                                region.Flip = true;
                            }

                            data._regions.Add(region);
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new FormatException("Error reading pack file: " + stream, ex);
                }
            }
            data._regions.Sort();
            return(data);
        }