Beispiel #1
0
    public static Atlas FromAtlas(string path, Atlas.AtlasDataFormat format)
    {
        Atlas atlas = new Atlas();

        atlas.Sources = new List <Texture2D>();
        Atlas.ReadAtlasData(atlas, path, format);
        return(atlas);
    }
Beispiel #2
0
 public AtlasInfo(string path, Atlas.AtlasDataFormat format)
 {
     this.Path   = path;
     this.Format = format;
 }
Beispiel #3
0
    private static void ReadAtlasData(Atlas atlas, string path, Atlas.AtlasDataFormat format)
    {
        switch (format)
        {
        //case Atlas.AtlasDataFormat.TexturePacker_Sparrow:
        //    XmlElement xml1 = Util.LoadContentXML(path)["TextureAtlas"];
        //    string path2_1 = xml1.Attr("imagePath", "");
        //    VirtualTexture texture1 = VirtualContent.CreateTexture(Path.Combine(Path.GetDirectoryName(path), path2_1));
        //    MTexture parent1 = new MTexture(texture1);
        //    atlas.Sources.Add(texture1);
        //    IEnumerator enumerator1 = xml1.GetElementsByTagName("SubTexture").GetEnumerator();
        //    try
        //    {
        //        while (enumerator1.MoveNext())
        //        {
        //            XmlElement current = (XmlElement)enumerator1.Current;
        //            string atlasPath = current.Attr("name");
        //            Rectangle clipRect = current.Rect();
        //            atlas.textures[atlasPath] = !current.HasAttr("frameX") ? new MTexture(parent1, atlasPath, clipRect) : new MTexture(parent1, atlasPath, clipRect, new Vector2((float)-current.AttrInt("frameX"), (float)-current.AttrInt("frameY")), current.AttrInt("frameWidth"), current.AttrInt("frameHeight"));
        //        }
        //        break;
        //    }
        //    finally
        //    {
        //        if (enumerator1 is IDisposable disposable)
        //            disposable.Dispose();
        //    }
        //case Atlas.AtlasDataFormat.CrunchXml:
        //    IEnumerator enumerator2 = Calc.LoadContentXML(path)[nameof(atlas)].GetEnumerator();
        //    try
        //    {
        //        while (enumerator2.MoveNext())
        //        {
        //            XmlElement current = (XmlElement)enumerator2.Current;
        //            string str = current.Attr("n", "");
        //            VirtualTexture texture2 = VirtualContent.CreateTexture(Path.Combine(Path.GetDirectoryName(path), str + ".png"));
        //            MTexture parent2 = new MTexture(texture2);
        //            atlas.Sources.Add(texture2);
        //            foreach (XmlElement xml2 in (XmlNode)current)
        //            {
        //                string atlasPath = xml2.Attr("n");
        //                Rectangle clipRect = new Rectangle(xml2.AttrInt("x"), xml2.AttrInt("y"), xml2.AttrInt("w"), xml2.AttrInt("h"));
        //                atlas.textures[atlasPath] = !xml2.HasAttr("fx") ? new MTexture(parent2, atlasPath, clipRect) : new MTexture(parent2, atlasPath, clipRect, new Vector2((float)-xml2.AttrInt("fx"), (float)-xml2.AttrInt("fy")), xml2.AttrInt("fw"), xml2.AttrInt("fh"));
        //            }
        //        }
        //        break;
        //    }
        //    finally
        //    {
        //        if (enumerator2 is IDisposable disposable)
        //            disposable.Dispose();
        //    }
        //case Atlas.AtlasDataFormat.CrunchBinary:
        //    using (FileStream fileStream = File.OpenRead(Path.Combine(Engine.ContentDirectory, path)))
        //    {
        //        BinaryReader stream = new BinaryReader((Stream)fileStream);
        //        short num1 = stream.ReadInt16();
        //        for (int index1 = 0; index1 < (int)num1; ++index1)
        //        {
        //            string str = stream.ReadNullTerminatedString();
        //            VirtualTexture texture2 = VirtualContent.CreateTexture(Path.Combine(Path.GetDirectoryName(path), str + ".png"));
        //            atlas.Sources.Add(texture2);
        //            MTexture parent2 = new MTexture(texture2);
        //            short num2 = stream.ReadInt16();
        //            for (int index2 = 0; index2 < (int)num2; ++index2)
        //            {
        //                string atlasPath = stream.ReadNullTerminatedString();
        //                short num3 = stream.ReadInt16();
        //                short num4 = stream.ReadInt16();
        //                short num5 = stream.ReadInt16();
        //                short num6 = stream.ReadInt16();
        //                short num7 = stream.ReadInt16();
        //                short num8 = stream.ReadInt16();
        //                short num9 = stream.ReadInt16();
        //                short num10 = stream.ReadInt16();
        //                atlas.textures[atlasPath] = new MTexture(parent2, atlasPath, new Rectangle((int)num3, (int)num4, (int)num5, (int)num6), new Vector2((float)-num7, (float)-num8), (int)num9, (int)num10);
        //            }
        //        }
        //        break;
        //    }
        //case Atlas.AtlasDataFormat.CrunchXmlOrBinary:
        //    if (File.Exists(Path.Combine(Engine.ContentDirectory, path + ".bin")))
        //    {
        //        Atlas.ReadAtlasData(atlas, path + ".bin", Atlas.AtlasDataFormat.CrunchBinary);
        //        break;
        //    }
        //    Atlas.ReadAtlasData(atlas, path + ".xml", Atlas.AtlasDataFormat.CrunchXml);
        //    break;
        //case Atlas.AtlasDataFormat.CrunchBinaryNoAtlas:
        //    using (FileStream fileStream = File.OpenRead(Path.Combine(Engine.ContentDirectory, path + ".bin")))
        //    {
        //        BinaryReader stream = new BinaryReader((Stream)fileStream);
        //        short num1 = stream.ReadInt16();
        //        for (int index1 = 0; index1 < (int)num1; ++index1)
        //        {
        //            string path2_2 = stream.ReadNullTerminatedString();
        //            string path1 = Path.Combine(Path.GetDirectoryName(path), path2_2);
        //            short num2 = stream.ReadInt16();
        //            for (int index2 = 0; index2 < (int)num2; ++index2)
        //            {
        //                string index3 = stream.ReadNullTerminatedString();
        //                stream.ReadInt16();
        //                stream.ReadInt16();
        //                stream.ReadInt16();
        //                stream.ReadInt16();
        //                short num3 = stream.ReadInt16();
        //                short num4 = stream.ReadInt16();
        //                short num5 = stream.ReadInt16();
        //                short num6 = stream.ReadInt16();
        //                VirtualTexture texture2 = VirtualContent.CreateTexture(Path.Combine(path1, index3 + ".png"));
        //                atlas.Sources.Add(texture2);
        //                atlas.textures[index3] = new MTexture(texture2, new Vector2((float)-num3, (float)-num4), (int)num5, (int)num6);
        //            }
        //        }
        //        break;
        //    }
        case Atlas.AtlasDataFormat.Packer:
            using (FileStream fileStream = File.OpenRead(Path.Combine(Util.GAME_PATH_CONTENT, path + ".meta")))
            {
                BinaryReader binaryReader = new BinaryReader((Stream)fileStream);
                binaryReader.ReadInt32();
                binaryReader.ReadString();
                binaryReader.ReadInt32();
                short num1 = binaryReader.ReadInt16();
                for (int index1 = 0; index1 < (int)num1; ++index1)
                {
                    string    str       = binaryReader.ReadString();
                    string    filePath  = Path.Combine(Util.GAME_PATH_CONTENT, Path.GetDirectoryName(path), str + ".data");
                    Texture2D texture2D = ReadData(filePath);
                    //Texture2D texture2 = null;//VirtualContent.CreateTexture(Path.Combine(Path.GetDirectoryName(path), str + ".data"));
                    atlas.Sources.Add(texture2D);
                    //byte[] _bytes = texture2D.EncodeToPNG();
                    //System.IO.File.WriteAllBytes("F://test.png", _bytes);
                    MTexture parent2 = new MTexture(texture2D);
                    short    num2    = binaryReader.ReadInt16();
                    for (int index2 = 0; index2 < (int)num2; ++index2)
                    {
                        string atlasPath = binaryReader.ReadString().Replace('\\', '/');
                        short  x         = binaryReader.ReadInt16();
                        short  y         = binaryReader.ReadInt16();
                        short  w         = binaryReader.ReadInt16();
                        short  h         = binaryReader.ReadInt16();
                        short  ox        = binaryReader.ReadInt16();
                        short  oy        = binaryReader.ReadInt16();
                        short  rw        = binaryReader.ReadInt16();
                        short  rh        = binaryReader.ReadInt16();
                        atlas.textures[atlasPath] = new MTexture(parent2, atlasPath, new Rect((int)x, (int)y, (int)w, (int)h), new Vector2((float)-ox, (float)-oy), (int)rw, (int)rh);
                    }
                }
                if (fileStream.Position >= fileStream.Length || !(binaryReader.ReadString() == "LINKS"))
                {
                    break;
                }
                short num11 = binaryReader.ReadInt16();
                for (int index = 0; index < (int)num11; ++index)
                {
                    string key = binaryReader.ReadString();
                    string str = binaryReader.ReadString();
                    atlas.links.Add(key, str);
                }
                break;
            }

        case Atlas.AtlasDataFormat.PackerNoAtlas:
            using (FileStream fileStream = File.OpenRead(Path.Combine(Util.GAME_PATH_CONTENT, path + ".meta")))
            {
                BinaryReader binaryReader = new BinaryReader((Stream)fileStream);
                binaryReader.ReadInt32();
                binaryReader.ReadString();
                binaryReader.ReadInt32();
                short num1 = binaryReader.ReadInt16();
                for (int index1 = 0; index1 < (int)num1; ++index1)
                {
                    string path2_2 = binaryReader.ReadString();
                    string path1   = Path.Combine(Path.GetDirectoryName(path), path2_2);
                    short  num2    = binaryReader.ReadInt16();
                    for (int index2 = 0; index2 < (int)num2; ++index2)
                    {
                        string str = binaryReader.ReadString().Replace('\\', '/');
                        binaryReader.ReadInt16();
                        binaryReader.ReadInt16();
                        binaryReader.ReadInt16();
                        binaryReader.ReadInt16();
                        short     num3      = binaryReader.ReadInt16();
                        short     num4      = binaryReader.ReadInt16();
                        short     num5      = binaryReader.ReadInt16();
                        short     num6      = binaryReader.ReadInt16();
                        string    filePath  = Path.Combine(Util.GAME_PATH_CONTENT, path1, str + ".data");
                        Texture2D texture2D = ReadData(filePath);
                        atlas.Sources.Add(texture2D);
                        MTexture parent2 = new MTexture(texture2D);
                        atlas.textures[str]           = new MTexture(parent2, -num3, -num4, (int)num5, (int)num6);
                        atlas.textures[str].AtlasPath = str;
                    }
                }
                if (fileStream.Position >= fileStream.Length || !(binaryReader.ReadString() == "LINKS"))
                {
                    break;
                }
                short num7 = binaryReader.ReadInt16();
                for (int index = 0; index < (int)num7; ++index)
                {
                    string key = binaryReader.ReadString();
                    string str = binaryReader.ReadString();
                    atlas.links.Add(key, str);
                }
                break;
            }

        default:
            throw new NotImplementedException();
        }
    }
