update: stabilize repair mission stage mounting

This commit is contained in:
Tom Boullay
2026-05-11 11:51:06 +02:00
parent e8fefe411e
commit b90f33d9c2
+38 -12
View File
@@ -1,5 +1,6 @@
import { RepairGame } from "@/components/three/gameplay/RepairGame";
import { useGameStore } from "@/managers/stores/useGameStore";
import type { RepairMissionId } from "@/types/gameplay/repairMission";
import type { Vector3Tuple } from "@/types/three/three";
interface StageAnchorProps {
@@ -8,6 +9,26 @@ interface StageAnchorProps {
scale?: number;
}
interface GameRepairZone {
mission: RepairMissionId;
position: Vector3Tuple;
}
const GAME_REPAIR_ZONES = [
{
mission: "bike",
position: [8, 0, -6],
},
{
mission: "pylone",
position: [64, 0, -66],
},
{
mission: "ferme",
position: [-24, 0, 42],
},
] as const satisfies readonly GameRepairZone[];
function StageAnchor({
color,
position,
@@ -30,16 +51,21 @@ function StageAnchor({
export function GameStageContent(): React.JSX.Element {
const mainState = useGameStore((state) => state.mainState);
switch (mainState) {
case "intro":
return <StageAnchor color="#7dd3fc" position={[0, 4, 0]} />;
case "bike":
return <RepairGame mission="bike" position={[8, 0, -6]} />;
case "pylone":
return <RepairGame mission="pylone" position={[64, 0, -66]} />;
case "ferme":
return <RepairGame mission="ferme" position={[-24, 0, 42]} />;
case "outro":
return <StageAnchor color="#fb7185" position={[0, 6, 10]} scale={1.25} />;
}
return (
<>
{mainState === "intro" ? (
<StageAnchor color="#7dd3fc" position={[0, 4, 0]} />
) : null}
{GAME_REPAIR_ZONES.map((zone) => (
<RepairGame
key={zone.mission}
mission={zone.mission}
position={zone.position}
/>
))}
{mainState === "outro" ? (
<StageAnchor color="#fb7185" position={[0, 6, 10]} scale={1.25} />
) : null}
</>
);
}