Files
webeditor3d/src/commands/set-active-scene-command.ts

49 lines
1.4 KiB
TypeScript

import { createOpaqueId } from "../core/ids";
import type { EditorCommand } from "./command";
export function createSetActiveSceneCommand(nextSceneId: string): EditorCommand {
let previousSceneId: string | null = null;
return {
id: createOpaqueId("command"),
label: "Switch active scene",
execute(context) {
const currentProjectDocument = context.getProjectDocument();
if (currentProjectDocument.scenes[nextSceneId] === undefined) {
throw new Error(`Cannot activate missing scene ${nextSceneId}.`);
}
if (previousSceneId === null) {
previousSceneId = currentProjectDocument.activeSceneId;
}
context.setProjectDocument({
...currentProjectDocument,
activeSceneId: nextSceneId
});
context.setSelection({ kind: "none" });
context.setToolMode("select");
},
undo(context) {
if (previousSceneId === null) {
return;
}
const currentProjectDocument = context.getProjectDocument();
if (currentProjectDocument.scenes[previousSceneId] === undefined) {
throw new Error(`Cannot restore missing scene ${previousSceneId}.`);
}
context.setProjectDocument({
...currentProjectDocument,
activeSceneId: previousSceneId
});
context.setSelection({ kind: "none" });
context.setToolMode("select");
}
};
}