Rename and refactor viewport preview types and functions
This commit is contained in:
@@ -3,13 +3,10 @@ import type { ToolMode } from "../core/tool-mode";
|
||||
import type { EntityKind } from "../entities/entity-instances";
|
||||
import type { ViewportPanelId } from "./viewport-layout";
|
||||
|
||||
export interface BoxCreateViewportToolPreview {
|
||||
kind: "box-create";
|
||||
sourcePanelId: ViewportPanelId;
|
||||
center: Vec3 | null;
|
||||
}
|
||||
|
||||
export type ViewportPlacementPreviewTarget =
|
||||
export type CreationTarget =
|
||||
| {
|
||||
kind: "box-brush";
|
||||
}
|
||||
| {
|
||||
kind: "entity";
|
||||
entityKind: EntityKind;
|
||||
@@ -20,14 +17,14 @@ export type ViewportPlacementPreviewTarget =
|
||||
assetId: string;
|
||||
};
|
||||
|
||||
export interface PlacementViewportToolPreview {
|
||||
kind: "placement";
|
||||
export interface CreationViewportToolPreview {
|
||||
kind: "create";
|
||||
sourcePanelId: ViewportPanelId;
|
||||
target: ViewportPlacementPreviewTarget;
|
||||
target: CreationTarget;
|
||||
center: Vec3 | null;
|
||||
}
|
||||
|
||||
export type ViewportToolPreview = BoxCreateViewportToolPreview | PlacementViewportToolPreview | { kind: "none" };
|
||||
export type ViewportToolPreview = CreationViewportToolPreview | { kind: "none" };
|
||||
|
||||
export interface ViewportTransientState {
|
||||
toolPreview: ViewportToolPreview;
|
||||
@@ -46,9 +43,9 @@ export function cloneViewportToolPreview(toolPreview: ViewportToolPreview): View
|
||||
return toolPreview;
|
||||
}
|
||||
|
||||
if (toolPreview.kind === "placement") {
|
||||
if (toolPreview.kind === "create") {
|
||||
return {
|
||||
kind: "placement",
|
||||
kind: "create",
|
||||
sourcePanelId: toolPreview.sourcePanelId,
|
||||
target:
|
||||
toolPreview.target.kind === "entity"
|
||||
@@ -57,17 +54,36 @@ export function cloneViewportToolPreview(toolPreview: ViewportToolPreview): View
|
||||
entityKind: toolPreview.target.entityKind,
|
||||
audioAssetId: toolPreview.target.audioAssetId
|
||||
}
|
||||
: {
|
||||
kind: "model-instance",
|
||||
assetId: toolPreview.target.assetId
|
||||
},
|
||||
: toolPreview.target.kind === "model-instance"
|
||||
? {
|
||||
kind: "model-instance",
|
||||
assetId: toolPreview.target.assetId
|
||||
}
|
||||
: {
|
||||
kind: "box-brush"
|
||||
},
|
||||
center: toolPreview.center === null ? null : { ...toolPreview.center }
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
kind: "box-create",
|
||||
kind: "create",
|
||||
sourcePanelId: toolPreview.sourcePanelId,
|
||||
target:
|
||||
toolPreview.target.kind === "entity"
|
||||
? {
|
||||
kind: "entity",
|
||||
entityKind: toolPreview.target.entityKind,
|
||||
audioAssetId: toolPreview.target.audioAssetId
|
||||
}
|
||||
: toolPreview.target.kind === "model-instance"
|
||||
? {
|
||||
kind: "model-instance",
|
||||
assetId: toolPreview.target.assetId
|
||||
}
|
||||
: {
|
||||
kind: "box-brush"
|
||||
},
|
||||
center: toolPreview.center === null ? null : { ...toolPreview.center }
|
||||
};
|
||||
}
|
||||
@@ -81,36 +97,28 @@ export function areViewportToolPreviewsEqual(left: ViewportToolPreview, right: V
|
||||
return true;
|
||||
}
|
||||
|
||||
if (left.kind === "placement" && right.kind === "placement") {
|
||||
if (left.sourcePanelId !== right.sourcePanelId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (left.target.kind !== right.target.kind) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (left.target.kind === "entity" && right.target.kind === "entity") {
|
||||
if (left.target.entityKind !== right.target.entityKind || left.target.audioAssetId !== right.target.audioAssetId) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (left.target.kind === "model-instance" && right.target.kind === "model-instance" && left.target.assetId !== right.target.assetId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (left.center === null || right.center === null) {
|
||||
return left.center === right.center;
|
||||
}
|
||||
|
||||
return left.center.x === right.center.x && left.center.y === right.center.y && left.center.z === right.center.z;
|
||||
if (left.kind !== "create" || right.kind !== "create") {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (left.sourcePanelId !== right.sourcePanelId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (left.target.kind !== right.target.kind) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (left.target.kind === "entity" && right.target.kind === "entity") {
|
||||
if (left.target.entityKind !== right.target.entityKind || left.target.audioAssetId !== right.target.audioAssetId) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (left.target.kind === "model-instance" && right.target.kind === "model-instance" && left.target.assetId !== right.target.assetId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (left.center === null || right.center === null) {
|
||||
return left.center === right.center;
|
||||
}
|
||||
@@ -123,13 +131,5 @@ export function isViewportToolPreviewCompatible(toolMode: ToolMode, toolPreview:
|
||||
return true;
|
||||
}
|
||||
|
||||
if (toolMode === "box-create") {
|
||||
return toolPreview.kind === "box-create";
|
||||
}
|
||||
|
||||
if (toolMode === "place") {
|
||||
return toolPreview.kind === "placement";
|
||||
}
|
||||
|
||||
return false;
|
||||
return toolMode === "create" && toolPreview.kind === "create";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user