Updating the assets
This commit is contained in:
56
scripts/tools/characters/sprite-generator.js
Normal file
56
scripts/tools/characters/sprite-generator.js
Normal file
@ -0,0 +1,56 @@
|
||||
const path = require('path');
|
||||
const { imageCreate, imageWrite, imageLoad, imageCopy } = require('./../../utils/image');
|
||||
const fs =require('fs');
|
||||
|
||||
// Where to crop
|
||||
const FACE_AREA = { x: 367, y: 256, width: 280, height: 280 };
|
||||
|
||||
// Where the images are stored
|
||||
const IMAGES_ROOT = path.join(...[
|
||||
'.',
|
||||
'assets',
|
||||
'characters',
|
||||
'penny',
|
||||
'sprites'
|
||||
]);
|
||||
|
||||
// Which image directories to crop
|
||||
const IMAGES_DIRECTORIES = [ 'eyebrows', 'eyes', 'mouths' ];
|
||||
|
||||
(async () => {
|
||||
// Load the base
|
||||
const base = await imageLoad(path.join(IMAGES_ROOT, 'dealer.png'));
|
||||
|
||||
let columnsMax = 0;
|
||||
for(let row = 0; row < IMAGES_DIRECTORIES.length; row++) {
|
||||
const dir = path.join(IMAGES_ROOT, IMAGES_DIRECTORIES[row]);
|
||||
const scan = fs.readdirSync(dir);
|
||||
columnsMax = Math.max(scan.length, columnsMax);
|
||||
}
|
||||
|
||||
// Create the output buffer
|
||||
const out = imageCreate(base.width+(columnsMax*FACE_AREA.width), base.height);
|
||||
|
||||
// Copy the base
|
||||
imageCopy(out, base, 0, 0);
|
||||
|
||||
// Now begin copying the children, row is defined by the directory
|
||||
for(let row = 0; row < IMAGES_DIRECTORIES.length; row++) {
|
||||
const dir = path.join(IMAGES_ROOT, IMAGES_DIRECTORIES[row]);
|
||||
const scan = fs.readdirSync(dir);
|
||||
|
||||
// Column defined by the file index
|
||||
for(let col = 0; col < scan.length; col++) {
|
||||
const img = await imageLoad(path.join(dir, scan[col]));
|
||||
console.log('Copying', scan[col]);
|
||||
|
||||
imageCopy(out, img,
|
||||
base.width+(col*FACE_AREA.width), FACE_AREA.height*row,
|
||||
FACE_AREA
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
await imageWrite(out, path.join(IMAGES_ROOT, 'sheet.png'));
|
||||
})().catch(console.error);
|
Reference in New Issue
Block a user