-
David Sehnal authoredDavid Sehnal authored
state.ts 2.11 KiB
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { State, StateTree } from 'mol-state';
import { PluginStateObjects as SO } from './state/objects';
import { Camera } from 'mol-canvas3d/camera';
export { PluginState }
class PluginState {
readonly data: State;
readonly behavior: State;
getSnapshot(): PluginState.Snapshot {
return {
data: this.data.getSnapshot(),
behaviour: this.behavior.getSnapshot(),
canvas3d: {
camera: this.plugin.canvas3d.camera.getSnapshot()
}
};
}
async setSnapshot(snapshot: PluginState.Snapshot) {
await this.behavior.setSnapshot(snapshot.behaviour);
await this.data.setSnapshot(snapshot.data);
this.plugin.canvas3d.camera.setState(snapshot.canvas3d.camera);
// TODO: handle camera
// console.log({ old: { ...this.plugin.canvas3d.camera }, new: snapshot.canvas3d.camera });
// CombinedCamera.copy(snapshot.canvas3d.camera, this.plugin.canvas3d.camera);
// CombinedCamera.update(this.plugin.canvas3d.camera);
// this.plugin.canvas3d.center
// console.log({ copied: { ...this.plugin.canvas3d.camera } });
this.plugin.canvas3d.requestDraw(true);
// console.log('updated camera');
}
updateData(tree: StateTree) {
return this.plugin.runTask(this.data.update(tree));
}
updateBehaviour(tree: StateTree) {
return this.plugin.runTask(this.behavior.update(tree));
}
dispose() {
this.data.dispose();
}
constructor(private plugin: import('./context').PluginContext) {
this.data = State.create(new SO.DataRoot({ label: 'Root' }, { }), { globalContext: plugin });
this.behavior = State.create(new SO.BehaviorRoot({ label: 'Root' }, { }), { globalContext: plugin });
}
}
namespace PluginState {
export interface Snapshot {
data: State.Snapshot,
behaviour: State.Snapshot,
canvas3d: {
camera: Camera.Snapshot
}
}
}