diff --git a/.vscode/settings.json b/.vscode/settings.json index 37a356287..8de5aaa43 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,6 +6,7 @@ "aeson", "alphatest", "apcr", + "artefacts", "atgm", "AYUV", "bepaint", @@ -106,6 +107,7 @@ "texconv", "TEXCOORD", "tresabhi", + "tungstentip", "TYPELESS", "ubjson", "Unicum", diff --git a/package.json b/package.json index 394fa039c..f1a22a69a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build:website": "next build", "build:docs": "vitepress build docs", "build:ratingsleaderboard": "vite-node --script scripts/buildRatingsLeaderboard", - "build:assets": "vite-node --script scripts/buildAssets/index", + "build:assets": "vite-node --max_old_space_size=16384 --script scripts/buildAssets/index", "build:test": "vite-node --script scripts/buildTest", "build:ratingsplot": "vite-node --script scripts/buildRatingsPlot", "dev:bot": "yarn build:bot && yarn start:bot", diff --git a/scripts/buildAssets/circleFlags.ts b/scripts/buildAssets/circleFlags.ts index d293f2bb7..ec178692f 100644 --- a/scripts/buildAssets/circleFlags.ts +++ b/scripts/buildAssets/circleFlags.ts @@ -25,5 +25,5 @@ export async function circleFlags(production: boolean) { }), ); - await commitAssets('circle flags', changes, production); + commitAssets('circle flags', changes, production); } diff --git a/scripts/buildAssets/consumableIcons.ts b/scripts/buildAssets/consumableIcons.ts index f65719abd..f34966708 100644 --- a/scripts/buildAssets/consumableIcons.ts +++ b/scripts/buildAssets/consumableIcons.ts @@ -89,5 +89,5 @@ export async function buildConsumableIcons(production: boolean) { }), ); - await commitAssets('consumable icons', changes, production); + commitAssets('consumable icons', changes, production); } diff --git a/scripts/buildAssets/definitions.ts b/scripts/buildAssets/definitions.ts index 0041d08c8..647c7909d 100644 --- a/scripts/buildAssets/definitions.ts +++ b/scripts/buildAssets/definitions.ts @@ -675,7 +675,7 @@ export async function buildDefinitions(production: boolean) { }); }); - await commitAssets( + commitAssets( 'definitions', [ { diff --git a/scripts/buildAssets/equipmentIcons.ts b/scripts/buildAssets/equipmentIcons.ts index d0a92b1e7..95abc438b 100644 --- a/scripts/buildAssets/equipmentIcons.ts +++ b/scripts/buildAssets/equipmentIcons.ts @@ -88,5 +88,5 @@ export async function equipmentIcons(production: boolean) { ), ); - await commitAssets('equipment icons', changes, production); + commitAssets('equipment icons', changes, production); } diff --git a/scripts/buildAssets/index.ts b/scripts/buildAssets/index.ts index 1327e37a0..eca0251b4 100644 --- a/scripts/buildAssets/index.ts +++ b/scripts/buildAssets/index.ts @@ -22,42 +22,42 @@ const production = argv.includes('--production'); if (!targets && !allTargets) throw new Error('No target(s) specified'); -if (allTargets || targets?.includes('definitions')) { - await buildDefinitions(production); -} - -if (allTargets || targets?.includes('tankIcons')) { - await buildTankIcons(production); -} - -if (allTargets || targets?.includes('scratchedFlags')) { - await buildScratchedFlags(production); -} - -if (allTargets || targets?.includes('circleFlags')) { - await circleFlags(production); -} - if (allTargets || targets?.includes('tankModels')) { await buildTankModels(production); } +// no need to await the rest... I have enough ram +if (allTargets || targets?.includes('tankArmor')) { + buildTankArmors(production); +} + +if (allTargets || targets?.includes('definitions')) { + buildDefinitions(production); +} + +if (allTargets || targets?.includes('tankIcons')) { + buildTankIcons(production); +} + +if (allTargets || targets?.includes('scratchedFlags')) { + buildScratchedFlags(production); +} + +if (allTargets || targets?.includes('circleFlags')) { + circleFlags(production); +} + if (allTargets || targets?.includes('shellIcons')) { - await buildShellIcons(production); + buildShellIcons(production); } if (allTargets || targets?.includes('moduleIcons')) { - await buildModuleIcons(production); + buildModuleIcons(production); } - -if (allTargets || targets?.includes('tankArmor')) { - await buildTankArmors(production); -} - if (allTargets || targets?.includes('equipmentIcons')) { - await equipmentIcons(production); + equipmentIcons(production); } if (allTargets || targets?.includes('consumableIcons')) { - await buildConsumableIcons(production); + buildConsumableIcons(production); } diff --git a/scripts/buildAssets/moduleIcons.ts b/scripts/buildAssets/moduleIcons.ts index 14a3feabf..10addb90a 100644 --- a/scripts/buildAssets/moduleIcons.ts +++ b/scripts/buildAssets/moduleIcons.ts @@ -28,5 +28,5 @@ export async function buildModuleIcons(production: boolean) { }), ); - await commitAssets('module icons', changes, production); + commitAssets('module icons', changes, production); } diff --git a/scripts/buildAssets/scratchedFlags.ts b/scripts/buildAssets/scratchedFlags.ts index a12beaabe..7f5497676 100644 --- a/scripts/buildAssets/scratchedFlags.ts +++ b/scripts/buildAssets/scratchedFlags.ts @@ -27,5 +27,5 @@ export async function buildScratchedFlags(production: boolean) { }), ); - await commitAssets('scratched flags', changes, production); + commitAssets('scratched flags', changes, production); } diff --git a/scripts/buildAssets/shellIcons.ts b/scripts/buildAssets/shellIcons.ts index e449ede11..826b0c858 100644 --- a/scripts/buildAssets/shellIcons.ts +++ b/scripts/buildAssets/shellIcons.ts @@ -45,5 +45,5 @@ export async function buildShellIcons(production: boolean) { }), ); - await commitAssets('shell icons', changes, production); + commitAssets('shell icons', changes, production); } diff --git a/scripts/buildAssets/tankArmors.ts b/scripts/buildAssets/tankArmors.ts index 7a930e251..75a7e99ef 100644 --- a/scripts/buildAssets/tankArmors.ts +++ b/scripts/buildAssets/tankArmors.ts @@ -19,8 +19,6 @@ export async function buildTankArmors(production: boolean) { await Promise.all( nations.map(async (nation) => { - if (nation !== 'germany') return; - const tanks = await readXMLDVPL<{ root: VehicleDefinitionList }>( `${DATA}/${POI.vehicleDefinitions}/${nation}/list.xml.dvpl`, ); @@ -47,5 +45,5 @@ export async function buildTankArmors(production: boolean) { }), ); - await commitAssets('tank armor', changes, production); + commitAssets('tank armor', changes, production); } diff --git a/scripts/buildAssets/tankIcons.ts b/scripts/buildAssets/tankIcons.ts index fe28c27aa..6f473a73d 100644 --- a/scripts/buildAssets/tankIcons.ts +++ b/scripts/buildAssets/tankIcons.ts @@ -65,5 +65,5 @@ export async function buildTankIcons(production: boolean) { }), ); - await commitAssets('tank icons', changes, production); + commitAssets('tank icons', changes, production); } diff --git a/scripts/buildAssets/tankModels.ts b/scripts/buildAssets/tankModels.ts index 9a5636782..b6309a8cd 100644 --- a/scripts/buildAssets/tankModels.ts +++ b/scripts/buildAssets/tankModels.ts @@ -18,56 +18,53 @@ interface VehicleCustomization { export async function buildTankModels(production: boolean) { console.log('Building tank models...'); - const changes: FileChange[] = []; const nodeIO = new NodeIO(); const nations = await readdir(`${DATA}/${POI.vehicleDefinitions}`).then( (nations) => nations.filter((nation) => nation !== 'common'), ); - await Promise.all( - nations.map(async (nation) => { - if (nation !== 'germany') return; + for (const nationIndex in nations) { + const changes: FileChange[] = []; + const nation = nations[nationIndex]; + const tanks = await readXMLDVPL<{ root: VehicleDefinitionList }>( + `${DATA}/${POI.vehicleDefinitions}/${nation}/list.xml.dvpl`, + ); + const customization = await readXMLDVPL<{ root: VehicleCustomization }>( + `${DATA}/${POI.vehicleDefinitions}/${nation}/customization.xml.dvpl`, + ); + const baseColor = customization.root.armorColor + .split(' ') + .slice(0, 3) + .map(Number) + .map((channel) => channel / 255) as Vector3Tuple; - const tanks = await readXMLDVPL<{ root: VehicleDefinitionList }>( - `${DATA}/${POI.vehicleDefinitions}/${nation}/list.xml.dvpl`, - ); - const customization = await readXMLDVPL<{ root: VehicleCustomization }>( - `${DATA}/${POI.vehicleDefinitions}/${nation}/customization.xml.dvpl`, - ); - const baseColor = customization.root.armorColor - .split(' ') - .slice(0, 3) - .map(Number) - .map((channel) => channel / 255) as Vector3Tuple; + await Promise.all( + Object.entries(tanks.root).map(async ([tankKey, tank]) => { + if (tankKey.includes('tutorial_bot')) return; - await Promise.all( - Object.entries(tanks.root).map(async ([tankKey, tank]) => { - if (tankKey.includes('tutorial_bot')) return; + const id = toUniqueId(nation, tank.id); - const id = toUniqueId(nation, tank.id); + console.log(`Building model ${id} @ ${nation}/${tankKey}`); - console.log(`Building model ${id} @ ${nation}/${tankKey}`); + const parameters = await readYAMLDVPL( + `${DATA}/${POI.tankParameters}/${nation}/${tankKey}.yaml.dvpl`, + ); + const model = await extractModel( + DATA, + parameters.resourcesPath.blitzModelPath.replace(/\.sc2$/, ''), + baseColor, + ); - const parameters = await readYAMLDVPL( - `${DATA}/${POI.tankParameters}/${nation}/${tankKey}.yaml.dvpl`, - ); - const model = await extractModel( - DATA, - parameters.resourcesPath.blitzModelPath.replace(/\.sc2$/, ''), - baseColor, - ); + changes.push({ + path: `3d/tanks/models/${id}.glb`, + encoding: 'base64', + content: Buffer.from(await nodeIO.writeBinary(model)).toString( + 'base64', + ), + }); + }), + ); - changes.push({ - path: `3d/tanks/models/${id}.glb`, - encoding: 'base64', - content: Buffer.from(await nodeIO.writeBinary(model)).toString( - 'base64', - ), - }); - }), - ); - }), - ); - - await commitAssets('tank models', changes, production); + await commitAssets(`tank models ${nation}`, changes, production); + } }