From 002d0d4bc0b28e323a0091a429f70fe4bfe63544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 23 Jan 2024 13:37:32 -0600 Subject: [PATCH] fix: missing turrets --- .../components/ArmorHighlighting.tsx | 48 ++++++++++++++++++- .../components/ExternalModuleMask.tsx | 28 +++++++++++ .../TankArmor/components/SpacedArmorDepth.tsx | 33 +++++++++++++ 3 files changed, 108 insertions(+), 1 deletion(-) diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx index 1868a3c8c..3f489b9d2 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx @@ -18,6 +18,7 @@ export function ArmorHighlighting() { const protagonist = useDuel((state) => state.protagonist!); const wrapper = useRef(null); const modelDefinitions = useModelDefinitions(); + const gunContainer = useRef(null); const turretContainer = useRef(null); const initialTankopediaState = useTankopediaTemporary.getState(); @@ -34,10 +35,24 @@ export function ArmorHighlighting() { ).applyAxisAngle(I_HAT, Math.PI / 2); const turretPosition = new Vector3(); const turretRotation = new Euler(); + const gunPosition = new Vector3(); + const gunRotation = new Euler(); - function handleModelTransform({ yaw }: ModelTransformEventData) { + function handleModelTransform({ pitch, yaw }: ModelTransformEventData) { if (yaw === undefined) return; + gunPosition + .set(0, 0, 0) + .sub(hullOrigin) + .sub(turretOrigin) + .sub(gunOrigin) + .applyAxisAngle(I_HAT, pitch) + .add(gunOrigin) + .add(turretOrigin) + .add(hullOrigin); + gunRotation.set(pitch, 0, 0); + gunContainer.current?.position.copy(gunPosition); + gunContainer.current?.rotation.copy(gunRotation); turretPosition .set(0, 0, 0) .sub(hullOrigin) @@ -101,6 +116,11 @@ export function ArmorHighlighting() { tankModelDefinition.turretOrigin[1], -tankModelDefinition.turretOrigin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); + const gunOrigin = new Vector3( + turretModelDefinition.gunOrigin[0], + turretModelDefinition.gunOrigin[1], + -turretModelDefinition.gunOrigin[2], + ).applyAxisAngle(I_HAT, Math.PI / 2); const maxThickness = Math.max( tankModelDefinition.trackThickness, gunModelDefinition.barrelThickness, @@ -164,6 +184,32 @@ export function ArmorHighlighting() { /> ); })} + + + {armorNodes.map((node) => { + const isCurrentGun = node.name.startsWith( + `gun_${gunModelDefinition.model.toString().padStart(2, '0')}`, + ); + const isVisible = isCurrentGun; + const armorId = nameToArmorId(node.name); + const { spaced, thickness } = resolveArmor( + gunModelDefinition.armor, + armorId, + ); + + if (!isVisible || thickness === undefined || spaced) return null; + + return ( + + ); + })} + ); diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ExternalModuleMask.tsx b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ExternalModuleMask.tsx index fb9234547..5b1d7a3ee 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ExternalModuleMask.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ExternalModuleMask.tsx @@ -143,6 +143,11 @@ export const ExternalModuleMask = memo(() => { tankModelDefinition.turretOrigin[1], -tankModelDefinition.turretOrigin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); + const gunOrigin = new Vector3( + turretModelDefinition.gunOrigin[0], + turretModelDefinition.gunOrigin[1], + -turretModelDefinition.gunOrigin[2], + ).applyAxisAngle(I_HAT, Math.PI / 2); return ( { + {armorNodes.map((node) => { + const isCurrentGun = node.name.startsWith( + `gun_${gunModelDefinition.model.toString().padStart(2, '0')}`, + ); + const isVisible = isCurrentGun; + const armorId = nameToArmorId(node.name); + const { thickness } = resolveArmor( + gunModelDefinition.armor, + armorId, + ); + + if (!isVisible || thickness === undefined) return null; + + return ( + + ); + })} + {modelNodes.map((node) => { const isCurrentGun = node.name === diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx index 17376d262..d074452a0 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx @@ -149,6 +149,11 @@ export const SpacedArmorDepth = memo(() => { tankModelDefinition.turretOrigin[1], -tankModelDefinition.turretOrigin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); + const gunOrigin = new Vector3( + turretModelDefinition.gunOrigin[0], + turretModelDefinition.gunOrigin[1], + -turretModelDefinition.gunOrigin[2], + ).applyAxisAngle(I_HAT, Math.PI / 2); return ( { })} + + {armorNodes.map((node) => { + const isCurrentGun = node.name.startsWith( + `gun_${gunModelDefinition.model.toString().padStart(2, '0')}`, + ); + const isVisible = isCurrentGun; + const armorId = nameToArmorId(node.name); + const { spaced, thickness } = resolveArmor( + gunModelDefinition.armor, + armorId, + ); + + if (!isVisible || thickness === undefined) return null; + + return ( + + ); + })} + + {modelNodes.map((node) => { const isCurrentGun = node.name ===