feat: roll out V2 art across all battle maps
This commit is contained in:
49
scripts/export-battle-map-v2-data.mjs
Normal file
49
scripts/export-battle-map-v2-data.mjs
Normal file
@@ -0,0 +1,49 @@
|
||||
import { mkdirSync, writeFileSync } from 'node:fs';
|
||||
import { dirname, join, sep } from 'node:path';
|
||||
import { createServer } from 'vite';
|
||||
|
||||
const outputPath = process.argv[2] ?? join('tmp', 'battle-map-v2-runtime-data.json');
|
||||
const battleAssetMarker = '/src/assets/images/battle/';
|
||||
|
||||
const server = await createServer({
|
||||
logLevel: 'error',
|
||||
server: { middlewareMode: true },
|
||||
appType: 'custom'
|
||||
});
|
||||
|
||||
try {
|
||||
const { battleScenarios } = await server.ssrLoadModule('/src/game/data/battles.ts');
|
||||
const { battleMapAssets } = await server.ssrLoadModule('/src/game/data/battleMapAssets.ts');
|
||||
|
||||
const battles = Object.values(battleScenarios).map((scenario, index) => {
|
||||
const assetUrl = battleMapAssets[scenario.mapTextureKey];
|
||||
const markerIndex = typeof assetUrl === 'string' ? assetUrl.indexOf(battleAssetMarker) : -1;
|
||||
if (markerIndex < 0) {
|
||||
throw new Error(`${scenario.id}: cannot resolve battle map asset URL ${JSON.stringify(assetUrl)}`);
|
||||
}
|
||||
|
||||
const fileName = assetUrl.slice(markerIndex + battleAssetMarker.length);
|
||||
return {
|
||||
number: index + 1,
|
||||
id: scenario.id,
|
||||
title: scenario.title,
|
||||
mapTextureKey: scenario.mapTextureKey,
|
||||
assetPath: join('src', 'assets', 'images', 'battle', fileName).split(sep).join('/'),
|
||||
width: scenario.map.width,
|
||||
height: scenario.map.height,
|
||||
terrain: scenario.map.terrain,
|
||||
units: scenario.units.map((unit) => ({
|
||||
id: unit.id,
|
||||
faction: unit.faction,
|
||||
x: unit.x,
|
||||
y: unit.y
|
||||
}))
|
||||
};
|
||||
});
|
||||
|
||||
mkdirSync(dirname(outputPath), { recursive: true });
|
||||
writeFileSync(outputPath, `${JSON.stringify({ generatedAt: new Date().toISOString(), battles }, null, 2)}\n`, 'utf8');
|
||||
console.log(`Wrote ${outputPath} with ${battles.length} runtime battle maps.`);
|
||||
} finally {
|
||||
await server.close();
|
||||
}
|
||||
Reference in New Issue
Block a user