Update preview group creation to handle wireframe display mode

This commit is contained in:
2026-04-04 19:06:33 +02:00
parent 4c4fde5aae
commit 6eef0142e2
4 changed files with 36 additions and 11 deletions

View File

@@ -2987,18 +2987,21 @@ export class ViewportHost {
fallbackGroup.visible = false; fallbackGroup.visible = false;
return fallbackGroup; return fallbackGroup;
} }
case "entity": case "entity": {
let previewGroup: Group;
switch (toolPreview.target.entityKind) { switch (toolPreview.target.entityKind) {
case "pointLight": case "pointLight":
return this.createPointLightGizmoRenderObjects( previewGroup = this.createPointLightGizmoRenderObjects(
"creation-preview", "creation-preview",
previewPosition, previewPosition,
DEFAULT_POINT_LIGHT_DISTANCE, DEFAULT_POINT_LIGHT_DISTANCE,
PLACEMENT_PREVIEW_COLOR_HEX, PLACEMENT_PREVIEW_COLOR_HEX,
false false
).group; ).group;
break;
case "spotLight": case "spotLight":
return this.createSpotLightGizmoRenderObjects( previewGroup = this.createSpotLightGizmoRenderObjects(
"creation-preview", "creation-preview",
previewPosition, previewPosition,
DEFAULT_SPOT_LIGHT_DIRECTION, DEFAULT_SPOT_LIGHT_DIRECTION,
@@ -3007,8 +3010,9 @@ export class ViewportHost {
PLACEMENT_PREVIEW_COLOR_HEX, PLACEMENT_PREVIEW_COLOR_HEX,
false false
).group; ).group;
break;
case "playerStart": case "playerStart":
return this.createPlayerStartRenderObjects( previewGroup = this.createPlayerStartRenderObjects(
"creation-preview", "creation-preview",
previewPosition, previewPosition,
DEFAULT_PLAYER_START_YAW_DEGREES, DEFAULT_PLAYER_START_YAW_DEGREES,
@@ -3021,8 +3025,9 @@ export class ViewportHost {
}, },
false false
).group; ).group;
break;
case "soundEmitter": case "soundEmitter":
return this.createSoundEmitterRenderObjects( previewGroup = this.createSoundEmitterRenderObjects(
"creation-preview", "creation-preview",
previewPosition, previewPosition,
DEFAULT_SOUND_EMITTER_REF_DISTANCE, DEFAULT_SOUND_EMITTER_REF_DISTANCE,
@@ -3030,31 +3035,41 @@ export class ViewportHost {
false, false,
BOX_CREATE_PREVIEW_FILL BOX_CREATE_PREVIEW_FILL
).group; ).group;
break;
case "triggerVolume": case "triggerVolume":
return this.createTriggerVolumeRenderObjects( previewGroup = this.createTriggerVolumeRenderObjects(
"creation-preview", "creation-preview",
previewPosition, previewPosition,
DEFAULT_TRIGGER_VOLUME_SIZE, DEFAULT_TRIGGER_VOLUME_SIZE,
false, false,
BOX_CREATE_PREVIEW_FILL BOX_CREATE_PREVIEW_FILL
).group; ).group;
break;
case "teleportTarget": case "teleportTarget":
return this.createTeleportTargetRenderObjects( previewGroup = this.createTeleportTargetRenderObjects(
"creation-preview", "creation-preview",
previewPosition, previewPosition,
DEFAULT_TELEPORT_TARGET_YAW_DEGREES, DEFAULT_TELEPORT_TARGET_YAW_DEGREES,
false, false,
BOX_CREATE_PREVIEW_FILL BOX_CREATE_PREVIEW_FILL
).group; ).group;
break;
case "interactable": case "interactable":
return this.createInteractableRenderObjects( previewGroup = this.createInteractableRenderObjects(
"creation-preview", "creation-preview",
previewPosition, previewPosition,
DEFAULT_INTERACTABLE_RADIUS, DEFAULT_INTERACTABLE_RADIUS,
false, false,
BOX_CREATE_PREVIEW_FILL BOX_CREATE_PREVIEW_FILL
).group; ).group;
break;
} }
if (this.displayMode === "wireframe") {
this.applyWireframePresentation(previewGroup);
}
return previewGroup;
}
case "model-instance": { case "model-instance": {
const asset = this.projectAssets[toolPreview.target.assetId]; const asset = this.projectAssets[toolPreview.target.assetId];
const loadedAsset = this.loadedModelAssets[toolPreview.target.assetId]; const loadedAsset = this.loadedModelAssets[toolPreview.target.assetId];
@@ -3072,7 +3087,14 @@ export class ViewportHost {
scale: DEFAULT_MODEL_INSTANCE_SCALE scale: DEFAULT_MODEL_INSTANCE_SCALE
}); });
return createModelInstanceRenderGroup(dummyModelInstance, asset, loadedAsset, false, BOX_CREATE_PREVIEW_FILL); return createModelInstanceRenderGroup(
dummyModelInstance,
asset,
loadedAsset,
false,
BOX_CREATE_PREVIEW_FILL,
this.displayMode === "wireframe" ? "wireframe" : "normal"
);
} }
} }

