diff --git a/src/commands/commit-transform-session-command.ts b/src/commands/commit-transform-session-command.ts index 90ee991c..69169c88 100644 --- a/src/commands/commit-transform-session-command.ts +++ b/src/commands/commit-transform-session-command.ts @@ -1,4 +1,5 @@ import { createMoveBoxBrushCommand } from "./move-box-brush-command"; +import { createApplyBatchSelectionTransformCommand } from "./apply-batch-selection-transform-command"; import { createResizeBoxBrushCommand } from "./resize-box-brush-command"; import { createRotateBoxBrushCommand } from "./rotate-box-brush-command"; import { createSetPathPointPositionCommand } from "./set-path-point-position-command"; @@ -31,6 +32,12 @@ function createTransformCommandLabel(session: ActiveTransformSession): string { case "brush": targetLabel = "whitebox box"; break; + case "brushes": + targetLabel = + session.target.items.length === 1 + ? "whitebox solid" + : `${session.target.items.length} whitebox solids`; + break; case "brushFace": targetLabel = "whitebox face"; break; @@ -65,13 +72,104 @@ function createTransformCommandLabel(session: ActiveTransformSession): string { ? "interactable" : "entity"; break; + case "entities": + targetLabel = + session.target.items.length === 1 + ? "entity" + : `${session.target.items.length} entities`; + break; case "modelInstance": break; + case "modelInstances": + targetLabel = + session.target.items.length === 1 + ? "model instance" + : `${session.target.items.length} model instances`; + break; } return `${getTransformOperationLabel(session.operation)} ${targetLabel}`; } +function createUpdatedEntityFromPreview( + entity: SceneDocument["entities"][string], + preview: { + position: { x: number; y: number; z: number }; + rotation: + | { kind: "none" } + | { kind: "yaw"; yawDegrees: number } + | { kind: "direction"; direction: { x: number; y: number; z: number } }; + } +) { + switch (entity.kind) { + case "pointLight": + return createPointLightEntity({ + ...entity, + position: preview.position + }); + case "spotLight": + return createSpotLightEntity({ + ...entity, + position: preview.position, + direction: + preview.rotation.kind === "direction" + ? preview.rotation.direction + : entity.direction + }); + case "playerStart": + return createPlayerStartEntity({ + ...entity, + position: preview.position, + yawDegrees: + preview.rotation.kind === "yaw" + ? preview.rotation.yawDegrees + : entity.yawDegrees + }); + case "sceneEntry": + return createSceneEntryEntity({ + ...entity, + position: preview.position, + yawDegrees: + preview.rotation.kind === "yaw" + ? preview.rotation.yawDegrees + : entity.yawDegrees + }); + case "npc": + return createNpcEntity({ + ...entity, + position: preview.position, + yawDegrees: + preview.rotation.kind === "yaw" + ? preview.rotation.yawDegrees + : entity.yawDegrees + }); + case "soundEmitter": + return createSoundEmitterEntity({ + ...entity, + position: preview.position + }); + case "triggerVolume": + return createTriggerVolumeEntity({ + ...entity, + position: preview.position + }); + case "teleportTarget": + return createTeleportTargetEntity({ + ...entity, + position: preview.position, + yawDegrees: + preview.rotation.kind === "yaw" + ? preview.rotation.yawDegrees + : entity.yawDegrees + }); + case "interactable": + return createInteractableEntity({ + ...entity, + position: preview.position + }); + } +} + export function createCommitTransformSessionCommand(document: SceneDocument, session: ActiveTransformSession): EditorCommand { switch (session.target.kind) { case "brush":