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`