patchwork-mapconverter
Version:
Executable wrapper for https://github.com/ChiefOfGxBxL/WC3MapTranslator
73 lines (70 loc) • 6.06 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TerrainChunkifier = void 0;
const FormatConverters_1 = require("../converter/formats/FormatConverters");
const LoggerFactory_1 = require("../logging/LoggerFactory");
const WriteAndCreatePath_1 = require("../util/WriteAndCreatePath");
const EnhancementManager_1 = __importDefault(require("./EnhancementManager"));
const log = LoggerFactory_1.LoggerFactory.createLogger('TerrainChunkifier');
let asyncCounter = 0;
async function writeData(data, output) {
const asyncLog = log.getSubLogger({ name: `${asyncCounter++}` });
asyncLog.info('Writing to', output);
await (0, WriteAndCreatePath_1.WriteAndCreatePath)(output, FormatConverters_1.FormatConverters[EnhancementManager_1.default.mapDataExtension].stringify(data));
log.info('Finished writing', output);
}
const TerrainChunkifier = {
chunkifierTerrain: async function (terrain, doodads, specialDoodads, units, regions, cameras, chunkSize) {
const tasks = [];
const offsetX = terrain.map.offsetX; // also minX
const offsetY = terrain.map.offsetY; // also minY
const sizeX = terrain.map.sizeX;
const sizeY = terrain.map.sizeY;
const chunksX = sizeX / chunkSize;
const chunksY = sizeY / chunkSize;
tasks.push(writeData({
tileset: terrain.tileset,
customTileset: terrain.customTileset,
tilePalette: terrain.tilePalette,
cliffTilePalette: terrain.cliffTilePalette,
map: terrain.map
}, '/terrain/data.json'));
// problem: leftover
// Problem: offset chunks?
// Problem: differntly sized chunks:
// Problem: use rects as chunks? - overlapping rects...
// Is this where I should use an octotree?
for (let i = 0; i < chunksX; i++) {
for (let j = 0; j < chunksY; j++) {
for (let y = 0; y < chunkSize; y++) {
for (let x = 0; x < chunkSize; x++) {
}
}
}
}
// Terrain json starts from top-left, but let's process from bottom-left
for (let i = sizeY; i >= 0; i--) {
for (let j = 0; j <= sizeX; j++) {
terrain.blight[i][j];
}
}
/**
* These 2 offsets are used in the scripts files, doodads and more.
The original (0,0) coordinate is at the bottom left of the map (looking from the top), but it's easier to work with (0,0) in the middle of the map.
These offsets are:
-1 * (Mx - 1) * 128 / 2 and -1 * (My - 1) * 128 / 2
where:
(Width - 1) and (Height - 1) are the width and the height of the map in tiles 128 is the size of a tile on the map
/ 2 because we don't want the length, but the middle.
-1 * because we are "translating" the centre of the map, not giving it's new coordinates
*/
{
await Promise.all(tasks);
}
}
};
exports.TerrainChunkifier = TerrainChunkifier;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVycmFpbkNodW5raWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5oYW5jZW1lbnRzL1RlcnJhaW5DaHVua2lmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRFQUF3RTtBQUN4RSw0REFBd0Q7QUFDeEQsbUVBQStEO0FBSS9ELDhFQUFxRDtBQUVyRCxNQUFNLEdBQUcsR0FBRyw2QkFBYSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0FBRTNELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQTtBQUNwQixLQUFLLFVBQVUsU0FBUyxDQUFFLElBQWEsRUFBRSxNQUFjO0lBQ3JELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNoRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNuQyxNQUFNLElBQUEsdUNBQWtCLEVBQUMsTUFBTSxFQUFFLG1DQUFnQixDQUFDLDRCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDdkcsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUN0QyxDQUFDO0FBRUQsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixpQkFBaUIsRUFBRSxLQUFLLFdBQVcsT0FBZ0IsRUFBRSxPQUFpQixFQUFFLGNBQStCLEVBQUUsS0FBYSxFQUFFLE9BQWlCLEVBQUUsT0FBaUIsRUFBRSxTQUFrQjtRQUM5SyxNQUFNLEtBQUssR0FBeUIsRUFBRSxDQUFBO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFBLENBQUMsWUFBWTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQSxDQUFDLFlBQVk7UUFDaEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUE7UUFDL0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUE7UUFDL0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQTtRQUNqQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFBO1FBRWpDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ25CLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDcEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7WUFDMUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1NBQ0ssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUE7UUFFL0Msb0JBQW9CO1FBQ3BCLDBCQUEwQjtRQUMxQixvQ0FBb0M7UUFDcEMsdURBQXVEO1FBQ3ZELDBDQUEwQztRQUUxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFFckMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCx3RUFBd0U7UUFDeEUsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVEOzs7Ozs7Ozs7Ozs7ZUFZTztRQUNQLENBQUM7WUFBQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRixDQUFBO0FBRVEsOENBQWlCIn0=