Files
card_game/tools/scan-card-assets.mjs

38 lines
1.2 KiB
JavaScript

import fs from "node:fs";
import path from "node:path";
const root = process.cwd();
const cardsRoot = path.join(root, "assets", "cards");
const manifestPath = path.join(cardsRoot, "card-manifest.json");
const availablePath = path.join(cardsRoot, "available-assets.json");
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
const assets = [];
for (const character of manifest.characters) {
for (const art of character.art) {
const absolute = path.join(root, art.path);
if (!fs.existsSync(absolute)) continue;
const stat = fs.statSync(absolute);
assets.push({
characterId: character.id,
damageStage: art.damageStage,
path: art.path.replaceAll("\\", "/"),
bytes: stat.size,
updatedAt: stat.mtime.toISOString(),
});
}
}
const payload = {
schemaVersion: 1,
generatedAt: new Date().toISOString(),
expectedImageCount: manifest.expectedImageCount,
completedImageCount: assets.length,
completedCharacterCount: new Set(assets.map((asset) => asset.characterId)).size,
assets,
};
fs.writeFileSync(availablePath, JSON.stringify(payload, null, 2), "utf8");
console.log(JSON.stringify(payload, null, 2));