From cec4d6ad0de3d173400bd76058a50125acd8bd09 Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Mon, 11 May 2026 13:01:32 +0200 Subject: [PATCH] update: reset repair runtime state --- src/components/three/gameplay/RepairGame.tsx | 22 +++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/components/three/gameplay/RepairGame.tsx b/src/components/three/gameplay/RepairGame.tsx index 17108fc..2da937e 100644 --- a/src/components/three/gameplay/RepairGame.tsx +++ b/src/components/three/gameplay/RepairGame.tsx @@ -19,7 +19,10 @@ import { } from "@/data/gameplay/repairMissions"; import { useRepairFragmentationInput } from "@/hooks/gameplay/useRepairFragmentationInput"; import { useRepairMissionStep } from "@/hooks/gameplay/useRepairMissionStep"; -import type { RepairMissionId } from "@/types/gameplay/repairMission"; +import type { + MissionStep, + RepairMissionId, +} from "@/types/gameplay/repairMission"; import { useGameStore } from "@/managers/stores/useGameStore"; import type { ModelTransformProps, Vector3Tuple } from "@/types/three/three"; import { toVector3Scale } from "@/utils/three/scale"; @@ -75,6 +78,19 @@ export function RepairGame({ onFragment: () => setMissionStep(mission, "fragmented"), }); + useEffect(() => { + if (mainState === mission && shouldKeepRepairRuntimeState(step)) return; + + const timeoutId = window.setTimeout(() => { + setCasePlaceholders([]); + setScannedBrokenParts([]); + }, 0); + + return () => { + window.clearTimeout(timeoutId); + }; + }, [mainState, mission, step]); + useEffect(() => { if (mainState !== mission) return undefined; @@ -156,6 +172,10 @@ export function RepairGame({ ); } +function shouldKeepRepairRuntimeState(step: MissionStep): boolean { + return step === "repairing" || step === "reassembling" || step === "done"; +} + function getRepairMissionModelPaths(config: RepairMissionConfig): string[] { return [ ...new Set([