Exemplo n.º 1
0
        static Stream GetDecodedStream(
            XmlElement xmlRoot,
            TiledCompression compression)
        {
            var rawData = Convert.FromBase64String(xmlRoot.InnerText);

            switch (compression)
            {
            case TiledCompression.Gzip:
                return(new GZipStream(
                           new MemoryStream(rawData, false),
                           CompressionMode.Decompress));

            case TiledCompression.Zlib:
            {
                var data = new byte[rawData.Length - 6];
                Array.Copy(rawData, 2, data, 0, data.Length);
                return(new DeflateStream(
                           new MemoryStream(data, false),
                           CompressionMode.Decompress));
            }

            default:
                throw new Exception("Unrecognizable compression type.");
            }
        }
Exemplo n.º 2
0
        static void ReadTileMap(XmlElement xmlRoot, int[] gidMap, TiledCompression compression)
        {
            var encoding = xmlRoot.AttrToString("encoding");

            if (encoding == "base64")
            {
                using (var stream = GetDecodedStream(xmlRoot, compression))
                {
                    using (var reader = new BinaryReader(stream))
                    {
                        const uint horizontal = 0x80000000;
                        const uint vertical   = 0x40000000;
                        const uint diagonal   = 0x20000000;

                        for (int i = 0; i < gidMap.Length; i++)
                        {
                            var ugid = reader.ReadUInt32();
                            ugid     &= ~(horizontal | vertical | diagonal);
                            gidMap[i] = (int)ugid;
                        }
                    }
                }
            }
        }