Example #1
0
        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;
            }
        }
Example #2
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;
                }

                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;
            }
        }
Example #3
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;
            }
        }