UNPKG

ts-tiled-converter

Version:

Typescript library to convert tiled map to Studio map

162 lines 8.52 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.compressLayersTile = void 0; var lodash_groupby_1 = __importDefault(require("lodash.groupby")); var ndSpace_1 = require("../ndSpace"); var compressLayersTile = function (tileIndex, regularLayers, layerWithCommands, cache) { var context = getContext(tileIndex, regularLayers, layerWithCommands); if (context.layers.length === 0) return []; var hasZ = context.layers.some(function (_a) { var z = _a.z; return z > 0; }); if (!hasZ) { // Compress tiles with no tiles on top (water case) => bottom => water => stuff on top of water return compressTilesWithNoZ(context, cache); } if (context.bridge1 || context.bridge2) { return compressTilesWithBridge(context, cache); } return compressTiles(context, cache); }; exports.compressLayersTile = compressLayersTile; var getContext = function (tileIndex, regularLayers, layerWithCommands) { var systemTag = layerWithCommands.systemTags[tileIndex] || 0; var bridge1 = layerWithCommands.systemTagsBridge1[tileIndex] || 0; var bridge2 = layerWithCommands.systemTagsBridge2[tileIndex] || 0; var passage = layerWithCommands.passages[tileIndex] || 0; var terrainTag = layerWithCommands.terrainTags[tileIndex] || 0; var layers = regularLayers.filter(function (layer) { return !!layer.layer[tileIndex]; }); var commands = layerWithCommands.commands; return { tileIndex: tileIndex, systemTag: systemTag !== 0 ? commands.systemTags.find(function (v) { return v.systemTag === systemTag; }) : undefined, bridge1: bridge1 !== 0 ? commands.systemTags.find(function (v) { return v.systemTag === bridge1; }) : undefined, bridge2: bridge2 !== 0 ? commands.systemTags.find(function (v) { return v.systemTag === bridge2; }) : undefined, terrainTag: terrainTag !== 0 ? commands.terrainTags.find(function (v) { return v.terrainTag === terrainTag; }) : undefined, passage: commands.passages.find(function (v) { return v.passage === passage; }), priorities: commands.priorities, layers: layers, }; }; var compressTilesWithNoZ = function (context, cache) { var tileIndex = context.tileIndex, layers = context.layers, passage = context.passage; var mapToTile = toTileByIndex(tileIndex); return [ layers.slice(0, -2).map(mapToTile), layers.slice(-2, -1).map(mapToTile), __spreadArray(__spreadArray([], layers.slice(-1).map(mapToTile), true), [context.systemTag, context.terrainTag, passage], false).filter(excludeUndefined), ] .filter(filterOutEmptyArrays) .map(mapToTileId(cache)); }; var GROUP_BY_Z = ['ground', 'bridge1Layer', 'bridge1Layer', 'bridge1Layer', 'bridge2Layer', 'bridge2Layer']; var compressTilesWithBridge = function (context, cache) { var tileIndex = context.tileIndex, layers = context.layers, systemTag = context.systemTag, terrainTag = context.terrainTag, passage = context.passage, bridge1 = context.bridge1, bridge2 = context.bridge2, priorities = context.priorities; var mapToTile = toTileByIndex(tileIndex); var _a = (0, lodash_groupby_1.default)(layers, function (_a) { var z = _a.z; return GROUP_BY_Z[z] || GROUP_BY_Z[5]; }), ground = _a.ground, bridge1Layer = _a.bridge1Layer, bridge2Layer = _a.bridge2Layer; var tileLayers = [ ground && ground.length !== 0 ? ground.map(mapToTile) : [mapToTile(layers[0])], bridge1Layer && bridge1Layer.length > 0 ? __spreadArray([priorities[3]], bridge1Layer.map(mapToTile), true) : [], bridge2Layer && bridge2Layer.length > 0 ? __spreadArray([priorities[5]], bridge2Layer.map(mapToTile), true) : [], ]; if (systemTag) tileLayers[0].push(systemTag); if (terrainTag) tileLayers[0].push(terrainTag); tileLayers[0].push(passage); if (bridge1 && tileLayers[1].length) tileLayers[1].push(bridge1); if (bridge2 && tileLayers[2].length) tileLayers[2].push(bridge2); return tileLayers.filter(filterOutEmptyArrays).map(mapToTileId(cache)); }; var GROUND = 'ground'; var PRIORITY_OVER_PLAYER = 'priorityOverPlayer'; var PRIORITY = 'priority'; var compressTiles = function (context, cache) { var tileIndex = context.tileIndex, layers = context.layers; var mapToTile = toTileByIndex(tileIndex); var _a = (0, lodash_groupby_1.default)(layers, function (_a) { var z = _a.z; return (z === 0 ? GROUND : z === 1 ? PRIORITY_OVER_PLAYER : PRIORITY); }), ground = _a.ground, priorityOverPlayer = _a.priorityOverPlayer, priority = _a.priority; var tileLayers = !ground || ground.length === 0 ? tileLayersWithNoGrounds(priorityOverPlayer, priority, context, mapToTile) : tileLayersWithGrounds(priorityOverPlayer, priority, ground, context, mapToTile); return tileLayers.filter(filterOutEmptyArrays).map(mapToTileId(cache)); }; var highestPriority = function (priority) { return Math.max.apply(Math, priority.map(function (_a) { var z = _a.z; return z; })); }; var tileLayersWithNoGrounds = function (priorityOverPlayer, priority, context, mapToTile) { var priorities = context.priorities; if (priorityOverPlayer && priorityOverPlayer.length > 0) { return [ getPriorityTileWithContext(mapToTile(priorityOverPlayer[0]), context), __spreadArray([priorities[1]], priorityOverPlayer.map(mapToTile), true), priority && priority.length > 0 ? __spreadArray([priorities[highestPriority(priority)] || priorities[5]], priority.map(mapToTile), true) : [], ]; } if (!priority || priority.length === 0) { // This condition is impossible in theory return [[{ globalId: 1, transformId: 0 }, context.systemTag, context.terrainTag, context.passage].filter(excludeUndefined)]; } return [ getPriorityTileWithContext(mapToTile(priority[0]), context), __spreadArray([priorities[highestPriority(priority)] || priorities[5]], priority.map(mapToTile), true), ]; }; var tileLayersWithGrounds = function (priorityOverPlayer, priority, ground, context, mapToTile) { var priorities = context.priorities; if (priorityOverPlayer && priorityOverPlayer.length > 0) { if (priority && priority.length > 0) { return [ getGroundTile(ground, context, mapToTile), __spreadArray([priorities[1]], priorityOverPlayer.map(mapToTile), true), __spreadArray([priorities[highestPriority(priority)] || priorities[5]], priority.map(mapToTile), true), ]; } return [ ground.slice(0, -1).map(mapToTile), getGroundTile(ground.slice(-1), context, mapToTile), __spreadArray([priorities[1]], priorityOverPlayer.map(mapToTile), true), ]; } return [ ground.slice(0, -1).map(mapToTile), getGroundTile(ground.slice(-1), context, mapToTile), priority && priority.length > 0 ? __spreadArray([priorities[highestPriority(priority)] || priorities[5]], priority.map(mapToTile), true) : [], ]; }; var getGroundTile = function (ground, context, mapToTile) { return __spreadArray(__spreadArray([], ground.map(mapToTile), true), [context.systemTag, context.terrainTag, context.passage], false).filter(excludeUndefined); }; var getPriorityTileWithContext = function (tile, context) { return [tile, context.systemTag, context.terrainTag, context.passage].filter(excludeUndefined); }; var toTileByIndex = function (tileIndex) { return function (layer) { return layer.layer[tileIndex]; }; }; var filterOutEmptyArrays = function (_a) { var length = _a.length; return length !== 0; }; var mapToTileId = function (cache) { return function (layer) { return (0, ndSpace_1.resolveNDSpaceId)(cache, layer); }; }; var excludeUndefined = function (v) { return v; }; //# sourceMappingURL=compressLayersTile.js.map