From b0530189587505bd4bcbdf9b9c1948b2fb36ad05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 16 Jan 2024 17:19:46 -0600 Subject: [PATCH] feat: equipment definitions --- scripts/buildAssets/definitions.ts | 60 +++++++++++++++------ src/core/blitzkrieg/equipmentDefinitions.ts | 10 ++-- 2 files changed, 52 insertions(+), 18 deletions(-) diff --git a/scripts/buildAssets/definitions.ts b/scripts/buildAssets/definitions.ts index e06c60cdf..f8bc1455a 100644 --- a/scripts/buildAssets/definitions.ts +++ b/scripts/buildAssets/definitions.ts @@ -6,6 +6,11 @@ import { readXMLDVPL } from '../../src/core/blitz/readXMLDVPL'; import { readYAMLDVPL } from '../../src/core/blitz/readYAMLDVPL'; import { toUniqueId } from '../../src/core/blitz/toUniqueId'; import commitMultipleFiles from '../../src/core/blitzkrieg/commitMultipleFiles'; +import { + EquipmentDefinitions, + EquipmentRow, + EquipmentRows, +} from '../../src/core/blitzkrieg/equipmentDefinitions'; import { ModelArmor, ModelDefinitions, @@ -174,18 +179,7 @@ interface OptionalDeviceSlots { } interface OptionalDeviceSlotRow { - attack: { - device0: string; - device1: string; - }; - defence: { - device0: string; - device1: string; - }; - support: { - device0: string; - device1: string; - }; + [key: string]: { device0: string; device1: string }; } const blitzTankTypeToBlitzkrieg: Record = { @@ -207,6 +201,10 @@ export async function buildDefinitions() { const tankDefinitions: TankDefinitions = {}; const modelDefinitions: ModelDefinitions = {}; + const equipmentDefinitions: EquipmentDefinitions = { + presets: {}, + equipments: {}, + }; const nations = await readdir(`${DATA}/${POI.vehicleDefinitions}`).then( (nations) => nations.filter((nation) => nation !== 'common'), ); @@ -214,11 +212,11 @@ export async function buildDefinitions() { `${DATA}/${POI.strings}/${LANGUAGE}.yaml.dvpl`, ); const optionalDevices = await readXMLDVPL<{ root: OptionalDevices }>( - `${DATA}/${POI.optionalDevices}`, + `${DATA}/${POI.optionalDevices}.dvpl`, ); const optionalDeviceSlots = await readXMLDVPL<{ root: OptionalDeviceSlots; - }>(`${DATA}/${POI.optionalDeviceSlots}`); + }>(`${DATA}/${POI.optionalDeviceSlots}.dvpl`); await Promise.all( nations.map(async (nation) => { @@ -537,7 +535,34 @@ export async function buildDefinitions() { }), ); - return; + Object.entries(optionalDevices.root).forEach( + ([optionalDeviceKey, optionalDeviceEntry]) => { + if (optionalDeviceKey === 'nextAvailableId') return; + + equipmentDefinitions.equipments[optionalDeviceEntry.id] = { + name: strings[optionalDeviceEntry.userString], + }; + }, + ); + + Object.entries(optionalDeviceSlots.root.presets).forEach( + ([optionalDeviceSlotKey, optionalDeviceSlotEntry]) => { + if (optionalDeviceSlotKey === 'emptyPreset') return; + + equipmentDefinitions.presets[optionalDeviceSlotKey] = Object.values( + optionalDeviceSlotEntry, + ).map( + (level) => + Object.values(level).map((options) => { + return [ + optionalDevices.root[options.device0].id, + optionalDevices.root[options.device1].id, + ]; + }) as EquipmentRow, + ) as EquipmentRows; + }, + ); + console.log('Committing definitions...'); await commitMultipleFiles( 'tresabhi', @@ -555,6 +580,11 @@ export async function buildDefinitions() { encoding: 'utf-8', path: 'definitions/models.json', }, + { + content: JSON.stringify(equipmentDefinitions), + encoding: 'utf-8', + path: 'definitions/equipment.json', + }, ], true, ); diff --git a/src/core/blitzkrieg/equipmentDefinitions.ts b/src/core/blitzkrieg/equipmentDefinitions.ts index 3d1c56045..2a574d22c 100644 --- a/src/core/blitzkrieg/equipmentDefinitions.ts +++ b/src/core/blitzkrieg/equipmentDefinitions.ts @@ -2,11 +2,15 @@ import { asset } from './asset'; type EquipmentOptions = [number, number]; -type EquipmentRow = [EquipmentOptions, EquipmentOptions, EquipmentOptions]; +export type EquipmentRow = [ + EquipmentOptions, + EquipmentOptions, + EquipmentOptions, +]; -type EquipmentRows = [EquipmentRow, EquipmentRow, EquipmentRow]; +export type EquipmentRows = [EquipmentRow, EquipmentRow, EquipmentRow]; -interface EquipmentDefinitions { +export interface EquipmentDefinitions { presets: { [key: string]: EquipmentRows; };