From 4da4cf52596301f76b15d2df7a1074d09e93d635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sun, 28 Jan 2024 20:56:49 -0600 Subject: [PATCH] feat: size --- scripts/buildAssets/definitions.ts | 1 - .../[id]/components/Characteristics/index.tsx | 10 +++++++++- src/core/blitzkrieg/modelDefinitions.ts | 2 +- src/core/blitzkrieg/normalizeBoundingBox.ts | 8 ++++++++ src/core/blitzkrieg/unionBoundingBox.ts | 9 +++++++++ 5 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 src/core/blitzkrieg/normalizeBoundingBox.ts create mode 100644 src/core/blitzkrieg/unionBoundingBox.ts diff --git a/scripts/buildAssets/definitions.ts b/scripts/buildAssets/definitions.ts index 3151c2b9b..87e1ab9fb 100644 --- a/scripts/buildAssets/definitions.ts +++ b/scripts/buildAssets/definitions.ts @@ -865,7 +865,6 @@ export async function definitions(production: boolean) { }); }); - return; await commitAssets( 'definitions', [ diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx b/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx index 4c0111570..d0609db33 100644 --- a/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx +++ b/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx @@ -2,7 +2,9 @@ import { Flex, Heading, Tabs } from '@radix-ui/themes'; import { use } from 'react'; import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration'; import { modelDefinitions } from '../../../../../../core/blitzkrieg/modelDefinitions'; +import { normalizeBoundingBox } from '../../../../../../core/blitzkrieg/normalizeBoundingBox'; import { SHELL_NAMES } from '../../../../../../core/blitzkrieg/tankDefinitions'; +import { unionBoundingBox } from '../../../../../../core/blitzkrieg/unionBoundingBox'; import { useDuel } from '../../../../../../stores/duel'; import { Camouflage } from './components/Camouflage'; import { Consumables } from './components/Consumables'; @@ -20,6 +22,12 @@ export function Characteristics() { const tankModelDefinition = awaitedModelDefinitions[tank.id]; const turretModelDefinition = tankModelDefinition.turrets[turret.id]; const gunModelDefinition = turretModelDefinition.guns[gun.id]; + const size = normalizeBoundingBox( + unionBoundingBox( + tankModelDefinition.boundingBox, + turretModelDefinition.boundingBox, + ), + ); let dpm: number; @@ -75,7 +83,7 @@ export function Characteristics() { {(tank.camouflage.onFire * 100).toFixed(2)} - TODO + {size.map((component) => component.toFixed(2)).join(' x ')} diff --git a/src/core/blitzkrieg/modelDefinitions.ts b/src/core/blitzkrieg/modelDefinitions.ts index 78be757bf..1acf75694 100644 --- a/src/core/blitzkrieg/modelDefinitions.ts +++ b/src/core/blitzkrieg/modelDefinitions.ts @@ -8,7 +8,7 @@ export interface ModelArmor { spaced?: number[]; } -interface BoundingBox { +export interface BoundingBox { min: Vector3Tuple; max: Vector3Tuple; } diff --git a/src/core/blitzkrieg/normalizeBoundingBox.ts b/src/core/blitzkrieg/normalizeBoundingBox.ts new file mode 100644 index 000000000..c29c75056 --- /dev/null +++ b/src/core/blitzkrieg/normalizeBoundingBox.ts @@ -0,0 +1,8 @@ +import { Vector3Tuple } from 'three'; +import { BoundingBox } from './modelDefinitions'; + +export function normalizeBoundingBox(boundingBox: BoundingBox) { + return boundingBox.max.map( + (max, index) => max - boundingBox.min[index], + ) as Vector3Tuple; +} diff --git a/src/core/blitzkrieg/unionBoundingBox.ts b/src/core/blitzkrieg/unionBoundingBox.ts new file mode 100644 index 000000000..86d026a0d --- /dev/null +++ b/src/core/blitzkrieg/unionBoundingBox.ts @@ -0,0 +1,9 @@ +import { Vector3Tuple } from 'three'; +import { BoundingBox } from './modelDefinitions'; + +export function unionBoundingBox(a: BoundingBox, b: BoundingBox) { + return { + min: a.min.map((a, index) => Math.min(a, b.min[index])) as Vector3Tuple, + max: a.max.map((a, index) => Math.max(a, b.max[index])) as Vector3Tuple, + } satisfies BoundingBox; +}