View File

@@ -74,7 +74,7 @@ describe("EditorStore", () => {
writerStore.setViewportLayoutMode("quad"); writerStore.setViewportLayoutMode("quad");
writerStore.setActiveViewportPanel("bottomRight"); writerStore.setActiveViewportPanel("bottomRight");
writerStore.setViewportPanelViewMode("topLeft", "top"); writerStore.setViewportPanelViewMode("topLeft", "top");
writerStore.setViewportPanelDisplayMode("topLeft", "authoring"); writerStore.setViewportPanelDisplayMode("topLeft", "wireframe");
writerStore.setViewportPanelCameraState("topLeft", { writerStore.setViewportPanelCameraState("topLeft", {
target: { target: {
x: 6, x: 6,
@@ -107,7 +107,7 @@ describe("EditorStore", () => {
expect(readerStore.getState().activeViewportPanelId).toBe("bottomRight"); expect(readerStore.getState().activeViewportPanelId).toBe("bottomRight");
expect(readerStore.getState().viewportPanels.topLeft).toMatchObject({ expect(readerStore.getState().viewportPanels.topLeft).toMatchObject({
viewMode: "top", viewMode: "top",
displayMode: "authoring", displayMode: "wireframe",
cameraState: { cameraState: {
target: { target: {
x: 6, x: 6,

View File

@@ -126,6 +126,7 @@ describe("local draft storage", () => {
viewportLayoutState.layoutMode = "quad"; viewportLayoutState.layoutMode = "quad";
viewportLayoutState.activePanelId = "bottomRight"; viewportLayoutState.activePanelId = "bottomRight";
viewportLayoutState.panels.topLeft.displayMode = "wireframe";
viewportLayoutState.panels.topLeft.cameraState.target = { viewportLayoutState.panels.topLeft.cameraState.target = {
x: 8, x: 8,
y: 3, y: 3,
@@ -151,6 +152,7 @@ describe("local draft storage", () => {
activePanelId: "bottomRight", activePanelId: "bottomRight",
panels: { panels: {
topLeft: { topLeft: {
displayMode: "wireframe",
cameraState: { cameraState: {
target: { target: {
x: 8, x: 8,

View File

@@ -39,6 +39,7 @@ describe("viewport layout", () => {
expect(getViewportLayoutModeLabel("single")).toBe("Single View"); expect(getViewportLayoutModeLabel("single")).toBe("Single View");
expect(getViewportLayoutModeLabel("quad")).toBe("4-Panel"); expect(getViewportLayoutModeLabel("quad")).toBe("4-Panel");
expect(getViewportDisplayModeLabel("authoring")).toBe("Authoring"); expect(getViewportDisplayModeLabel("authoring")).toBe("Authoring");
expect(getViewportDisplayModeLabel("wireframe")).toBe("Wireframe");
expect(getViewportPanelLabel("topRight")).toBe("Top Right"); expect(getViewportPanelLabel("topRight")).toBe("Top Right");
}); });
}); });