From 1344c404d352eea5994062f007683231f7c4146a Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Fri, 3 Apr 2026 00:21:14 +0200 Subject: [PATCH] Refactor viewport tool preview handling in viewport-host.ts --- src/viewport-three/viewport-host.ts | 56 ++++++++++------------------- 1 file changed, 18 insertions(+), 38 deletions(-) diff --git a/src/viewport-three/viewport-host.ts b/src/viewport-three/viewport-host.ts index 712b799f..d1e30160 100644 --- a/src/viewport-three/viewport-host.ts +++ b/src/viewport-three/viewport-host.ts @@ -91,7 +91,8 @@ import { import type { ViewportDisplayMode } from "./viewport-layout"; import { areViewportToolPreviewsEqual, - type PlacementViewportToolPreview, + type CreationTarget, + type CreationViewportToolPreview, type ViewportToolPreview } from "./viewport-transient-state"; @@ -207,17 +208,14 @@ export class ViewportHost { private animationFrame = 0; private container: HTMLElement | null = null; private brushSelectionChangeHandler: ((selection: EditorSelection) => void) | null = null; - private createBoxBrushHandler: ((center: Vec3) => void) | null = null; - private boxCreatePreviewChangeHandler: ((center: Vec3 | null) => void) | null = null; - private placementPreviewChangeHandler: ((toolPreview: ViewportToolPreview) => void) | null = null; - private placementCommitHandler: ((toolPreview: PlacementViewportToolPreview) => void) | null = null; + private creationPreviewChangeHandler: ((toolPreview: ViewportToolPreview) => void) | null = null; + private creationCommitHandler: ((toolPreview: CreationViewportToolPreview) => void) | null = null; private toolMode: ToolMode = "select"; private viewMode: ViewportViewMode = "perspective"; private displayMode: ViewportDisplayMode = "normal"; - private lastBoxCreatePreviewCenter: Vec3 | null = null; - private placementPreview: PlacementViewportToolPreview | null = null; - private placementPreviewTargetKey: string | null = null; - private placementPreviewObject: Group | null = null; + private creationPreview: CreationViewportToolPreview | null = null; + private creationPreviewTargetKey: string | null = null; + private creationPreviewObject: Group | null = null; private activeCameraDragPointerId: number | null = null; private lastCameraDragClientPosition: { x: number; y: number } | null = null; // Click-through cycling: track the last click position and the last picked object @@ -315,28 +313,16 @@ export class ViewportHost { this.brushSelectionChangeHandler = handler; } - setCreateBoxBrushHandler(handler: ((center: Vec3) => void) | null) { - this.createBoxBrushHandler = handler; + setCreationPreviewChangeHandler(handler: ((toolPreview: ViewportToolPreview) => void) | null) { + this.creationPreviewChangeHandler = handler; } - setBoxCreatePreviewChangeHandler(handler: ((center: Vec3 | null) => void) | null) { - this.boxCreatePreviewChangeHandler = handler; + setCreationCommitHandler(handler: ((toolPreview: CreationViewportToolPreview) => void) | null) { + this.creationCommitHandler = handler; } - setBoxCreatePreview(center: Vec3 | null) { - this.syncBoxCreatePreview(center); - } - - setPlacementPreviewChangeHandler(handler: ((toolPreview: ViewportToolPreview) => void) | null) { - this.placementPreviewChangeHandler = handler; - } - - setPlacementCommitHandler(handler: ((toolPreview: PlacementViewportToolPreview) => void) | null) { - this.placementCommitHandler = handler; - } - - setPlacementPreview(toolPreview: PlacementViewportToolPreview | null) { - this.syncPlacementPreview(toolPreview); + setCreationPreview(toolPreview: CreationViewportToolPreview | null) { + this.syncCreationPreview(toolPreview); } setToolMode(toolMode: ToolMode) { @@ -344,12 +330,8 @@ export class ViewportHost { this.lastClickPointer = null; this.lastClickSelectionKey = null; - if (toolMode !== "box-create") { - this.syncBoxCreatePreview(null); - } - - if (toolMode !== "place") { - this.syncPlacementPreview(null); + if (toolMode !== "create") { + this.syncCreationPreview(null); } } @@ -435,11 +417,9 @@ export class ViewportHost { this.clearLocalLights(); this.clearBrushMeshes(); this.clearEntityMarkers(); - this.boxCreatePreviewChangeHandler = null; - this.syncBoxCreatePreview(null); - this.placementPreviewChangeHandler = null; - this.placementCommitHandler = null; - this.syncPlacementPreview(null); + this.creationPreviewChangeHandler = null; + this.creationCommitHandler = null; + this.syncCreationPreview(null); this.advancedRenderingComposer?.dispose(); this.advancedRenderingComposer = null; this.currentAdvancedRenderingSettings = null;