feat: optimized assets

This commit is contained in:
TrèsAbhi committed 2024-01-20 22:11:56 -06:00
1 parent 00244846cb
commit 7669c2d76b
13 files changed
+75 -78

No files matched your search

+2
View File
@@ -6,6 +6,7 @@
"aeson", "aeson",
"alphatest", "alphatest",
"apcr", "apcr",
"artefacts",
"atgm", "atgm",
"AYUV", "AYUV",
"bepaint", "bepaint",
@@ -106,6 +107,7 @@
"texconv", "texconv",
"TEXCOORD", "TEXCOORD",
"tresabhi", "tresabhi",
"tungstentip",
"TYPELESS", "TYPELESS",
"ubjson", "ubjson",
"Unicum", "Unicum",
+1 -1
View File
@@ -9,7 +9,7 @@
"build:website": "next build", "build:website": "next build",
"build:docs": "vitepress build docs", "build:docs": "vitepress build docs",
"build:ratingsleaderboard": "vite-node --script scripts/buildRatingsLeaderboard", "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:test": "vite-node --script scripts/buildTest",
"build:ratingsplot": "vite-node --script scripts/buildRatingsPlot", "build:ratingsplot": "vite-node --script scripts/buildRatingsPlot",
"dev:bot": "yarn build:bot && yarn start:bot", "dev:bot": "yarn build:bot && yarn start:bot",
+1 -1
View File
@@ -25,5 +25,5 @@ export async function circleFlags(production: boolean) {
}), }),
); );
await commitAssets('circle flags', changes, production); commitAssets('circle flags', changes, production);
} }
+1 -1
View File
@@ -89,5 +89,5 @@ export async function buildConsumableIcons(production: boolean) {
}), }),
); );
await commitAssets('consumable icons', changes, production); commitAssets('consumable icons', changes, production);
} }
+1 -1
View File
@@ -675,7 +675,7 @@ export async function buildDefinitions(production: boolean) {
}); });
}); });
await commitAssets( commitAssets(
'definitions', 'definitions',
[ [
{ {
+1 -1
View File
@@ -88,5 +88,5 @@ export async function equipmentIcons(production: boolean) {
), ),
); );
await commitAssets('equipment icons', changes, production); commitAssets('equipment icons', changes, production);
} }
+25 -25
View File
@@ -22,42 +22,42 @@ const production = argv.includes('--production');
if (!targets && !allTargets) throw new Error('No target(s) specified'); 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')) { if (allTargets || targets?.includes('tankModels')) {
await buildTankModels(production); 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')) { if (allTargets || targets?.includes('shellIcons')) {
await buildShellIcons(production); buildShellIcons(production);
} }
if (allTargets || targets?.includes('moduleIcons')) { if (allTargets || targets?.includes('moduleIcons')) {
await buildModuleIcons(production); buildModuleIcons(production);
} }
if (allTargets || targets?.includes('tankArmor')) {
await buildTankArmors(production);
}
if (allTargets || targets?.includes('equipmentIcons')) { if (allTargets || targets?.includes('equipmentIcons')) {
await equipmentIcons(production); equipmentIcons(production);
} }
if (allTargets || targets?.includes('consumableIcons')) { if (allTargets || targets?.includes('consumableIcons')) {
await buildConsumableIcons(production); buildConsumableIcons(production);
} }
+1 -1
View File
@@ -28,5 +28,5 @@ export async function buildModuleIcons(production: boolean) {
}), }),
); );
await commitAssets('module icons', changes, production); commitAssets('module icons', changes, production);
} }
+1 -1
View File
@@ -27,5 +27,5 @@ export async function buildScratchedFlags(production: boolean) {
}), }),
); );
await commitAssets('scratched flags', changes, production); commitAssets('scratched flags', changes, production);
} }
+1 -1
View File
@@ -45,5 +45,5 @@ export async function buildShellIcons(production: boolean) {
}), }),
); );
await commitAssets('shell icons', changes, production); commitAssets('shell icons', changes, production);
} }
+1 -3
View File
@@ -19,8 +19,6 @@ export async function buildTankArmors(production: boolean) {
await Promise.all( await Promise.all(
nations.map(async (nation) => { nations.map(async (nation) => {
if (nation !== 'germany') return;
const tanks = await readXMLDVPL<{ root: VehicleDefinitionList }>( const tanks = await readXMLDVPL<{ root: VehicleDefinitionList }>(
`${DATA}/${POI.vehicleDefinitions}/${nation}/list.xml.dvpl`, `${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);
} }
+1 -1
View File
@@ -65,5 +65,5 @@ export async function buildTankIcons(production: boolean) {
}), }),
); );
await commitAssets('tank icons', changes, production); commitAssets('tank icons', changes, production);
} }
+38 -41
View File
@@ -18,56 +18,53 @@ interface VehicleCustomization {
export async function buildTankModels(production: boolean) { export async function buildTankModels(production: boolean) {
console.log('Building tank models...'); console.log('Building tank models...');
const changes: FileChange[] = [];
const nodeIO = new NodeIO(); const nodeIO = new NodeIO();
const nations = await readdir(`${DATA}/${POI.vehicleDefinitions}`).then( const nations = await readdir(`${DATA}/${POI.vehicleDefinitions}`).then(
(nations) => nations.filter((nation) => nation !== 'common'), (nations) => nations.filter((nation) => nation !== 'common'),
); );
await Promise.all( for (const nationIndex in nations) {
nations.map(async (nation) => { const changes: FileChange[] = [];
if (nation !== 'germany') return; 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 }>( await Promise.all(
`${DATA}/${POI.vehicleDefinitions}/${nation}/list.xml.dvpl`, Object.entries(tanks.root).map(async ([tankKey, tank]) => {
); if (tankKey.includes('tutorial_bot')) return;
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( const id = toUniqueId(nation, tank.id);
Object.entries(tanks.root).map(async ([tankKey, tank]) => {
if (tankKey.includes('tutorial_bot')) return;
const id = toUniqueId(nation, tank.id); console.log(`Building model ${id} @ ${nation}/${tankKey}`);
console.log(`Building model ${id} @ ${nation}/${tankKey}`); const parameters = await readYAMLDVPL<TankParameters>(
`${DATA}/${POI.tankParameters}/${nation}/${tankKey}.yaml.dvpl`,
);
const model = await extractModel(
DATA,
parameters.resourcesPath.blitzModelPath.replace(/\.sc2$/, ''),
baseColor,
);
const parameters = await readYAMLDVPL<TankParameters>( changes.push({
`${DATA}/${POI.tankParameters}/${nation}/${tankKey}.yaml.dvpl`, path: `3d/tanks/models/${id}.glb`,
); encoding: 'base64',
const model = await extractModel( content: Buffer.from(await nodeIO.writeBinary(model)).toString(
DATA, 'base64',
parameters.resourcesPath.blitzModelPath.replace(/\.sc2$/, ''), ),
baseColor, });
); }),
);
changes.push({ await commitAssets(`tank models ${nation}`, changes, production);
path: `3d/tanks/models/${id}.glb`, }
encoding: 'base64',
content: Buffer.from(await nodeIO.writeBinary(model)).toString(
'base64',
),
});
}),
);
}),
);
await commitAssets('tank models', changes, production);
} }