diff --git a/scripts/buildAssets/circleFlags.ts b/scripts/buildAssets/circleFlags.ts index 72eb584b9..8828728e8 100644 --- a/scripts/buildAssets/circleFlags.ts +++ b/scripts/buildAssets/circleFlags.ts @@ -1,5 +1,6 @@ import { readdir } from 'fs/promises'; -import { readBase64DVPL } from '../../src/core/blitz/readBase64DVPL'; +import sharp from 'sharp'; +import { readDVPLFile } from '../../src/core/blitz/readDVPLFile'; import { commitAssets } from '../../src/core/blitzkit/commitAssets'; import { FileChange } from '../../src/core/blitzkit/commitMultipleFiles'; import { DATA, POI } from './constants'; @@ -14,7 +15,10 @@ export async function circleFlags(production: boolean) { !flag.endsWith('@2x.packed.webp.dvpl'), ) .map(async (flag) => { - const content = await readBase64DVPL(`${DATA}/${POI.flags}/${flag}`); + const image = sharp(await readDVPLFile(`${DATA}/${POI.flags}/${flag}`)); + const content = ( + await image.trim({ threshold: 100 }).toBuffer() + ).toString('base64'); const name = flag.match(/flag_profile-stat_(.+)\.packed\.webp/)![1]; return { diff --git a/scripts/buildAssets/definitions.ts b/scripts/buildAssets/definitions.ts index f92f3aa9b..83f4f83f3 100644 --- a/scripts/buildAssets/definitions.ts +++ b/scripts/buildAssets/definitions.ts @@ -353,11 +353,15 @@ export interface MapAlly { points: Array; } +interface AvailableNationsYaml { + available_nations: string[]; +} + const blitzShellKindToBlitzkit: Record = { - ARMOR_PIERCING: 'ap', - ARMOR_PIERCING_CR: 'ap_cr', - HIGH_EXPLOSIVE: 'he', - HOLLOW_CHARGE: 'hc', + ARMOR_PIERCING: ShellType.AP, + ARMOR_PIERCING_CR: ShellType.APCR, + HIGH_EXPLOSIVE: ShellType.HE, + HOLLOW_CHARGE: ShellType.HEAT, }; const missingStrings: Record = { '#artefacts:tungstentip/name': 'Tungsten Shells', @@ -378,6 +382,11 @@ export async function definitions(production: boolean) { .split('.') .slice(0, 3) .join('.'), + nations: ( + await readYAMLDVPL( + `${DATA}/available_nations.yaml.dvpl`, + ) + ).available_nations, }; const tankDefinitions: TankDefinitions = {}; const modelDefinitions: ModelDefinitions = {}; diff --git a/src/app/tools/tankopedia/page.tsx b/src/app/tools/tankopedia/page.tsx index 146c09ecc..396777a7e 100644 --- a/src/app/tools/tankopedia/page.tsx +++ b/src/app/tools/tankopedia/page.tsx @@ -15,27 +15,24 @@ import { Link } from '../../../components/Link'; import PageWrapper from '../../../components/PageWrapper'; import { TANK_CLASSES } from '../../../components/Tanks/components/Item/constants'; import { asset } from '../../../core/blitzkit/asset'; +import { gameDefinitions } from '../../../core/blitzkit/gameDefinitions'; import { - NATIONS, Tier, tanksDefinitionsArray, } from '../../../core/blitzkit/tankDefinitions'; import { TIER_ROMAN_NUMERALS } from '../../../core/blitzkit/tankDefinitions/constants'; import { tankIcon } from '../../../core/blitzkit/tankIcon'; -import strings from '../../../lang/en-US.json'; import { treeTypeOrder } from './components/TankSearch/constants'; export default function Page() { const awaitedTanksDefinitionsArray = use(tanksDefinitionsArray); - const awaitedNations = use(NATIONS); + const awaitedGameDefinitions = use(gameDefinitions); return ( - - - Class - + + Class - - Type - + Type - - Nation - - - {awaitedNations.map((nation) => ( - - {/* TODO: trim icons */} - - - ))} + Nation + + + {awaitedGameDefinitions.nations + .slice(0, Math.ceil(awaitedGameDefinitions.nations.length / 2)) + .map((nation) => ( + + {/* TODO: trim icons */} + + + ))} + + + {awaitedGameDefinitions.nations + .slice(Math.ceil(awaitedGameDefinitions.nations.length / 2)) + .map((nation) => ( + + {/* TODO: trim icons */} + + + ))} + - - Test tanks - + Test tanks Include Exclude @@ -141,132 +165,108 @@ export default function Page() { {range(10, 0).map((tierUntyped) => { const tier = tierUntyped as Tier; - const tierTanks = awaitedTanksDefinitionsArray.filter( - (tank) => tank.tier === tier, - ); + const tierTanks = awaitedTanksDefinitionsArray + .filter((tank) => tank.tier === tier) + .sort( + (a, b) => + treeTypeOrder.indexOf(a.treeType) - + treeTypeOrder.indexOf(b.treeType), + ) + .sort( + (a, b) => + TANK_CLASSES.indexOf(a.class) - TANK_CLASSES.indexOf(b.class), + ) + .sort( + (a, b) => + awaitedGameDefinitions.nations.indexOf(a.nation) - + awaitedGameDefinitions.nations.indexOf(b.nation), + ); return ( - - Tier {TIER_ROMAN_NUMERALS[tier]} - + + + Tier {TIER_ROMAN_NUMERALS[tier]} + + + - - {awaitedNations.map((nation, nationIndex) => { - const nationTanks = tierTanks - .filter((tank) => tank.nation === nation) - .sort( - (a, b) => - treeTypeOrder.indexOf(a.treeType) - - treeTypeOrder.indexOf(b.treeType), - ) - .sort( - (a, b) => - TANK_CLASSES.indexOf(a.class) - - TANK_CLASSES.indexOf(b.class), - ); - - if (nationTanks.length === 0) return null; + + {tierTanks.map((tank) => { + const Icon = classIcons[tank.class]; return ( - - - + {tank.name} + + + - - - { - strings.common.nations[ - nation as keyof typeof strings.common.nations - ] - } - - - + + {tank.name} + - - - {nationTanks.map((tank) => { - const Icon = classIcons[tank.class]; - - return ( - - {tank.name} - - - - - {tank.name} - - - - ); - })} - - + ); })} - + ); })} diff --git a/src/core/blitzkit/gameDefinitions.ts b/src/core/blitzkit/gameDefinitions.ts index e5e2e45f1..dab1576fe 100644 --- a/src/core/blitzkit/gameDefinitions.ts +++ b/src/core/blitzkit/gameDefinitions.ts @@ -3,6 +3,7 @@ import { fetchCdonLz4 } from './fetchCdonLz4'; export interface GameDefinitions { version: string; + nations: string[]; } export const gameDefinitions = fetchCdonLz4(