ts-tiled-converter
Version:
Typescript library to convert tiled map to Studio map
51 lines • 2.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SPECIAL_LAYER_TILESETS = exports.splitSpecialAndRegularLayers = void 0;
var objects_1 = require("../tiledXML/objects");
var util_1 = require("../util");
var splitSpecialAndRegularLayers = function (map, layers) {
try {
return {
regularLayers: layers.filter(filterRegularLayers),
specialLayers: getSpecialLayerAsMetaLayer(map, layers),
};
}
catch (error) {
return (0, util_1.toError)(error);
}
};
exports.splitSpecialAndRegularLayers = splitSpecialAndRegularLayers;
exports.SPECIAL_LAYER_TILESETS = {
passages: 'passages.tsx',
systemtags: 'systemtags.tsx',
systemtags_bridge1: 'systemtags.tsx',
systemtags_bridge2: 'systemtags.tsx',
terrain_tag: 'terrain_tag.tsx',
};
var TILESET_GID_OFFSET = {
'systemtags.tsx': -384, // 0 must be equal to 384: (gid+1) - (gid+offset) = (885) - (884-384) = 885 - 884 + 384 = 1 + 384 = 385
};
var findTilesetGID = function (layer, tilesets) {
var tilesetName = exports.SPECIAL_LAYER_TILESETS[layer.name];
if (!tilesetName)
return new Error("Failed to find tileset name for special layer ".concat(layer.name));
var tileset = tilesets.find(function (tileset) { return (0, objects_1.getXMLProperties)(tileset).source.endsWith(tilesetName); });
if (!tileset)
return new Error("Failed to find tileset: ".concat(tilesetName));
return (0, objects_1.getXMLProperties)(tileset).firstGlobalId + (TILESET_GID_OFFSET[tilesetName] || 0);
};
var filterSpecialLayers = function (layer) { return layer.name in exports.SPECIAL_LAYER_TILESETS; };
var filterRegularLayers = function (layer) { return !(layer.name in exports.SPECIAL_LAYER_TILESETS); };
var tilesToMetadata = function (gid) { return function (tile) { return tile ? tile.globalId - gid : 0; }; };
var mapSpecialLayerToMetadata = function (_a, gid) {
var name = _a.name, layer = _a.layer;
return ({ name: name, layer: layer.map(tilesToMetadata(gid)) });
};
var getSpecialLayerAsMetaLayer = function (_a, layers) {
var map = _a.map;
var preSpecialLayers = layers.filter(filterSpecialLayers);
var tilesets = map.filter(util_1.filterTileset);
var specialLayerGID = preSpecialLayers.map(function (layer) { return (0, util_1.throwIfError)(findTilesetGID(layer, tilesets)); });
return preSpecialLayers.map(function (layer, index) { return mapSpecialLayerToMetadata(layer, specialLayerGID[index] || 0); });
};
//# sourceMappingURL=splitSpecialAndRegularLayers.js.map