Beispiel #4
0
        private static void ReadAtlasData(Atlas atlas, string path, Atlas.AtlasDataFormat format)
        {
            switch (format)
            {
            case Atlas.AtlasDataFormat.TexturePacker_Sparrow:
            case Atlas.AtlasDataFormat.CrunchXml:
            case Atlas.AtlasDataFormat.CrunchBinary:
            case Atlas.AtlasDataFormat.CrunchXmlOrBinary:
            case Atlas.AtlasDataFormat.CrunchBinaryNoAtlas:
                // Celeste never use these types.
                throw new NotImplementedException();
                break;

            case Atlas.AtlasDataFormat.Packer:
                goto IL_521;

            case Atlas.AtlasDataFormat.PackerNoAtlas:
                goto IL_67A;

            default:
                throw new NotImplementedException();
IL_521:
                using (FileStream fileStream3 = File.OpenRead(Path.Combine(Celeste.ContentDirectory, path + ".meta")))
                {
                    BinaryReader binaryReader3 = new BinaryReader(fileStream3);
                    binaryReader3.ReadInt32();
                    binaryReader3.ReadString();
                    binaryReader3.ReadInt32();
                    short num9 = binaryReader3.ReadInt16();
                    for (int m = 0; m < (int)num9; m++)
                    {
                        string         str3            = binaryReader3.ReadString();
                        VirtualTexture virtualTexture5 = new VirtualTexture(Path.Combine(Path.GetDirectoryName(path), str3 + ".data"));
                        atlas.Sources.Add(virtualTexture5);
                        short num10 = binaryReader3.ReadInt16();
                        for (int n = 0; n < (int)num10; n++)
                        {
                            string text5   = binaryReader3.ReadString().Replace('\\', '/');
                            short  x2      = binaryReader3.ReadInt16();
                            short  y2      = binaryReader3.ReadInt16();
                            short  width3  = binaryReader3.ReadInt16();
                            short  height3 = binaryReader3.ReadInt16();
                            short  num11   = binaryReader3.ReadInt16();
                            short  num12   = binaryReader3.ReadInt16();
                            short  width4  = binaryReader3.ReadInt16();
                            short  height4 = binaryReader3.ReadInt16();
                        }
                    }
                    return;
                }
IL_67A:
                using (FileStream fileStream4 = File.OpenRead(Path.Combine(Celeste.ContentDirectory, path + ".meta")))
                {
                    BinaryReader binaryReader4 = new BinaryReader(fileStream4);
                    binaryReader4.ReadInt32();
                    binaryReader4.ReadString();
                    binaryReader4.ReadInt32();
                    short num13 = binaryReader4.ReadInt16();
                    for (int num14 = 0; num14 < (int)num13; num14++)
                    {
                        string path5 = binaryReader4.ReadString();
                        string path6 = Path.Combine(Path.GetDirectoryName(path), path5);
                        short  num15 = binaryReader4.ReadInt16();
                        for (int num16 = 0; num16 < (int)num15; num16++)
                        {
                            string text6 = binaryReader4.ReadString().Replace('\\', '/');
                            binaryReader4.ReadInt16();
                            binaryReader4.ReadInt16();
                            binaryReader4.ReadInt16();
                            binaryReader4.ReadInt16();
                            short          num17           = binaryReader4.ReadInt16();
                            short          num18           = binaryReader4.ReadInt16();
                            short          frameWidth2     = binaryReader4.ReadInt16();
                            short          frameHeight2    = binaryReader4.ReadInt16();
                            VirtualTexture virtualTexture6 = new VirtualTexture(Path.Combine(path6, text6 + ".data"));
                            atlas.Sources.Add(virtualTexture6);
                        }
                    }
                    return;
                }
            }
        }