From e6fa17a91162ee70c025d527e6ca973589acb7de Mon Sep 17 00:00:00 2001
From: tresabhi <43380238+tresabhi@users.noreply.github.com>
Date: Sun, 14 Jun 2026 14:37:52 -0500
Subject: [PATCH] tank model part as components
---
.../src/components/TankModelChassis.tsx | 19 ++++++++++++
.../TankModelGun.tsx} | 17 ++++++++---
.../src/components/TankModelHull.tsx | 13 +++++++++
.../TankModelPart.tsx} | 14 +++++----
.../TankModelTurret.tsx} | 17 ++++++++---
.../components/TankopediaSandbox/index.tsx | 29 ++++++-------------
.../src/hooks/useTankChassisModel.ts | 17 -----------
.../website-ue/src/hooks/useTankHullModel.ts | 13 ---------
8 files changed, 76 insertions(+), 63 deletions(-)
create mode 100644 packages/website-ue/src/components/TankModelChassis.tsx
rename packages/website-ue/src/{hooks/useTankGunModel.ts => components/TankModelGun.tsx} (52%)
create mode 100644 packages/website-ue/src/components/TankModelHull.tsx
rename packages/website-ue/src/{hooks/useTankModel.ts => components/TankModelPart.tsx} (78%)
rename packages/website-ue/src/{hooks/useTankTurretModel.ts => components/TankModelTurret.tsx} (51%)
delete mode 100644 packages/website-ue/src/hooks/useTankChassisModel.ts
delete mode 100644 packages/website-ue/src/hooks/useTankHullModel.ts
diff --git a/packages/website-ue/src/components/TankModelChassis.tsx b/packages/website-ue/src/components/TankModelChassis.tsx
new file mode 100644
index 000000000..edab98cb8
--- /dev/null
+++ b/packages/website-ue/src/components/TankModelChassis.tsx
@@ -0,0 +1,19 @@
+import { useProtagonist } from "../hooks/useProtagonist";
+import { TankModelPart } from "./TankModelPart";
+
+export function TankModelChassis() {
+ const tank = useProtagonist();
+
+ const map = {
+ Wheels: true,
+ LeftTracks: true,
+ RightTracks: true,
+ LeftTrackCrashed: false,
+ RightTrackCrashed: false,
+ CollisionMesh: false,
+ };
+
+ return (
+
+ );
+}
diff --git a/packages/website-ue/src/hooks/useTankGunModel.ts b/packages/website-ue/src/components/TankModelGun.tsx
similarity index 52%
rename from packages/website-ue/src/hooks/useTankGunModel.ts
rename to packages/website-ue/src/components/TankModelGun.tsx
index 4d5a928e6..9318546ba 100644
--- a/packages/website-ue/src/hooks/useTankGunModel.ts
+++ b/packages/website-ue/src/components/TankModelGun.tsx
@@ -2,10 +2,14 @@ import {
VisualChanges_TankPart,
type StageParameters,
} from "@protos/blitz_static_tank_upgrade_single_stage";
-import { useProtagonist } from "./useProtagonist";
-import { useTankModel } from "./useTankModel";
+import { useProtagonist } from "../hooks/useProtagonist";
+import { TankModelPart } from "./TankModelPart";
-export function useTankGunModel(parameters: StageParameters) {
+interface Props {
+ parameters: StageParameters;
+}
+
+export function TankModelGun({ parameters }: Props) {
const tank = useProtagonist();
const selected = parameters.visual_changes.find(
({ tank_part }) => tank_part === VisualChanges_TankPart.TANK_PART_GUN,
@@ -17,5 +21,10 @@ export function useTankGunModel(parameters: StageParameters) {
CollisionMesh: false,
};
- return useTankModel(`/models/tanks/${tank.id}/${selected!.name}.glb`, map);
+ return (
+
+ );
}
diff --git a/packages/website-ue/src/components/TankModelHull.tsx b/packages/website-ue/src/components/TankModelHull.tsx
new file mode 100644
index 000000000..84027ebd1
--- /dev/null
+++ b/packages/website-ue/src/components/TankModelHull.tsx
@@ -0,0 +1,13 @@
+import { useProtagonist } from "../hooks/useProtagonist";
+import { TankModelPart } from "./TankModelPart";
+
+export function TankModelHull() {
+ const tank = useProtagonist();
+
+ const map = {
+ Mesh: true,
+ CollisionMesh: false,
+ };
+
+ return ;
+}
diff --git a/packages/website-ue/src/hooks/useTankModel.ts b/packages/website-ue/src/components/TankModelPart.tsx
similarity index 78%
rename from packages/website-ue/src/hooks/useTankModel.ts
rename to packages/website-ue/src/components/TankModelPart.tsx
index 5c0fd4240..8feff02bb 100644
--- a/packages/website-ue/src/hooks/useTankModel.ts
+++ b/packages/website-ue/src/components/TankModelPart.tsx
@@ -1,10 +1,14 @@
-import { useLoader } from "@react-three/fiber";
+import { useGLTF } from "@react-three/drei";
import { useEffect } from "react";
import { Mesh, MeshStandardMaterial } from "three";
-import { GLTFLoader } from "three-stdlib";
-export function useTankModel(url: string, map: Record) {
- const gltf = useLoader(GLTFLoader, url);
+interface Props {
+ url: string;
+ map: Record;
+}
+
+export function TankModelPart({ url, map }: Props) {
+ const gltf = useGLTF(url);
const [root] = gltf.scene.children;
useEffect(() => {
@@ -36,5 +40,5 @@ export function useTankModel(url: string, map: Record) {
}
}, [url, map]);
- return root;
+ return ;
}
diff --git a/packages/website-ue/src/hooks/useTankTurretModel.ts b/packages/website-ue/src/components/TankModelTurret.tsx
similarity index 51%
rename from packages/website-ue/src/hooks/useTankTurretModel.ts
rename to packages/website-ue/src/components/TankModelTurret.tsx
index 5bf347b60..167ffbcdc 100644
--- a/packages/website-ue/src/hooks/useTankTurretModel.ts
+++ b/packages/website-ue/src/components/TankModelTurret.tsx
@@ -2,10 +2,14 @@ import {
VisualChanges_TankPart,
type StageParameters,
} from "@protos/blitz_static_tank_upgrade_single_stage";
-import { useProtagonist } from "./useProtagonist";
-import { useTankModel } from "./useTankModel";
+import { useProtagonist } from "../hooks/useProtagonist";
+import { TankModelPart } from "./TankModelPart";
-export function useTankTurretModel(parameters: StageParameters) {
+interface Props {
+ parameters: StageParameters;
+}
+
+export function TankModelTurret({ parameters }: Props) {
const tank = useProtagonist();
const selected = parameters.visual_changes.find(
({ tank_part }) => tank_part === VisualChanges_TankPart.TANK_PART_TURRET,
@@ -16,5 +20,10 @@ export function useTankTurretModel(parameters: StageParameters) {
CollisionMesh: false,
};
- return useTankModel(`/models/tanks/${tank.id}/${selected!.name}.glb`, map);
+ return (
+
+ );
}
diff --git a/packages/website-ue/src/components/TankopediaSandbox/index.tsx b/packages/website-ue/src/components/TankopediaSandbox/index.tsx
index c36cb50f7..695793afb 100644
--- a/packages/website-ue/src/components/TankopediaSandbox/index.tsx
+++ b/packages/website-ue/src/components/TankopediaSandbox/index.tsx
@@ -1,10 +1,10 @@
import { type StageParameters } from "@protos/blitz_static_tank_upgrade_single_stage";
import { Canvas } from "@react-three/fiber";
import { fov } from "../../config/camera";
-import { useTankChassisModel } from "../../hooks/useTankChassisModel";
-import { useTankGunModel } from "../../hooks/useTankGunModel";
-import { useTankHullModel } from "../../hooks/useTankHullModel";
-import { useTankTurretModel } from "../../hooks/useTankTurretModel";
+import { TankModelChassis } from "../TankModelChassis";
+import { TankModelGun } from "../TankModelGun";
+import { TankModelHull } from "../TankModelHull";
+import { TankModelTurret } from "../TankModelTurret";
import { TankopediaControls } from "../TankopediaControls";
import { TankopediaLighting } from "../TankopediaLighting";
import { SceneProps } from "../TankopediaSceneProps";
@@ -32,25 +32,14 @@ export function TankopediaSandbox({ parameters }: TankopediaSandboxProps) {
}
function Content({ parameters }: TankopediaSandboxProps) {
- const hull = useTankHullModel();
- const chassis = useTankChassisModel();
- const turret = useTankTurretModel(parameters);
- const gun = useTankGunModel(parameters);
-
return (
<>
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+ {/**/}
diff --git a/packages/website-ue/src/hooks/useTankChassisModel.ts b/packages/website-ue/src/hooks/useTankChassisModel.ts
deleted file mode 100644
index d11a1c683..000000000
--- a/packages/website-ue/src/hooks/useTankChassisModel.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { useProtagonist } from "./useProtagonist";
-import { useTankModel } from "./useTankModel";
-
-export function useTankChassisModel() {
- const tank = useProtagonist();
-
- const map = {
- Wheels: true,
- LeftTracks: true,
- RightTracks: true,
- LeftTrackCrashed: false,
- RightTrackCrashed: false,
- CollisionMesh: false,
- };
-
- return useTankModel(`/models/tanks/${tank.id}/chassis.glb`, map);
-}
diff --git a/packages/website-ue/src/hooks/useTankHullModel.ts b/packages/website-ue/src/hooks/useTankHullModel.ts
deleted file mode 100644
index 63fb4dbd5..000000000
--- a/packages/website-ue/src/hooks/useTankHullModel.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { useProtagonist } from "./useProtagonist";
-import { useTankModel } from "./useTankModel";
-
-export function useTankHullModel() {
- const tank = useProtagonist();
-
- const map = {
- Mesh: true,
- CollisionMesh: false,
- };
-
- return useTankModel(`/models/tanks/${tank.id}/hull.glb`, map);
-}