Add scene creation and active scene switching commands
This commit is contained in:
48
src/commands/set-active-scene-command.ts
Normal file
48
src/commands/set-active-scene-command.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
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");
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user