From b811be42843e90594499884aa7c4de4ca2d6c952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 3 Feb 2024 15:54:21 -0600 Subject: [PATCH] feat: more values batch 1 --- docs/guide/creators.md | 2 +- scripts/buildAssets/definitions.ts | 49 ++++++++++++++++--- src/app/embeds/session/page.tsx | 2 +- .../[id]/components/Characteristics/index.tsx | 2 +- .../tankopedia/[id]/components/Title.tsx | 6 +-- .../components/CompactSearchResultRow.tsx | 4 +- .../components/TankSearch/index.tsx | 12 ++--- src/commands/ownedTanks.tsx | 4 +- src/components/Tanks/components/Item.tsx | 2 +- src/core/blitz/getTreeType.ts | 4 +- src/core/blitzkrieg/tankDefinitions.ts | 47 ++++++++++++------ src/core/statistics/filterStats.ts | 6 +-- 12 files changed, 94 insertions(+), 46 deletions(-) diff --git a/docs/guide/creators.md b/docs/guide/creators.md index 52cb10085..18e4a7669 100644 --- a/docs/guide/creators.md +++ b/docs/guide/creators.md @@ -10,6 +10,6 @@ - Maddox: game file decompression - Pyogenics: tank model decompression - Aeson: game files layout -- minitelrose, ChickenMan7777: 3-caliber rule edge cases +- Minitelrose, ChickenMan7777: 3-caliber rule edge cases - \_34, HisRoyalFatness, Synx, xkdkw: embed UX - [OPTML], Aeson, \_34, Droodles: beta testing tankopedia diff --git a/scripts/buildAssets/definitions.ts b/scripts/buildAssets/definitions.ts index 87e1ab9fb..577366583 100644 --- a/scripts/buildAssets/definitions.ts +++ b/scripts/buildAssets/definitions.ts @@ -88,6 +88,11 @@ interface VehicleDefinitions { }; chassis: { [key: string]: { + rotationSpeed: number; + shotDispersionFactors: { + vehicleMovement: number; + vehicleRotation: number; + }; hullPosition: string; armor: { leftTrack: @@ -112,6 +117,7 @@ interface VehicleDefinitions { }; turrets0: { [key: string]: { + rotationSpeed: number; circularVisionRadius: number; maxHealth: number; armor: VehicleDefinitionArmor; @@ -136,6 +142,13 @@ interface VehicleDefinitions { }; invisibilityFactorAtShot: number | number[]; reloadTime: number; + aimingTime?: number; + shotDispersionRadius: number; + shotDispersionFactors?: { + turretRotation: number; + afterShot: number; + whileGunDamaged: number; + }; maxAmmo: number; extraPitchLimits?: { front?: string; @@ -177,6 +190,12 @@ interface GunDefinitionsList { ids: Record; shared: { [key: string]: { + shotDispersionFactors: { + turretRotation: number; + afterShot: number; + whileGunDamaged: number; + }; + aimingTime: number; userString: string; tags: string; level: number; @@ -254,7 +273,7 @@ const consumableProvisionEffectSuffixes = [ 'Percent', ]; const blitzTankTypeToBlitzkrieg: Record = { - 'AT-SPG': 'tank_destroyer', + 'AT-SPG': 'tankDestroyer', lightTank: 'light', mediumTank: 'medium', heavyTank: 'heavy', @@ -392,9 +411,9 @@ export async function definitions(production: boolean) { (tank.shortUserString ? strings[tank.shortUserString] : undefined) ?? strings[tank.userString], - name_full: strings[tank.userString], + nameFull: strings[tank.userString], nation, - tree_type: tankTags.includes('collectible') + treeType: tankTags.includes('collectible') ? 'collector' : (typeof tank.price === 'number' ? false : 'gold' in tank.price) ? 'premium' @@ -410,12 +429,15 @@ export async function definitions(production: boolean) { }, turrets: [], engines: [], + dispersion: { + move: defaultChassis.shotDispersionFactors.vehicleMovement, + traverse: defaultChassis.shotDispersionFactors.vehicleRotation, + }, + traverseSpeed: defaultChassis.rotationSpeed, }; - if ( - tankDefinitions[tankId].name === tankDefinitions[tankId].name_full - ) { - delete tankDefinitions[tankId].name_full; + if (tankDefinitions[tankId].name === tankDefinitions[tankId].nameFull) { + delete tankDefinitions[tankId].nameFull; } modelDefinitions[tankId] = { @@ -494,6 +516,7 @@ export async function definitions(production: boolean) { }); tankDefinitions[tankId].turrets.push({ + traverseSpeed: turret.rotationSpeed, id: turretId, name: strings[turret.userString] ?? @@ -503,7 +526,7 @@ export async function definitions(production: boolean) { tier: turret.level as Tier, guns: [], health: turret.maxHealth, - view_range: turret.circularVisionRadius, + viewRange: turret.circularVisionRadius, }); modelDefinitions[tankId].turrets[turretId] = { @@ -567,6 +590,9 @@ export async function definitions(production: boolean) { : turretGunEntry.extraPitchLimits.transition.at(-1)! : undefined; const gunArmor: ModelArmor = { thickness: {} }; + const shotDispersionFactors = + turretGunEntry.shotDispersionFactors ?? + gunListEntry.shotDispersionFactors; Object.keys(turretGunEntry.armor) .filter((name) => name.startsWith('armor_')) @@ -599,6 +625,13 @@ export async function definitions(production: boolean) { typeof turretGunEntry.invisibilityFactorAtShot === 'number' ? turretGunEntry.invisibilityFactorAtShot : turretGunEntry.invisibilityFactorAtShot.at(-1)!, + aimTime: turretGunEntry.aimingTime ?? gunListEntry.aimingTime, + dispersion: { + base: turretGunEntry.shotDispersionRadius, + damaged: shotDispersionFactors.whileGunDamaged, + shot: shotDispersionFactors.afterShot, + traverse: shotDispersionFactors.turretRotation, + }, } as GunDefinition); modelDefinitions[tankId].turrets[turretId].guns[gunId] = { diff --git a/src/app/embeds/session/page.tsx b/src/app/embeds/session/page.tsx index 23df7b3af..49c1eb83f 100644 --- a/src/app/embeds/session/page.tsx +++ b/src/app/embeds/session/page.tsx @@ -295,7 +295,7 @@ export default function SessionPage() { } type="tank" tankType={tankDefinitions?.type} - treeType={tankDefinitions?.tree_type} + treeType={tankDefinitions?.treeType} stats={session.customColumns.map((customColumn) => { const rowStat = rowStats[customColumn.display]; diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx b/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx index 846fa3157..d4e2a079e 100644 --- a/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx +++ b/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx @@ -53,7 +53,7 @@ export function Characteristics() { {Math.round(engine.fire_chance * 100)} - {turret.view_range} + {turret.viewRange} diff --git a/src/app/tools/tankopedia/[id]/components/Title.tsx b/src/app/tools/tankopedia/[id]/components/Title.tsx index 42b789815..35946a57f 100644 --- a/src/app/tools/tankopedia/[id]/components/Title.tsx +++ b/src/app/tools/tankopedia/[id]/components/Title.tsx @@ -14,9 +14,9 @@ export function Title() { - + @@ -37,7 +37,7 @@ export function CompactSearchResultRow({ style={{ display: 'block', color: - tank.tree_type === 'researchable' ? 'white' : undefined, + tank.treeType === 'researchable' ? 'white' : undefined, }} > {tank.name} diff --git a/src/app/tools/tankopedia/components/TankSearch/index.tsx b/src/app/tools/tankopedia/components/TankSearch/index.tsx index b4c091ca0..971c3c678 100644 --- a/src/app/tools/tankopedia/components/TankSearch/index.tsx +++ b/src/app/tools/tankopedia/components/TankSearch/index.tsx @@ -56,7 +56,7 @@ export function TankSearch({ compact, onSelect = () => {} }: TankSearchProps) { : filters.types.includes(tank.type)) && (filters.treeTypes.length === 0 ? true - : filters.treeTypes.includes(tank.tree_type)) && + : filters.treeTypes.includes(tank.treeType)) && (filters.nations.length === 0 ? true : filters.nations.includes(tank.nation)) && @@ -266,9 +266,9 @@ export function TankSearch({ compact, onSelect = () => {} }: TankSearchProps) { {} }: TankSearchProps) { )), )} @@ -110,7 +110,7 @@ export const ownedTanksCommand: CommandRegistry = { name={tank.name} tankType={tank.type} image={tankIcon(tank.id)} - treeType={tank.tree_type} + treeType={tank.treeType} /> )), )} diff --git a/src/components/Tanks/components/Item.tsx b/src/components/Tanks/components/Item.tsx index b090d0094..00671c7e7 100644 --- a/src/components/Tanks/components/Item.tsx +++ b/src/components/Tanks/components/Item.tsx @@ -6,7 +6,7 @@ import { import { theme } from '../../../stitches.config'; export const TANK_TYPES = [ - 'tank_destroyer', + 'tankDestroyer', 'light', 'medium', 'heavy', diff --git a/src/core/blitz/getTreeType.ts b/src/core/blitz/getTreeType.ts index c0da72bc1..4575fdb98 100644 --- a/src/core/blitz/getTreeType.ts +++ b/src/core/blitz/getTreeType.ts @@ -4,8 +4,8 @@ import { tankDefinitions } from '../blitzkrieg/tankDefinitions'; export default async function getTreeType(id: number): Promise { const entry = (await tankDefinitions)[id]; - if (entry.tree_type === 'collector') return 'collector'; - if (entry.tree_type === 'premium') return 'premium'; + if (entry.treeType === 'collector') return 'collector'; + if (entry.treeType === 'premium') return 'premium'; return 'researchable'; } diff --git a/src/core/blitzkrieg/tankDefinitions.ts b/src/core/blitzkrieg/tankDefinitions.ts index 13756d85b..6a0459e4a 100644 --- a/src/core/blitzkrieg/tankDefinitions.ts +++ b/src/core/blitzkrieg/tankDefinitions.ts @@ -18,8 +18,8 @@ export interface TankDefinition { health: number; nation: string; name: string; - name_full?: string; - tree_type: TreeType; + nameFull?: string; + treeType: TreeType; consumables: number; provisions: number; tier: Tier; @@ -33,6 +33,11 @@ export interface TankDefinition { moving: number; onFire: number; }; + traverseSpeed: number; + dispersion: { + move: number; + traverse: number; + }; equipment: string; } export interface EngineDefinition { @@ -46,33 +51,43 @@ export type TankDefinitionPrice = | { type: 'gold'; value: number }; export interface TurretDefinition { health: number; - view_range: number; + viewRange: number; + traverseSpeed: number; id: number; name: string; tier: Tier; guns: GunDefinition[]; } -export type GunDefinition = GunDefinitionBase & - (GunDefinitionRegular | GunDefinitionAutoLoader | GunDefinitionAutoReloader); +export type GunDefinition = + | GunDefinitionRegular + | GunDefinitionAutoLoader + | GunDefinitionAutoReloader; interface GunDefinitionBase { id: number; name: string; tier: Tier; shells: ShellDefinition[]; camouflageLoss: number; + aimTime: number; + dispersion: { + base: number; + traverse: number; + shot: number; + damaged: number; + }; } -interface GunDefinitionRegular { +interface GunDefinitionRegular extends GunDefinitionBase { type: 'regular'; reload: number; } -interface GunDefinitionAutoLoader { - type: 'auto_loader'; +interface GunDefinitionAutoLoader extends GunDefinitionBase { + type: 'autoLoader'; reload: number; interClip: number; count: number; } -interface GunDefinitionAutoReloader { - type: 'auto_reloader'; +interface GunDefinitionAutoReloader extends GunDefinitionBase { + type: 'autoReloader'; reload: number[]; interClip: number; count: number; @@ -93,8 +108,8 @@ export type ShellDefinition = { export const GUN_TYPE_NAMES: Record = { regular: 'Regular', - auto_loader: 'Auto loader', - auto_reloader: 'Auto reloader', + autoLoader: 'Auto loader', + autoReloader: 'Auto reloader', }; export const tankDefinitions = fetch(asset('definitions/tanks.json'), { @@ -117,28 +132,28 @@ export const tankNames = tanksDefinitionsArray.then((tanks) => return { id, original: tank.name, - combined: `${tank.name}${deburr(tank.name)}${tank.name_full ? `${tank.name_full}${deburr(tank.name_full)}` : ''}`, + combined: `${tank.name}${deburr(tank.name)}${tank.nameFull ? `${tank.nameFull}${deburr(tank.nameFull)}` : ''}`, }; }), ), ); export const TANK_ICONS: Record = { - tank_destroyer: 'https://i.imgur.com/BIHSEH0.png', + tankDestroyer: 'https://i.imgur.com/BIHSEH0.png', light: 'https://i.imgur.com/CSNha5V.png', medium: 'https://i.imgur.com/wvf3ltm.png', heavy: 'https://i.imgur.com/ECeqlZa.png', }; export const TANK_ICONS_PREMIUM: Record = { - tank_destroyer: 'https://i.imgur.com/TCu3EdR.png', + tankDestroyer: 'https://i.imgur.com/TCu3EdR.png', light: 'https://i.imgur.com/zdkpTRb.png', medium: 'https://i.imgur.com/3z7eHX6.png', heavy: 'https://i.imgur.com/P3vbmyA.png', }; export const TANK_ICONS_COLLECTOR: Record = { - tank_destroyer: 'https://i.imgur.com/WTjeirB.png', + tankDestroyer: 'https://i.imgur.com/WTjeirB.png', light: 'https://i.imgur.com/EwhtKkU.png', medium: 'https://i.imgur.com/u8YDMBh.png', heavy: 'https://i.imgur.com/8xRf3nc.png', diff --git a/src/core/statistics/filterStats.ts b/src/core/statistics/filterStats.ts index cc9c6e2af..c13845ffc 100644 --- a/src/core/statistics/filterStats.ts +++ b/src/core/statistics/filterStats.ts @@ -31,10 +31,10 @@ export async function filterStats( (filters.tier === undefined || entry.tier === filters.tier) && (filters.tankType === undefined || entry.type === filters.tankType) && (filters.treeType === undefined || - (filters.treeType === 'collector' && entry.tree_type === 'collector') || - (filters.treeType === 'premium' && entry.tree_type === 'premium') || + (filters.treeType === 'collector' && entry.treeType === 'collector') || + (filters.treeType === 'premium' && entry.treeType === 'premium') || (filters.treeType === 'researchable' && - entry.tree_type === 'researchable')) && + entry.treeType === 'researchable')) && (filters.tank === undefined || entry.id === filters.tank) ); });