Refactor viewport tool preview handling in viewport-host.ts
This commit is contained in:
@@ -91,7 +91,8 @@ import {
|
|||||||
import type { ViewportDisplayMode } from "./viewport-layout";
|
import type { ViewportDisplayMode } from "./viewport-layout";
|
||||||
import {
|
import {
|
||||||
areViewportToolPreviewsEqual,
|
areViewportToolPreviewsEqual,
|
||||||
type PlacementViewportToolPreview,
|
type CreationTarget,
|
||||||
|
type CreationViewportToolPreview,
|
||||||
type ViewportToolPreview
|
type ViewportToolPreview
|
||||||
} from "./viewport-transient-state";
|
} from "./viewport-transient-state";
|
||||||
|
|
||||||
@@ -207,17 +208,14 @@ export class ViewportHost {
|
|||||||
private animationFrame = 0;
|
private animationFrame = 0;
|
||||||
private container: HTMLElement | null = null;
|
private container: HTMLElement | null = null;
|
||||||
private brushSelectionChangeHandler: ((selection: EditorSelection) => void) | null = null;
|
private brushSelectionChangeHandler: ((selection: EditorSelection) => void) | null = null;
|
||||||
private createBoxBrushHandler: ((center: Vec3) => void) | null = null;
|
private creationPreviewChangeHandler: ((toolPreview: ViewportToolPreview) => void) | null = null;
|
||||||
private boxCreatePreviewChangeHandler: ((center: Vec3 | null) => void) | null = null;
|
private creationCommitHandler: ((toolPreview: CreationViewportToolPreview) => void) | null = null;
|
||||||
private placementPreviewChangeHandler: ((toolPreview: ViewportToolPreview) => void) | null = null;
|
|
||||||
private placementCommitHandler: ((toolPreview: PlacementViewportToolPreview) => void) | null = null;
|
|
||||||
private toolMode: ToolMode = "select";
|
private toolMode: ToolMode = "select";
|
||||||
private viewMode: ViewportViewMode = "perspective";
|
private viewMode: ViewportViewMode = "perspective";
|
||||||
private displayMode: ViewportDisplayMode = "normal";
|
private displayMode: ViewportDisplayMode = "normal";
|
||||||
private lastBoxCreatePreviewCenter: Vec3 | null = null;
|
private creationPreview: CreationViewportToolPreview | null = null;
|
||||||
private placementPreview: PlacementViewportToolPreview | null = null;
|
private creationPreviewTargetKey: string | null = null;
|
||||||
private placementPreviewTargetKey: string | null = null;
|
private creationPreviewObject: Group | null = null;
|
||||||
private placementPreviewObject: Group | null = null;
|
|
||||||
private activeCameraDragPointerId: number | null = null;
|
private activeCameraDragPointerId: number | null = null;
|
||||||
private lastCameraDragClientPosition: { x: number; y: number } | null = null;
|
private lastCameraDragClientPosition: { x: number; y: number } | null = null;
|
||||||
// Click-through cycling: track the last click position and the last picked object
|
// Click-through cycling: track the last click position and the last picked object
|
||||||
@@ -315,28 +313,16 @@ export class ViewportHost {
|
|||||||
this.brushSelectionChangeHandler = handler;
|
this.brushSelectionChangeHandler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
setCreateBoxBrushHandler(handler: ((center: Vec3) => void) | null) {
|
setCreationPreviewChangeHandler(handler: ((toolPreview: ViewportToolPreview) => void) | null) {
|
||||||
this.createBoxBrushHandler = handler;
|
this.creationPreviewChangeHandler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
setBoxCreatePreviewChangeHandler(handler: ((center: Vec3 | null) => void) | null) {
|
setCreationCommitHandler(handler: ((toolPreview: CreationViewportToolPreview) => void) | null) {
|
||||||
this.boxCreatePreviewChangeHandler = handler;
|
this.creationCommitHandler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
setBoxCreatePreview(center: Vec3 | null) {
|
setCreationPreview(toolPreview: CreationViewportToolPreview | null) {
|
||||||
this.syncBoxCreatePreview(center);
|
this.syncCreationPreview(toolPreview);
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setToolMode(toolMode: ToolMode) {
|
setToolMode(toolMode: ToolMode) {
|
||||||
@@ -344,12 +330,8 @@ export class ViewportHost {
|
|||||||
this.lastClickPointer = null;
|
this.lastClickPointer = null;
|
||||||
this.lastClickSelectionKey = null;
|
this.lastClickSelectionKey = null;
|
||||||
|
|
||||||
if (toolMode !== "box-create") {
|
if (toolMode !== "create") {
|
||||||
this.syncBoxCreatePreview(null);
|
this.syncCreationPreview(null);
|
||||||
}
|
|
||||||
|
|
||||||
if (toolMode !== "place") {
|
|
||||||
this.syncPlacementPreview(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,11 +417,9 @@ export class ViewportHost {
|
|||||||
this.clearLocalLights();
|
this.clearLocalLights();
|
||||||
this.clearBrushMeshes();
|
this.clearBrushMeshes();
|
||||||
this.clearEntityMarkers();
|
this.clearEntityMarkers();
|
||||||
this.boxCreatePreviewChangeHandler = null;
|
this.creationPreviewChangeHandler = null;
|
||||||
this.syncBoxCreatePreview(null);
|
this.creationCommitHandler = null;
|
||||||
this.placementPreviewChangeHandler = null;
|
this.syncCreationPreview(null);
|
||||||
this.placementCommitHandler = null;
|
|
||||||
this.syncPlacementPreview(null);
|
|
||||||
this.advancedRenderingComposer?.dispose();
|
this.advancedRenderingComposer?.dispose();
|
||||||
this.advancedRenderingComposer = null;
|
this.advancedRenderingComposer = null;
|
||||||
this.currentAdvancedRenderingSettings = null;
|
this.currentAdvancedRenderingSettings = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user