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 = page.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); }