import { useState, useEffect } from 'react' import { sceneInfra } from '../clientSideScene/sceneInfra' import { engineCommandManager } from 'lang/std/engineConnection' import { throttle, isReducedMotion } from 'lib/utils' const updateDollyZoom = throttle( (newFov: number) => sceneInfra.dollyZoom(newFov), 1000 / 15 ) export const CamToggle = () => { const [isPerspective, setIsPerspective] = useState(true) const [fov, setFov] = useState(40) const [enableRotate, setEnableRotate] = useState(true) useEffect(() => { engineCommandManager.waitForReady.then(async () => { sceneInfra.dollyZoom(fov) }) }, []) const toggleCamera = () => { if (isPerspective) { isReducedMotion() ? sceneInfra.useOrthographicCamera() : sceneInfra.animateToOrthographic() } else { isReducedMotion() ? sceneInfra.usePerspectiveCamera() : sceneInfra.animateToPerspective() } setIsPerspective(!isPerspective) } const handleFovChange = (newFov: number) => { setFov(newFov) updateDollyZoom(newFov) } return (