diff --git a/apps/editor/components/editor.tsx b/apps/editor/components/editor.tsx index 09f769de..0248cbd4 100644 --- a/apps/editor/components/editor.tsx +++ b/apps/editor/components/editor.tsx @@ -5,11 +5,12 @@ import { initSpatialGridSync, ItemNode, sceneRegistry, + useRegistry, useScene, WallNode, } from "@pascal-app/core"; import { useGridEvents, useViewer, Viewer } from "@pascal-app/viewer"; -import { Stats } from "@react-three/drei"; +import { CameraControls, CameraControlsImpl, Stats } from "@react-three/drei"; import { useFrame, useThree } from "@react-three/fiber"; import { useEffect, useMemo, useRef } from "react"; import { Color, Object3D } from "three"; @@ -54,10 +55,37 @@ export default function Editor() { + ); } +const EditorCameraManager = () => { + const controls = useRef(null!); + const currentLevelId = useViewer((state) => state.currentLevelId); + + useEffect(() => { + let targetY = 0; + if (currentLevelId) { + const levelMesh = sceneRegistry.nodes.get(currentLevelId); + if (levelMesh) { + targetY = levelMesh.position.y; + } + } + const { position } = controls.current.camera; + controls.current.setLookAt( + position.x, + targetY + 5, + position.z, + 0, + targetY, + 0, + true, + ); + }, [currentLevelId]); + + return ; +}; const TestUndo = () => { const { undo, redo, futureStates, pastStates } = useScene.temporal.getState(); diff --git a/apps/editor/components/ui/primitives/sidebar.tsx b/apps/editor/components/ui/primitives/sidebar.tsx index 3c2d3cbb..f4b4d8f4 100644 --- a/apps/editor/components/ui/primitives/sidebar.tsx +++ b/apps/editor/components/ui/primitives/sidebar.tsx @@ -132,7 +132,7 @@ function SidebarProvider({