Add camera state handling to ViewportCanvas
This commit is contained in:
@@ -9,7 +9,13 @@ import type { Vec3 } from "../core/vector";
|
|||||||
import type { SceneDocument } from "../document/scene-document";
|
import type { SceneDocument } from "../document/scene-document";
|
||||||
import type { WorldSettings } from "../document/world-settings";
|
import type { WorldSettings } from "../document/world-settings";
|
||||||
import { createWorldBackgroundStyle } from "../shared-ui/world-background-style";
|
import { createWorldBackgroundStyle } from "../shared-ui/world-background-style";
|
||||||
import { getViewportPanelLabel, type ViewportDisplayMode, type ViewportLayoutMode, type ViewportPanelId } from "./viewport-layout";
|
import {
|
||||||
|
getViewportPanelLabel,
|
||||||
|
type ViewportDisplayMode,
|
||||||
|
type ViewportLayoutMode,
|
||||||
|
type ViewportPanelCameraState,
|
||||||
|
type ViewportPanelId
|
||||||
|
} from "./viewport-layout";
|
||||||
import {
|
import {
|
||||||
getViewportViewModeLabel,
|
getViewportViewModeLabel,
|
||||||
type ViewportViewMode
|
type ViewportViewMode
|
||||||
@@ -28,6 +34,7 @@ interface ViewportCanvasProps {
|
|||||||
selection: EditorSelection;
|
selection: EditorSelection;
|
||||||
toolMode: ToolMode;
|
toolMode: ToolMode;
|
||||||
toolPreview: ViewportToolPreview;
|
toolPreview: ViewportToolPreview;
|
||||||
|
cameraState: ViewportPanelCameraState;
|
||||||
viewMode: ViewportViewMode;
|
viewMode: ViewportViewMode;
|
||||||
displayMode: ViewportDisplayMode;
|
displayMode: ViewportDisplayMode;
|
||||||
layoutMode: ViewportLayoutMode;
|
layoutMode: ViewportLayoutMode;
|
||||||
@@ -36,6 +43,7 @@ interface ViewportCanvasProps {
|
|||||||
focusSelection: EditorSelection;
|
focusSelection: EditorSelection;
|
||||||
onSelectionChange(selection: EditorSelection): void;
|
onSelectionChange(selection: EditorSelection): void;
|
||||||
onCommitCreation(toolPreview: CreationViewportToolPreview): boolean;
|
onCommitCreation(toolPreview: CreationViewportToolPreview): boolean;
|
||||||
|
onCameraStateChange(cameraState: ViewportPanelCameraState): void;
|
||||||
onToolPreviewChange(toolPreview: ViewportToolPreview): void;
|
onToolPreviewChange(toolPreview: ViewportToolPreview): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,6 +57,7 @@ export function ViewportCanvas({
|
|||||||
selection,
|
selection,
|
||||||
toolMode,
|
toolMode,
|
||||||
toolPreview,
|
toolPreview,
|
||||||
|
cameraState,
|
||||||
viewMode,
|
viewMode,
|
||||||
displayMode,
|
displayMode,
|
||||||
layoutMode,
|
layoutMode,
|
||||||
@@ -57,6 +66,7 @@ export function ViewportCanvas({
|
|||||||
focusSelection,
|
focusSelection,
|
||||||
onSelectionChange,
|
onSelectionChange,
|
||||||
onCommitCreation,
|
onCommitCreation,
|
||||||
|
onCameraStateChange,
|
||||||
onToolPreviewChange
|
onToolPreviewChange
|
||||||
}: ViewportCanvasProps) {
|
}: ViewportCanvasProps) {
|
||||||
const containerRef = useRef<HTMLDivElement | null>(null);
|
const containerRef = useRef<HTMLDivElement | null>(null);
|
||||||
@@ -118,10 +128,18 @@ export function ViewportCanvas({
|
|||||||
hostRef.current?.setDisplayMode(displayMode);
|
hostRef.current?.setDisplayMode(displayMode);
|
||||||
}, [displayMode]);
|
}, [displayMode]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
hostRef.current?.setCameraState(cameraState);
|
||||||
|
}, [cameraState]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
hostRef.current?.setBrushSelectionChangeHandler(onSelectionChange);
|
hostRef.current?.setBrushSelectionChangeHandler(onSelectionChange);
|
||||||
}, [onSelectionChange]);
|
}, [onSelectionChange]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
hostRef.current?.setCameraStateChangeHandler(onCameraStateChange);
|
||||||
|
}, [onCameraStateChange]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
hostRef.current?.setCreationPreviewChangeHandler((nextToolPreview) => {
|
hostRef.current?.setCreationPreviewChangeHandler((nextToolPreview) => {
|
||||||
onToolPreviewChange(
|
onToolPreviewChange(
|
||||||
|
|||||||
Reference in New Issue
Block a user