overdrive_that_matters/shapegen.js
2022-05-16 18:08:28 +07:00

62 lines
1.5 KiB
JavaScript

// генерирует код для форм блоков из json моделей
const fs = require('fs')
const root_main = './src/main/resources/assets/overdrive_that_matters/models/block/'
const root_datagen = './src/data/resources/assets/overdrive_that_matters/models/block/'
const args = process.argv.slice(2)
if (args.length == 0) {
console.error('No model(s) names specified.')
process.exit(2)
}
const handle = fs.openSync('./shapegen_output.java', 'w')
for (const model of args) {
fs.writeSync(handle, 'public static final BlockShape ' + model.toUpperCase() + ' = new BlockShape(\n')
let readData
try {
readData = fs.readFileSync(root_main + model + '.json', {encoding: 'utf-8'})
} catch(err1) {
try {
readData = fs.readFileSync(root_datagen + model + '.json', {encoding: 'utf-8'})
} catch(err2) {
console.error('Unable to read model file in either of locations')
console.error(err1)
console.error(err2)
process.exit(1)
}
}
const obj = JSON.parse(readData)
let first = true
for (const elementID in obj.elements) {
const element = obj.elements[elementID]
if (element.rotation && element.rotation.angle != 0)
continue;
const from = element.from
const to = element.to
if (first) {
first = false
} else {
fs.writeSync(handle, ',\n')
}
fs.writeSync(handle, `\tnew SimpleCuboid(${from[0] / 16}d, ${from[1] / 16}d, ${from[2] / 16}d, ${to[0] / 16}d, ${to[1] / 16}d, ${to[2] / 16}d)`)
}
console.log(`Parsed and generated shape of ${model}.json`)
fs.writeSync(handle, '\n);\n\n')
}
fs.closeSync(handle)