diff --git a/packages/core/src/blitzkit/api/server/3_models.ts b/packages/core/src/blitzkit/api/server/3_models.ts index bb0adc137..5b59a4a7e 100644 --- a/packages/core/src/blitzkit/api/server/3_models.ts +++ b/packages/core/src/blitzkit/api/server/3_models.ts @@ -1,7 +1,6 @@ import { BlitzCrewType, ChassisDefinitionsList, - EngineDefinitionsList, GunDefinitionsList, TankParameters, toUniqueId, @@ -17,7 +16,7 @@ import { ServerBlitzKitAPI2 } from "./2_camouflages"; export abstract class ServerBlitzKitAPI3 extends ServerBlitzKitAPI2 { private vector3TupleToBlitzkit(tuple: Vector3Tuple) { - return { x: tuple[0], y: tuple[1], z: tuple[2] } satisfies Vector3; + return { x: tuple[0], y: tuple[1], z: -tuple[2] } satisfies Vector3; } private assignArmor( @@ -50,9 +49,6 @@ export abstract class ServerBlitzKitAPI3 extends ServerBlitzKitAPI2 { const gunList = await this.vfs.xml<{ root: GunDefinitionsList; }>(`Data/XML/item_defs/vehicles/${nation}/components/guns.xml`); - const enginesList = await this.vfs.xml<{ - root: EngineDefinitionsList; - }>(`Data/XML/item_defs/vehicles/${nation}/components/engines.xml`); const chassisList = await this.vfs.xml<{ root: ChassisDefinitionsList; }>(`Data/XML/item_defs/vehicles/${nation}/components/chassis.xml`); diff --git a/packages/website/src/components/PrimaryArmorScene.tsx b/packages/website/src/components/PrimaryArmorScene.tsx index 693ac7659..d43951d11 100644 --- a/packages/website/src/components/PrimaryArmorScene.tsx +++ b/packages/website/src/components/PrimaryArmorScene.tsx @@ -1,6 +1,5 @@ import { memo, useRef } from "react"; import { Group } from "three"; -import { correctZYTuple } from "../core/blitz/correctZYTuple"; import { nameToArmorId } from "../core/blitzkit/nameToArmorId"; import { resolveArmor } from "../core/blitzkit/resolveThickness"; import { useArmor } from "../hooks/useArmor"; @@ -8,6 +7,7 @@ import { useConsumable } from "../hooks/useConsumable"; import { DuelModule, useDuel } from "../hooks/useDuel"; import { useDuelModel } from "../hooks/useDuelModel"; import { useTankTransform } from "../hooks/useTankTransform"; +import { toThreeVector } from "../three/toThreeVector"; import { PrimaryArmorSceneComponent } from "./PrimaryArmorSceneComponent"; export const PrimaryArmorScene = memo(() => { @@ -23,9 +23,9 @@ export const PrimaryArmorScene = memo(() => { const trackModelDefinition = tankModelDefinition.tracks[track.id]; const turretModelDefinition = tankModelDefinition.turrets[turret.id]; const gunModelDefinition = turretModelDefinition.guns[gun.id]; - const hullOrigin = correctZYTuple(trackModelDefinition.origin!); - const turretOrigin = correctZYTuple(tankModelDefinition.turret_origin!); - const gunOrigin = correctZYTuple(turretModelDefinition.gun_origin!); + const hullOrigin = toThreeVector(trackModelDefinition.origin); + const turretOrigin = toThreeVector(tankModelDefinition.turret_origin); + const gunOrigin = toThreeVector(turretModelDefinition.gun_origin); const isDynamicArmorActive = useConsumable("protagonist", 73); useTankTransform(track, turret, turretContainer, gunContainer); diff --git a/packages/website/src/components/SpacedArmorScene.tsx b/packages/website/src/components/SpacedArmorScene.tsx index 8699feae3..874815cd0 100644 --- a/packages/website/src/components/SpacedArmorScene.tsx +++ b/packages/website/src/components/SpacedArmorScene.tsx @@ -1,6 +1,5 @@ import { memo, useRef } from "react"; import { Group, Plane, Scene, Vector3 } from "three"; -import { correctZYTuple } from "../core/blitz/correctZYTuple"; import { nameToArmorId } from "../core/blitzkit/nameToArmorId"; import { resolveArmor } from "../core/blitzkit/resolveThickness"; import { useArmor } from "../hooks/useArmor"; @@ -9,6 +8,7 @@ import { DuelModule, useDuel } from "../hooks/useDuel"; import { useDuelModel } from "../hooks/useDuelModel"; import { useModel } from "../hooks/useModel"; import { useTankTransform } from "../hooks/useTankTransform"; +import { toThreeVector } from "../three/toThreeVector"; import { SpacedArmorSceneComponent } from "./SpacedArmorSceneComponent"; export enum ArmorType { @@ -36,9 +36,9 @@ export const SpacedArmorScene = memo(({ scene }) => { const trackModelDefinition = tankModelDefinition.tracks[track.id]; const turretModelDefinition = tankModelDefinition.turrets[turret.id]; const gunModelDefinition = turretModelDefinition.guns[gun.id]; - const hullOrigin = correctZYTuple(trackModelDefinition.origin!); - const turretOrigin = correctZYTuple(tankModelDefinition.turret_origin!); - const gunOrigin = correctZYTuple(turretModelDefinition.gun_origin!); + const hullOrigin = toThreeVector(trackModelDefinition.origin); + const turretOrigin = toThreeVector(tankModelDefinition.turret_origin); + const gunOrigin = toThreeVector(turretModelDefinition.gun_origin); const maskOrigin = gunModelDefinition.mask === undefined ? undefined diff --git a/packages/website/src/components/StaticArmor.tsx b/packages/website/src/components/StaticArmor.tsx index 5984dd3ae..15573dabf 100644 --- a/packages/website/src/components/StaticArmor.tsx +++ b/packages/website/src/components/StaticArmor.tsx @@ -2,7 +2,6 @@ import { useThree, type ThreeEvent } from "@react-three/fiber"; import { memo, useRef } from "react"; import { Group, Plane, Vector2, Vector3 } from "three"; import { applyPitchYawLimits } from "../core/blitz/applyPitchYawLimits"; -import { correctZYTuple } from "../core/blitz/correctZYTuple"; import { modelTransformEvent } from "../core/blitzkit/modelTransform"; import { nameToArmorId } from "../core/blitzkit/nameToArmorId"; import { resolveArmor } from "../core/blitzkit/resolveThickness"; @@ -16,6 +15,7 @@ import { useModel } from "../hooks/useModel"; import { useTankTransform } from "../hooks/useTankTransform"; import { Tankopedia } from "../stores/tankopedia"; import { TankopediaPersistent } from "../stores/tankopediaPersistent"; +import { toThreeVector } from "../three/toThreeVector"; import { ArmorType } from "./SpacedArmorScene"; import { StaticArmorSceneComponent } from "./StaticArmorSceneComponent"; @@ -44,9 +44,9 @@ export const StaticArmor = memo(({ thicknessRange }) => { const trackModelDefinition = tankModelDefinition.tracks[track.id]; const turretModelDefinition = tankModelDefinition.turrets[turret.id]; const gunModelDefinition = turretModelDefinition.guns[gun.id]; - const hullOrigin = correctZYTuple(trackModelDefinition.origin!); - const turretOrigin = correctZYTuple(tankModelDefinition.turret_origin!); - const gunOrigin = correctZYTuple(turretModelDefinition.gun_origin!); + const hullOrigin = toThreeVector(trackModelDefinition.origin); + const turretOrigin = toThreeVector(tankModelDefinition.turret_origin); + const gunOrigin = toThreeVector(turretModelDefinition.gun_origin); const canvas = useThree((state) => state.gl.domElement); const maskOrigin = diff --git a/packages/website/src/components/TankModel.tsx b/packages/website/src/components/TankModel.tsx index f3314107f..54a351573 100644 --- a/packages/website/src/components/TankModel.tsx +++ b/packages/website/src/components/TankModel.tsx @@ -22,6 +22,7 @@ export function TankModel() { const turretContainer = useRef(null!); const gunContainer = useRef(null!); const tankModelDefinition = useDuelModel("protagonist"); + const trackModelDefinition = tankModelDefinition.tracks[track.id]; const turretModelDefinition = tankModelDefinition.turrets[protagonist.turret]; const gunModelDefinition = turretModelDefinition.guns[protagonist.gun]; const { gltf } = useModel(protagonist.tank); @@ -31,6 +32,18 @@ export function TankModel() { return ( <> + {/* + + + */} + {nodes.map((node) => { const isHull = node.name === "hull"; const isWheel = node.name.startsWith("chassis_wheel_"); @@ -129,7 +142,7 @@ export function TankModel() { window.addEventListener("pointerup", handlePointerUp); } function handlePointerMove(event: PointerEvent) { - const protagonist = useDuel("protagonist", DuelModule.Tank); + const protagonist = getDuel("protagonist", DuelModule.Tank); const hasImprovedVerticalStabilizer = hasEquipment( 122, diff --git a/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/TransitionSkeleton/index.tsx b/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/TransitionSkeleton/index.tsx index 0b142dfb7..f8fc07746 100644 --- a/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/TransitionSkeleton/index.tsx +++ b/packages/website/src/components/Tankopedia/HeroSection/components/TankSandbox/components/TransitionSkeleton/index.tsx @@ -1,12 +1,12 @@ import { useRef } from "react"; import { Group, ShaderMaterial, UniformsLib, UniformsUtils } from "three"; -import { correctZYTuple } from "../../../../../../../core/blitz/correctZYTuple"; import { jsxTree } from "../../../../../../../core/blitzkit/jsxTree"; import { useArmor } from "../../../../../../../hooks/useArmor"; import { useModel } from "../../../../../../../hooks/useModel"; import { useTankModelDefinition } from "../../../../../../../hooks/useTankModelDefinition"; import { useTankTransform } from "../../../../../../../hooks/useTankTransform"; import { Duel } from "../../../../../../../stores/duel"; +import { toThreeVector } from "../../../../../../../three/toThreeVector"; import { ModelTankWrapper } from "../../../../../../ModelTankWrapper"; import fragmentShader from "./shaders/fragment.glsl?raw"; import vertexShader from "./shaders/vertex.glsl?raw"; @@ -37,9 +37,9 @@ export function TransitionSkeleton() { const gunModelDefinition = turretModelDefinition.guns[gun.id]; const trackModelDefinition = tankModelDefinition.tracks[track.id]; const wrapper = useRef(null); - const hullOrigin = correctZYTuple(trackModelDefinition.origin!); - const turretOrigin = correctZYTuple(tankModelDefinition.turret_origin!); - const gunOrigin = correctZYTuple(turretModelDefinition.gun_origin!); + const hullOrigin = toThreeVector(trackModelDefinition.origin); + const turretOrigin = toThreeVector(tankModelDefinition.turret_origin); + const gunOrigin = toThreeVector(turretModelDefinition.gun_origin); useTankTransform(track, turret, turretContainer, gunContainer); diff --git a/packages/website/src/core/blitz/correctZYTuple.ts b/packages/website/src/core/blitz/correctZYTuple.ts deleted file mode 100644 index e8fcdbecc..000000000 --- a/packages/website/src/core/blitz/correctZYTuple.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Vector3 as BlitzkitVector3 } from "@blitzkit/protos"; -import { Vector3 as THREEVector3 } from "three"; -import { rotateDavaVector } from "./rotateDavaVector"; - -export function correctZYTuple(tuple: BlitzkitVector3) { - return rotateDavaVector(new THREEVector3(tuple.x, tuple.y, -tuple.z)); -} diff --git a/packages/website/src/hooks/useTankTransform.ts b/packages/website/src/hooks/useTankTransform.ts index 8c2ede4d3..64a6e66af 100644 --- a/packages/website/src/hooks/useTankTransform.ts +++ b/packages/website/src/hooks/useTankTransform.ts @@ -5,11 +5,11 @@ import type { QuicklimeEvent } from "quicklime"; import { type RefObject, useEffect } from "react"; import { Euler, Group, Vector3 } from "three"; import { degToRad } from "three/src/math/MathUtils.js"; -import { correctZYTuple } from "../core/blitz/correctZYTuple"; import { modelTransformEvent, type ModelTransformEventData, } from "../core/blitzkit/modelTransform"; +import { toThreeVector } from "../three/toThreeVector"; import { useDuelModel } from "./useDuelModel"; export function useTankTransform( @@ -23,9 +23,9 @@ export function useTankTransform( useEffect(() => { const trackModelDefinition = tankModelDefinition.tracks[track.id]; const turretModelDefinition = tankModelDefinition.turrets[turret.id]; - const hullOrigin = correctZYTuple(trackModelDefinition.origin!); - const turretOrigin = correctZYTuple(tankModelDefinition.turret_origin!); - const gunOrigin = correctZYTuple(turretModelDefinition.gun_origin!); + const hullOrigin = toThreeVector(trackModelDefinition.origin); + const turretOrigin = toThreeVector(tankModelDefinition.turret_origin); + const gunOrigin = toThreeVector(turretModelDefinition.gun_origin); const turretPosition = new Vector3(); const turretRotation = new Euler(); const gunPosition = new Vector3(); @@ -54,14 +54,12 @@ export function useTankTransform( gunContainer.current?.position.copy(gunPosition); gunContainer.current?.rotation.copy(gunRotation); - if (yaw === undefined) return; - turretPosition .set(0, 0, 0) .sub(hullOrigin) .sub(turretOrigin) - .applyAxisAngle(new Vector3(0, 0, 1), yaw); - turretRotation.set(0, 0, yaw); + .applyAxisAngle(J_HAT, yaw); + turretRotation.set(0, yaw, 0); if (tankModelDefinition.initial_turret_rotation) { const initialPitch = -degToRad( @@ -76,11 +74,11 @@ export function useTankTransform( turretPosition .applyAxisAngle(I_HAT, initialPitch) - .applyAxisAngle(J_HAT, initialRoll) - .applyAxisAngle(K_HAT, initialYaw); + .applyAxisAngle(J_HAT, initialYaw) + .applyAxisAngle(K_HAT, initialRoll); turretRotation.x += initialPitch; - turretRotation.y += initialRoll; - turretRotation.z += initialYaw; + turretRotation.y += initialYaw; + turretRotation.z += initialRoll; } turretPosition.add(turretOrigin).add(hullOrigin); diff --git a/packages/website/src/three/toThreeVector.ts b/packages/website/src/three/toThreeVector.ts new file mode 100644 index 000000000..1fba6df1a --- /dev/null +++ b/packages/website/src/three/toThreeVector.ts @@ -0,0 +1,6 @@ +import type { Vector3 as BlitzKitVector } from "@blitzkit/protos"; +import { Vector3 } from "three"; + +export function toThreeVector(vector?: BlitzKitVector) { + return new Vector3(vector!.x, vector!.y, vector!.z); +}