void ParseTileElement() { if (currentParentElement == CCTileMapProperty.Layer) { int layersCount = Layers != null ? Layers.Count : 0; CCTileLayerInfo layer = layersCount > 0 ? Layers[layersCount - 1] : null; uint gidAndFlags = uint.Parse(currentAttributeDict[TileElementGidAndFlags]); if (currentXmlTileIndex < layer.NumberOfTiles) { layer.TileGIDAndFlags[currentXmlTileIndex++] = CCTileMapFileEncodedTileFlags.DecodeGidAndFlags(gidAndFlags); } } else { int tilesetCount = Tilesets != null ? Tilesets.Count : 0; CCTileSetInfo info = tilesetCount > 0 ? Tilesets[tilesetCount - 1] : null; var dict = new Dictionary <string, string>(); ParentGID = (short)(info.FirstGid + short.Parse(currentAttributeDict[TileElementId])); TileProperties.Add(ParentGID, dict); currentParentElement = CCTileMapProperty.Tile; } }
void ParseDataEndElement() { byte[] encoded = null; if ((tileDataCompressionType & CCTileDataCompressionType.Base64) != 0) { storingCharacters = false; int layersCount = Layers != null ? Layers.Count : 0; CCTileLayerInfo layer = layersCount > 0 ? Layers[layersCount - 1] : null; if ((tileDataCompressionType & (CCTileDataCompressionType.Gzip | CCTileDataCompressionType.Zlib)) != 0) { if ((tileDataCompressionType & CCTileDataCompressionType.Gzip) != 0) { try { encoded = ZipUtils.Inflate(new MemoryStream(currentString), ZipUtils.CompressionFormat.Gzip); } catch (Exception ex) { CCLog.Log("failed to decompress embedded data object in TMX file."); CCLog.Log(ex.ToString()); } } if ((tileDataCompressionType & CCTileDataCompressionType.Zlib) != 0) { encoded = ZipUtils.Inflate(new MemoryStream(currentString), ZipUtils.CompressionFormat.Zlib); } } else { encoded = currentString; } for (int i = 0; i < layer.TileGIDAndFlags.Length; i++) { int i4 = i * 4; uint gidAndFlags = (uint)( encoded[i4] | encoded[i4 + 1] << 8 | encoded[i4 + 2] << 16 | encoded[i4 + 3] << 24); layer.TileGIDAndFlags[i] = CCTileMapFileEncodedTileFlags.DecodeGidAndFlags(gidAndFlags); } currentString = null; } else if ((tileDataCompressionType & CCTileDataCompressionType.None) != 0) { currentXmlTileIndex = 0; } }
void ParseDataEndElement() { byte[] encoded = null; if ((tileDataCompressionType & CCTileDataCompressionType.Base64) != 0) { storingCharacters = false; int layersCount = Layers != null ? Layers.Count : 0; CCTileLayerInfo layer = layersCount > 0 ? Layers[layersCount - 1] : null; if ((tileDataCompressionType & (CCTileDataCompressionType.Gzip | CCTileDataCompressionType.Zlib)) != 0) { if ((tileDataCompressionType & CCTileDataCompressionType.Gzip) != 0) { try { encoded = ZipUtils.Inflate(new MemoryStream(currentString), ZipUtils.CompressionFormat.Gzip); } catch (Exception ex) { CCLog.Log("failed to decompress embedded data object in TMX file."); CCLog.Log(ex.ToString()); } } if ((tileDataCompressionType & CCTileDataCompressionType.Zlib) != 0) { encoded = ZipUtils.Inflate(new MemoryStream(currentString), ZipUtils.CompressionFormat.Zlib); } } else { encoded = currentString; } // encoded could be null because the compressed data could not be decompressed if (encoded != null) { for (int i = 0; i < layer.TileGIDAndFlags.Length; i++) { int i4 = i * 4; uint gidAndFlags = (uint)( (uint)encoded[i4] | (uint)encoded[(int)(i4 + 1)] << 8 | (uint)encoded[(int)(i4 + 2)] << 16 | (uint)encoded[(int)(i4 + 3)] << 24); layer.TileGIDAndFlags[i] = CCTileMapFileEncodedTileFlags.DecodeGidAndFlags(gidAndFlags); } } currentString = null; } else if (tileDataCompressionType == CCTileDataCompressionType.Csv) { storingCharacters = false; int layersCount = Layers != null ? Layers.Count : 0; CCTileLayerInfo layer = layersCount > 0 ? Layers[layersCount - 1] : null; var str = System.Text.Encoding.UTF8.GetString(currentString, 0, currentString.Length).Split(','); for (int i = 0; i < layer.TileGIDAndFlags.Length; i++) { uint gidAndFlags = uint.Parse(str[i]); layer.TileGIDAndFlags[i] = CCTileMapFileEncodedTileFlags.DecodeGidAndFlags(gidAndFlags); } currentString = null; } else if ((tileDataCompressionType & CCTileDataCompressionType.None) != 0) { currentXmlTileIndex = 0; } }