import { useRef } from "react"; import { useFrame } from "@react-three/fiber"; import * as THREE from "three"; interface RepairScanVisualProps { target?: THREE.Object3D | null | undefined; } export function RepairScanVisual({ target = null, }: RepairScanVisualProps): React.JSX.Element { const groupRef = useRef(null); const scanLineRef = useRef(null); const worldPosition = useRef(new THREE.Vector3()); const localPosition = useRef(new THREE.Vector3()); useFrame(({ clock }) => { const group = groupRef.current; const scanLine = scanLineRef.current; if (!group || !scanLine) return; if (target) { target.getWorldPosition(worldPosition.current); localPosition.current.copy(worldPosition.current); group.parent?.worldToLocal(localPosition.current); group.position.copy(localPosition.current); } scanLine.position.y = 0.35 + Math.sin(clock.elapsedTime * 4) * 0.7; }); return ( ); }