From 39eec462418452de4d29c4480dca12453b65e602 Mon Sep 17 00:00:00 2001 From: Christopher Monsanto Date: Sat, 9 May 2020 06:04:47 -0400 Subject: [PATCH] tools/ps-sheet -> tools/sheet, take js sheet spec as arg --- Tupfile.lua | 4 +-- .../data-trainers.js => ps-trainers.sheet.mjs | 21 +++++++++++++- tools/ps-sheet/index.js | 29 ------------------- tools/sheet/index.js | 25 ++++++++++++++++ tools/{ps-sheet => sheet}/package.json | 0 5 files changed, 47 insertions(+), 32 deletions(-) rename tools/ps-sheet/data-trainers.js => ps-trainers.sheet.mjs (93%) delete mode 100644 tools/ps-sheet/index.js create mode 100644 tools/sheet/index.js rename tools/{ps-sheet => sheet}/package.json (100%) diff --git a/Tupfile.lua b/Tupfile.lua index 364b8b7e..e7fa5c5b 100644 --- a/Tupfile.lua +++ b/Tupfile.lua @@ -26,9 +26,9 @@ rule{ rule{ display="ps trainers sheet", - input={}, + input={"ps-trainers.sheet.mjs"}, command={ - "node tools/ps-sheet trainers src/canonical/trainers %o", + "node tools/sheet %f %o", compresspng{config="SPRITESHEET"} }, output={"build/ps/trainers-sheet.png"} diff --git a/tools/ps-sheet/data-trainers.js b/ps-trainers.sheet.mjs similarity index 93% rename from tools/ps-sheet/data-trainers.js rename to ps-trainers.sheet.mjs index a599f45b..f5fc7b49 100644 --- a/tools/ps-sheet/data-trainers.js +++ b/ps-trainers.sheet.mjs @@ -1,6 +1,11 @@ +import fs from 'fs'; +import path from 'path'; +import {fileURLToPath} from 'url'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + // Derived from pokemon-showdown-client/src/battle-dex-data.ts -export default { +const BattleAvatarNumbers = { 1: 'lucas', 2: 'dawn', 3: 'youngster-gen4', @@ -297,3 +302,17 @@ export default { // Not in the existing trainer sheet... // 294: 'ash', } + + +const entries = []; + +for (const [num, id] of Object.entries(BattleAvatarNumbers)) { + entries[num - 1] = path.join(__dirname, "src/canonical/trainers", id + ".png"); +} + +export default { + width: 80, + height: 80, + tile: 16, + entries +}; diff --git a/tools/ps-sheet/index.js b/tools/ps-sheet/index.js deleted file mode 100644 index fc294c73..00000000 --- a/tools/ps-sheet/index.js +++ /dev/null @@ -1,29 +0,0 @@ - -import cp from 'child_process'; -import path from 'path'; -import BattleAvatarNumbers from './data-trainers.js'; - -const type = process.argv[2]; -const dir = process.argv[3]; -const dest = process.argv[4]; - -if (!dir || !dest) { - throw new Error(`node tools/ps-sheet `); -} - -if (type === 'trainers') { - // Guaranteed to be in the right order by V8, but iirc not by other JS engines. - const trainers = Object.values(BattleAvatarNumbers).map(t => path.join(dir, t) + ".png"); - - cp.execFileSync("montage", [ - ...trainers, - "-background", "transparent", - "-geometry", "80x80>", - "-gravity", "center", - "-tile", "16x", - "-depth", "8", - dest - ]); -} else { - throw new Error(`unknown type: ${type}`); -} diff --git a/tools/sheet/index.js b/tools/sheet/index.js new file mode 100644 index 00000000..8c13f3bd --- /dev/null +++ b/tools/sheet/index.js @@ -0,0 +1,25 @@ + +import cp from 'child_process'; +import path from 'path'; + +const sheetjs = process.argv[2]; +const dest = process.argv[3]; + +if (!sheetjs || !dest) { + throw new Error(`node tools/ps-sheet `); +} + +// Top-level await? +(async() => { + const {default: sheet} = await import(path.join(process.cwd(), sheetjs)); + + cp.execFileSync("montage", [ + ...sheet.entries, + "-background", "transparent", + "-geometry", `${sheet.width}x${sheet.height}>`, + "-gravity", "center", + "-tile", `${sheet.tile}x`, + "-depth", "8", + dest + ]); +})(); diff --git a/tools/ps-sheet/package.json b/tools/sheet/package.json similarity index 100% rename from tools/ps-sheet/package.json rename to tools/sheet/package.json