Пример #1
0
        public void load(StreamReader reader, String imagesDir)
        {
            String[]  tuple = new String[4];
            AtlasPage page  = null;

            while (true)
            {
                String line = reader.ReadLine();
                if (line == null)
                {
                    break;
                }
                if (line.Trim().Length == 0)
                {
                    page = null;
                }
                else if (page == null)
                {
                    page = NewAtlasPage(Path.Combine(imagesDir, line));

                    page.Format = (Format)Enum.Parse(typeof(Format), readValue(reader), false);

                    readTuple(reader, tuple);
                    page.MinFilter = (TextureFilter)Enum.Parse(typeof(TextureFilter), tuple[0]);
                    page.MagFilter = (TextureFilter)Enum.Parse(typeof(TextureFilter), tuple[1]);

                    String direction = readValue(reader);
                    page.UWrap = TextureWrap.ClampToEdge;
                    page.VWrap = TextureWrap.ClampToEdge;
                    if (direction == "x")
                    {
                        page.UWrap = TextureWrap.Repeat;
                    }
                    else if (direction == "y")
                    {
                        page.VWrap = TextureWrap.Repeat;
                    }
                    else if (direction == "xy")
                    {
                        page.UWrap = page.VWrap = TextureWrap.Repeat;
                    }

                    pages.Add(page);
                }
                else
                {
                    AtlasRegion region = new AtlasRegion();
                    region.Name = line;
                    region.Page = page;

                    region.Rotate = Boolean.Parse(readValue(reader));

                    readTuple(reader, tuple);
                    int x = int.Parse(tuple[0]);
                    int y = int.Parse(tuple[1]);

                    readTuple(reader, tuple);
                    int width  = int.Parse(tuple[0]);
                    int height = int.Parse(tuple[1]);

                    float invTexWidth  = 1f / page.GetTextureWidth();
                    float invTexHeight = 1f / page.GetTextureHeight();
                    region.U      = x * invTexWidth;
                    region.V      = y * invTexHeight;
                    region.U2     = (x + width) * invTexWidth;
                    region.V2     = (y + height) * invTexHeight;
                    region.Width  = Math.Abs(width);
                    region.Height = Math.Abs(height);

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

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

                            readTuple(reader, tuple);
                        }
                    }

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

                    readTuple(reader, tuple);
                    region.OffsetX = int.Parse(tuple[0]);
                    region.OffsetY = int.Parse(tuple[1]);

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

                    regions.Add(region);
                }
            }
        }