UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

54 lines (49 loc) 1.41 kB
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; } } } }); } }