Files
webeditor3d/src/commands/set-world-settings-command.ts

43 lines
1.1 KiB
TypeScript

import { createOpaqueId } from "../core/ids";
import { cloneWorldSettings, type WorldSettings } from "../document/world-settings";
import type { EditorCommand } from "./command";
interface SetWorldSettingsCommandOptions {
label: string;
world: WorldSettings;
}
export function createSetWorldSettingsCommand(options: SetWorldSettingsCommandOptions): EditorCommand {
const nextWorld = cloneWorldSettings(options.world);
let previousWorld: WorldSettings | null = null;
return {
id: createOpaqueId("command"),
label: options.label,
execute(context) {
const currentDocument = context.getDocument();
if (previousWorld === null) {
previousWorld = cloneWorldSettings(currentDocument.world);
}
context.setDocument({
...currentDocument,
world: cloneWorldSettings(nextWorld)
});
},
undo(context) {
if (previousWorld === null) {
return;
}
const currentDocument = context.getDocument();
context.setDocument({
...currentDocument,
world: cloneWorldSettings(previousWorld)
});
}
};
}