module selection

This commit is contained in:
tresabhi committed 2026-06-10 12:51:06 -05:00
1 parent 965acadc3f
commit 648344d7cc
2 files changed
+28 -10

No files matched your search

@@ -1,3 +1,7 @@
import {
VisualChanges_TankPart,
type StageParameters,
} from "@protos/blitz_static_tank_upgrade_single_stage";
import { OrbitControls } from "@react-three/drei"; import { OrbitControls } from "@react-three/drei";
import { Canvas, useLoader } from "@react-three/fiber"; import { Canvas, useLoader } from "@react-three/fiber";
import { Mesh, MeshStandardMaterial } from "three"; import { Mesh, MeshStandardMaterial } from "three";
@@ -5,7 +9,11 @@ import { GLTFLoader } from "three-stdlib";
import { useProtagonist } from "../../hooks/useProtagonist"; import { useProtagonist } from "../../hooks/useProtagonist";
import styles from "./index.module.css"; import styles from "./index.module.css";
export function TankopediaSandbox() { interface TankopediaSandboxProps {
parameters: StageParameters;
}
export function TankopediaSandbox({ parameters }: TankopediaSandboxProps) {
return ( return (
<div className={styles.wrapper}> <div className={styles.wrapper}>
<div className={styles.sandbox}> <div className={styles.sandbox}>
@@ -15,23 +23,33 @@ export function TankopediaSandbox() {
className={styles.canvas} className={styles.canvas}
frameloop="demand" frameloop="demand"
> >
{!import.meta.env.SSR && <Content />} {!import.meta.env.SSR && <Content parameters={parameters} />}
</Canvas> </Canvas>
</div> </div>
</div> </div>
); );
} }
function Content() { function Content({ parameters }: TankopediaSandboxProps) {
const tank = useProtagonist(); const tank = useProtagonist();
const turret = useLoader( const selectedTurret = parameters.visual_changes.find(
GLTFLoader, ({ tank_part }) => tank_part === VisualChanges_TankPart.TANK_PART_TURRET,
`/models/tanks/${tank.id}/turret_01.glb`, )!.name;
); const selectedGun = parameters.visual_changes.find(
const gun = useLoader(GLTFLoader, `/models/tanks/${tank.id}/gun_01.glb`); ({ tank_part }) => tank_part === VisualChanges_TankPart.TANK_PART_GUN,
)!.name;
const hull = useLoader(GLTFLoader, `/models/tanks/${tank.id}/hull.glb`); const hull = useLoader(GLTFLoader, `/models/tanks/${tank.id}/hull.glb`);
const chassis = useLoader(GLTFLoader, `/models/tanks/${tank.id}/chassis.glb`); const chassis = useLoader(GLTFLoader, `/models/tanks/${tank.id}/chassis.glb`);
const turret = useLoader(
GLTFLoader,
`/models/tanks/${tank.id}/${selectedTurret}.glb`,
);
const gun = useLoader(
GLTFLoader,
`/models/tanks/${tank.id}/${selectedGun}.glb`,
);
const gltfs = [turret, gun, hull, chassis]; const gltfs = [turret, gun, hull, chassis];
@@ -24,7 +24,7 @@ export const Page = withErrorWrapper(
const protagonist = Tankopedia.use((state) => state.protagonist); const protagonist = Tankopedia.use((state) => state.protagonist);
const protagonistEquipment = useEquipment(protagonistTank.tank!); const protagonistEquipment = useEquipment(protagonistTank.tank!);
const { characteristics } = useMemo( const { characteristics, parameters } = useMemo(
() => () =>
computeCharacteristics( computeCharacteristics(
protagonistTank, protagonistTank,
@@ -41,7 +41,7 @@ export const Page = withErrorWrapper(
</div> </div>
<div className={styles.sandbox}> <div className={styles.sandbox}>
<TankopediaSandbox /> <TankopediaSandbox parameters={parameters} />
<TankopediaCharacteristics characteristics={characteristics} /> <TankopediaCharacteristics characteristics={characteristics} />
</div> </div>
</div> </div>