public TextureAtlasData(string packFile, string imagesDir, bool flip) { Pages = new List <Page>(); Regions = new List <Region>(); using (StreamReader reader = new StreamReader(packFile)) { List <string> tupleData = new List <string>(); Page pageImage = null; while (true) { string line = reader.ReadLine(); if (line == null) { break; } if (line.Trim().Length == 0) { pageImage = null; } else if (pageImage == null) { string file = Path.Combine(imagesDir, line); string formatString = ReadValue(reader); SurfaceFormat format; if (!Enum.TryParse <SurfaceFormat>(formatString, true, out format)) { format = TranslateSurfaceFormat(formatString); } ReadTuple(reader, tupleData); //TextureFilter min = (TextureFilter)Enum.Parse(typeof(TextureFilter), tupleData[0], true); //TextureFilter max = (TextureFilter)Enum.Parse(typeof(TextureFilter), tupleData[1], true); TextureFilter filter = TranslateTextureFilter(tupleData[0], tupleData[1]); string direction = ReadValue(reader); TextureAddressMode repeatX = TextureAddressMode.Clamp; TextureAddressMode repeatY = TextureAddressMode.Clamp; switch (direction) { case "x": repeatX = TextureAddressMode.Wrap; break; case "y": repeatY = TextureAddressMode.Wrap; break; case "xy": repeatX = TextureAddressMode.Wrap; repeatY = TextureAddressMode.Wrap; break; } pageImage = new Page(file, filter.IsMapMap(), format, filter, repeatX, repeatY); Pages.Add(pageImage); } else { bool rotate = bool.Parse(ReadValue(reader)); ReadTuple(reader, tupleData); int left = int.Parse(tupleData[0]); int top = int.Parse(tupleData[1]); ReadTuple(reader, tupleData); int width = int.Parse(tupleData[0]); int height = int.Parse(tupleData[1]); Region region = new Region() { Page = pageImage, Left = left, Top = top, Width = width, Height = height, Name = line, Rotate = rotate, }; if (ReadTuple(reader, tupleData) == 4) { region.Splits = new int[] { int.Parse(tupleData[0]), int.Parse(tupleData[1]), int.Parse(tupleData[2]), int.Parse(tupleData[3]), }; if (ReadTuple(reader, tupleData) == 4) { region.Pads = new int[] { int.Parse(tupleData[0]), int.Parse(tupleData[1]), int.Parse(tupleData[2]), int.Parse(tupleData[3]), }; ReadTuple(reader, tupleData); } } region.OriginalWidth = int.Parse(tupleData[0]); region.OriginalHeight = int.Parse(tupleData[1]); ReadTuple(reader, tupleData); region.OffsetX = int.Parse(tupleData[0]); region.OffsetY = int.Parse(tupleData[1]); region.Index = int.Parse(ReadValue(reader)); if (flip) { region.Flip = true; } Regions.Add(region); } } } Regions.Sort(IndexComparator); }