UNPKG

ts-tiled-converter

Version:

Typescript library to convert tiled map to Studio map

51 lines 2.57 kB
"use strict"; 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