nguhmap/devscripts/generate_tiles.ts
2025-09-15 15:44:59 +02:00

30 lines
1.2 KiB
TypeScript

import { $, sleep, spawn } from "bun";
let path = process.argv[2];
let cur_procs : number = 0;
const max_procs = (process.argv.length >= 4 && process.argv[3] != undefined) ? +process.argv[3] : 8
await $`mkdir -p /tmp/nguhmap`
for (let zoomlevel = 0; zoomlevel <= 4; ++zoomlevel) {
let size = 1024 << zoomlevel
console.log(`Resizing image for zoomlevel ${zoomlevel}: ${size}x${size}`)
await $`magick ${path} -resize ${size}x${size} /tmp/nguhmap/${zoomlevel - 4}.png`
let file = `/tmp/nguhmap/${zoomlevel - 4}`
console.log(`Cutting tiles for zoomlevel ${zoomlevel - 4}`)
await $`mkdir -p src/tiles/${zoomlevel - 4}`
for (let rx = 0; rx < 1 << (zoomlevel + 1); rx++) {
for (let ry = 0; ry < 1 << (zoomlevel + 1) ; ry++) {
while (cur_procs >= max_procs) {await sleep(200)}
cur_procs++
console.log(`region: ${rx - (1 << zoomlevel)}/${ry - (1 << zoomlevel)}`)
spawn(
[`magick`, `${file}.png`, `-crop`, `512x512+${rx*512}+${ry*512}`, `src/tiles/${zoomlevel - 4}/${rx - (1 << zoomlevel)}_${ry - (1 << zoomlevel)}.png`],
{
onExit: () => {cur_procs--}
})
}
}
}
while (cur_procs > 0) {await sleep(1000)}
await $`rm -rf /tmp/nguhmap`