@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
54 lines (49 loc) • 1.41 kB
text/typescript
import {PolyScene} from '../scene/PolyScene';
export class ScenesRegister {
private _lastRegisteredScene: PolyScene | undefined;
private _scenes: Set<PolyScene> = new Set();
private _registerTimeByScene: Map<PolyScene, number> = new Map();
registerScene(scene: PolyScene) {
if (this._scenes.has(scene)) {
console.warn('scene was already registered');
return;
}
this._scenes.add(scene);
this._registerTimeByScene.set(scene, performance.now());
this._updateCache();
}
deregisterScene(scene: PolyScene) {
this._scenes.delete(scene);
this._registerTimeByScene.delete(scene);
this._updateCache();
}
dispose() {
const scenes = this.scenes();
for (const scene of scenes) {
scene.dispose();
}
}
lastRegisteredScene() {
return this._lastRegisteredScene;
}
scenes() {
const scenes: PolyScene[] = [];
this._scenes.forEach((scene) => scenes.push(scene));
return scenes;
}
private _updateCache() {
this._lastRegisteredScene = undefined;
this._registerTimeByScene.forEach((registerTime, scene) => {
if (this._lastRegisteredScene == undefined) {
this._lastRegisteredScene = scene;
} else {
const lastRegisterTime = this._registerTimeByScene.get(this._lastRegisteredScene);
if (registerTime != null && lastRegisterTime != null) {
if (registerTime > lastRegisterTime) {
this._lastRegisteredScene = scene;
}
}
}
});
}
}