ts-tiled-converter
Version:
Typescript library to convert tiled map to Studio map
57 lines • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.layerToTiles = void 0;
var zlib_1 = require("zlib");
var objects_1 = require("../tiledXML/objects");
var layerToTiles = function (layer, cache) {
cache.set(0, null);
var data = decodeLayer(layer);
if (data instanceof Error)
return data;
return data.map(function (v) {
var tileData = cache.get(v);
if (tileData !== undefined)
return tileData;
var newTileData = {
globalId: v & 0x0fffffff,
transformId: (v >> 28) & 0xf,
};
cache.set(v, newTileData);
return newTileData;
});
};
exports.layerToTiles = layerToTiles;
var decodeLayer = function (_a) {
var layer = _a.layer;
var data = layer.find(function (v) { return 'data' in v; });
if (!data)
return new Error('Failed to find data in layer');
if (!data.data[0] || !('rawData' in data.data[0]))
return new Error('Failed to find content in data layer');
var _b = (0, objects_1.getXMLProperties)(data), encoding = _b.encoding, compression = _b.compression;
if (encoding === 'csv')
return decodeCSVLayer(data);
if (encoding !== 'base64')
return new Error('Unsupported layer data encoding');
if (compression === 'gzip' || compression === 'zlib')
return decodeCompressedLayer(data);
if (compression !== 'zstd')
return decodeBuffer(Buffer.from(data.data[0].rawData, 'base64'));
return new Error('Unsupported layer data compression');
};
var decodeCSVLayer = function (_a) {
var data = _a.data;
return data[0].rawData.split(',').map(Number);
};
var decodeCompressedLayer = function (_a) {
var data = _a.data;
return decodeBuffer((0, zlib_1.unzipSync)(Buffer.from(data[0].rawData, 'base64')));
};
var decodeBuffer = function (buffer) {
var dwordLength = Math.floor(buffer.length / 4);
var returnArray = Array(dwordLength);
for (var i = 0; i < dwordLength; i++)
returnArray[i] = buffer.readUint32LE(i * 4);
return returnArray;
};
//# sourceMappingURL=layerToTiles.js.map