Пример #1
0
        ///<summary>
        ///Decode, decompress, and reorder rows of global tile IDs
        ///</summary>
        static Layer.Chunk ParseChunk(
            string encoding,
            string compression,
            string data,
            int width,
            string orientation
            )
        {
            // Decode
            byte[] input;
            switch (encoding)
            {
            case "base64": input = Convert.FromBase64String(data); break;

            default: throw new NotImplementedException("Encoding: " + (encoding ?? "xml"));
            }

            // Decompress
            byte[] output;
            switch (compression)
            {
            case null:   output = input;             break;

            case "gzip": output = CompressionHelper.DecompressGZip(input); break;

            case "zlib": output = CompressionHelper.DecompressZlib(input); break;

            default: throw new NotImplementedException("Compression: " + compression);
            }

            // Parse bytes as uint32 global IDs, reordered according to cell layout.
            var gids = new uint[output.Length / 4];

            Buffer.BlockCopy(output, 0, gids, 0, output.Length);
            switch (orientation)
            {
            case "orthogonal": return(new Layer.Chunk {
                    gids = ArrayHelper.Reverse(gids, stride: width)
                });

            case "isometric": return(new Layer.Chunk {
                    gids = ArrayHelper.Swizzle(gids, stride: width).Reverse().ToArray()
                });

            case "hexagonal": return(new Layer.Chunk {
                    gids = gids
                });

            default: throw new NotImplementedException($"Orientation: {orientation}");
            }
        }
Пример #2
0
        ///<summary>Decode, decompress, and reorder rows of global tile IDs</summary>
        uint[] ParseGIDs(string encoding, string compression, string data, int width, GridLayout.CellLayout layout)
        {
            // Decoding
            byte[] input;
            switch (encoding)
            {
            case "base64": input = Convert.FromBase64String(data); break;

            default: throw new NotImplementedException("Encoding: " + (encoding ?? "xml"));
            }

            // Decompression
            byte[] output;
            switch (compression)
            {
            case null:   output = input;             break;

            case "gzip": output = CompressionHelper.DecompressGZip(input); break;

            case "zlib": output = CompressionHelper.DecompressZlib(input); break;

            default: throw new NotImplementedException("Compression: " + compression);
            }

            // Parse bytes as uint32 gids
            var gids = new uint[output.Length / 4];

            Buffer.BlockCopy(output, 0, gids, 0, output.Length);
            if (layout == GridLayout.CellLayout.Rectangle)
            {
                return(ArrayHelper.Reverse(gids, stride: width));
            }
            else if (layout == GridLayout.CellLayout.Isometric)
            {
                return(ArrayHelper.Swizzle(gids, stride: width).Reverse().ToArray());
            }
            else
            {
                return(gids);
            }
        }