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