mapslice
Version:
Slices a given image into tiles to be used for a interactive map display. (including command-line tool)
35 lines (33 loc) • 1.26 kB
JavaScript
const mkdirp = require('mkdirp')
const path = require('path')
const maybeAbort = require('./util/maybeAbort')
const abortDisposers = require('./util/abortDisposers')
module.exports = async function processLevel (options, level, levelFile) {
const parentDir = path.dirname(levelFile)
try {
await mkdirp(parentDir)
} catch (cause) {
throw Object.assign(new Error('Can not create parent directory'), { code: 'MPARENTLEVEL', cause, parentDir })
}
maybeAbort(options.signal)
const drawCommand = `image Over ${level.x},${level.y} ${level.width},${level.height} '${options.file}'`
const image = options.gm(level.size, level.size, options.background).options({ disposers: abortDisposers(options.signal) }).draw(drawCommand)
if (typeof options.bitdepth === 'number') {
image.bitdepth(options.bitdepth)
}
if (typeof options.dither === 'boolean') {
image.dither(options.dither)
}
if (typeof options.colors === 'number') {
image.colors(options.colors)
}
return await new Promise((resolve, reject) => {
image.write(levelFile, cause => {
if (cause) {
return reject(Object.assign('Cant create level file', { code: 'MPROCLEV', cause, levelFile }))
}
resolve(levelFile)
})
})
}