From c12cc9b8c59d7daa4fceaac2043f5d25f31d2041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 1 Apr 2024 19:12:59 -0500 Subject: [PATCH] feat: length sorting --- .../components/TankSearch/index.tsx | 37 +++++++++++++++++++ src/stores/tankopedia.ts | 1 + 2 files changed, 38 insertions(+) diff --git a/src/app/tools/tankopedia/components/TankSearch/index.tsx b/src/app/tools/tankopedia/components/TankSearch/index.tsx index a3a8aeea6..3d3feddfb 100644 --- a/src/app/tools/tankopedia/components/TankSearch/index.tsx +++ b/src/app/tools/tankopedia/components/TankSearch/index.tsx @@ -178,6 +178,33 @@ export function TankSearch({ compact, onSelect = () => {} }: TankSearchProps) { }); break; + case 'survivability.length': + sorted = filtered.sort((a, b) => { + const aTankModelDefinition = awaitedModelDefinitions[a.id]; + const bTankModelDefinition = awaitedModelDefinitions[b.id]; + const aTurretModelDefinition = + aTankModelDefinition.turrets[a.turrets.at(-1)!.id]; + const bTurretModelDefinition = + bTankModelDefinition.turrets[b.turrets.at(-1)!.id]; + const aSize = normalizeBoundingBox( + unionBoundingBox( + aTankModelDefinition.boundingBox, + aTurretModelDefinition.boundingBox, + ), + ); + const bSize = normalizeBoundingBox( + unionBoundingBox( + bTankModelDefinition.boundingBox, + bTurretModelDefinition.boundingBox, + ), + ); + const aLength = Math.max(aSize[0], aSize[1], aSize[2]); + const bLength = Math.max(bSize[0], bSize[1], bSize[2]); + + return aLength - bLength; + }); + break; + case 'fire.dpm': sorted = filtered.sort( (a, b) => @@ -707,6 +734,16 @@ export function TankSearch({ compact, onSelect = () => {} }: TankSearchProps) { > Volume + { + mutateTankopediaPersistent((draft) => { + draft.sort.by = 'survivability.length'; + }); + }} + > + Length + diff --git a/src/stores/tankopedia.ts b/src/stores/tankopedia.ts index 6948ff2ca..686c722ea 100644 --- a/src/stores/tankopedia.ts +++ b/src/stores/tankopedia.ts @@ -100,6 +100,7 @@ export const SORT_NAMES = { 'survivability.camouflageMoving': 'camouflage moving', 'survivability.camouflageShooting': 'camouflage shooting', 'survivability.volume': 'volume', + 'survivability.length': 'length', 'fire.dpm': 'DPM', 'fire.reload': 'reload', 'fire.caliber': 'caliber',