34 lines
906 B
JavaScript
34 lines
906 B
JavaScript
|
export class SceneManager {
|
||
|
constructor() {
|
||
|
this.scenes = new Map();
|
||
|
}
|
||
|
init() {
|
||
|
if (this.defaultScene) {
|
||
|
this.switchTo(this.defaultScene);
|
||
|
}
|
||
|
}
|
||
|
addScene(scene) {
|
||
|
this.scenes.set(scene.id, scene);
|
||
|
}
|
||
|
removeScene(scene) {
|
||
|
if (scene === this.currentScene)
|
||
|
this.currentScene.onDeactivate();
|
||
|
this.scenes.delete(scene.id);
|
||
|
}
|
||
|
switchTo(scene) {
|
||
|
if (scene === this.currentScene)
|
||
|
return;
|
||
|
let data;
|
||
|
if (this.currentScene) {
|
||
|
this.currentScene.onDeactivate();
|
||
|
data = this.currentScene.data;
|
||
|
}
|
||
|
this.currentScene = this.scenes.get(scene.id);
|
||
|
this.currentScene.onSwitch(data);
|
||
|
this.currentScene.onActivate(this);
|
||
|
}
|
||
|
setDefaultScene(scene) {
|
||
|
this.defaultScene = scene;
|
||
|
}
|
||
|
}
|