From f7dd6840e7f59f27a8062c68d54196e967c3e5dd Mon Sep 17 00:00:00 2001 From: Michael Mainguy Date: Tue, 16 Apr 2024 13:21:00 -0500 Subject: [PATCH] Refactored scene to use DefaultScene. --- src/defaultScene.ts | 14 ++++++++++++++ src/integration/pouchdbPersistenceManager.ts | 6 ++---- src/menus/abstractMenu.ts | 5 +++-- src/menus/configMenu.ts | 8 ++++---- src/menus/deckMenu.ts | 6 +++--- src/menus/integrationMenu.ts | 6 +++--- src/menus/scaleMenu.ts | 14 +++++++------- src/menus/sequenceMenu.ts | 7 +++---- src/util/functions/groundMeshObserver.ts | 2 +- 9 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/defaultScene.ts b/src/defaultScene.ts index af4d860..6c55d41 100644 --- a/src/defaultScene.ts +++ b/src/defaultScene.ts @@ -1,5 +1,7 @@ import {Scene} from "@babylonjs/core"; +import log from "loglevel"; +const logger = log.getLogger('DefaultScene'); export class DefaultScene { private static _scene: Scene; @@ -8,6 +10,18 @@ export class DefaultScene { } static create(scene: Scene) { + if (DefaultScene._scene) { + logger.error('default scene already created, disposing and recreating'); + if (DefaultScene._scene.isDisposed) { + logger.warn('default scene is already disposed'); + } else { + DefaultScene._scene.dispose(); + logger.info('default scene disposed'); + } + + DefaultScene._scene = null; + } DefaultScene._scene = scene; + logger.info('default scene created'); } } \ No newline at end of file diff --git a/src/integration/pouchdbPersistenceManager.ts b/src/integration/pouchdbPersistenceManager.ts index b27a22f..a23bf3e 100644 --- a/src/integration/pouchdbPersistenceManager.ts +++ b/src/integration/pouchdbPersistenceManager.ts @@ -12,13 +12,11 @@ export class PouchdbPersistenceManager { configObserver: Observable = new Observable(); updateObserver: Observable = new Observable(); removeObserver: Observable = new Observable(); - //implement IPersistenceManager interface with pouchdb apis + private db: PouchDB; private remote: PouchDB; private diagramListings: PouchDB; - - private user: string; constructor() { @@ -43,7 +41,7 @@ export class PouchdbPersistenceManager { this.modify(evt.entity); break; default: - //this.logger.warn('App', 'unknown diagram event type', evt); + logger.warn('unknown diagram event type', evt); } }, 2); this.updateObserver.add((evt) => { diff --git a/src/menus/abstractMenu.ts b/src/menus/abstractMenu.ts index 53b3081..5109d8b 100644 --- a/src/menus/abstractMenu.ts +++ b/src/menus/abstractMenu.ts @@ -1,6 +1,7 @@ import {Scene, TransformNode, Vector3, WebXRDefaultExperience} from "@babylonjs/core"; import {Controllers} from "../controllers/controllers"; import {Handle} from "../objects/handle"; +import {DefaultScene} from "../defaultScene"; export abstract class AbstractMenu { protected handle: Handle; @@ -8,8 +9,8 @@ export abstract class AbstractMenu { protected xr: WebXRDefaultExperience; protected controllers: Controllers; - protected constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { - this.scene = scene; + protected constructor(xr: WebXRDefaultExperience, controllers: Controllers) { + this.scene = DefaultScene.scene; this.xr = xr; this.controllers = controllers; } diff --git a/src/menus/configMenu.ts b/src/menus/configMenu.ts index 1a99392..aa6a70e 100644 --- a/src/menus/configMenu.ts +++ b/src/menus/configMenu.ts @@ -1,5 +1,5 @@ import {AdvancedDynamicTexture, CheckboxGroup, RadioGroup, SelectionPanel, StackPanel} from "@babylonjs/gui"; -import {MeshBuilder, Scene, TransformNode, Vector3, WebXRDefaultExperience} from "@babylonjs/core"; +import {MeshBuilder, TransformNode, Vector3, WebXRDefaultExperience} from "@babylonjs/core"; import {AppConfig} from "../util/appConfig"; import {Controllers} from "../controllers/controllers"; import {AbstractMenu} from "./abstractMenu"; @@ -25,9 +25,9 @@ export class ConfigMenu extends AbstractMenu { {label: "90", value: 90}, ] - constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers, config: AppConfig) { - super(scene, xr, controllers); - this.baseTransform = new TransformNode("configMenuBase", scene); + constructor(xr: WebXRDefaultExperience, controllers: Controllers, config: AppConfig) { + super(xr, controllers); + this.baseTransform = new TransformNode("configMenuBase", this.scene); this.config = config; this.buildMenu(); } diff --git a/src/menus/deckMenu.ts b/src/menus/deckMenu.ts index 0e9bbf1..901a898 100644 --- a/src/menus/deckMenu.ts +++ b/src/menus/deckMenu.ts @@ -1,12 +1,12 @@ import {AbstractMenu} from "./abstractMenu"; -import {Color3, MeshBuilder, Scene, StandardMaterial, Vector2, WebXRDefaultExperience} from "@babylonjs/core"; +import {Color3, MeshBuilder, StandardMaterial, Vector2, WebXRDefaultExperience} from "@babylonjs/core"; import {Controllers} from "../controllers/controllers"; export class DeckMenu extends AbstractMenu { private static instance: DeckMenu; - public constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { - super(scene, xr, controllers); + public constructor(xr: WebXRDefaultExperience, controllers: Controllers) { + super(xr, controllers); this.buildMenu(); } diff --git a/src/menus/integrationMenu.ts b/src/menus/integrationMenu.ts index 0432e1a..81173f3 100644 --- a/src/menus/integrationMenu.ts +++ b/src/menus/integrationMenu.ts @@ -1,4 +1,4 @@ -import {AbstractMesh, MeshBuilder, Scene, WebXRDefaultExperience} from "@babylonjs/core"; +import {AbstractMesh, MeshBuilder, WebXRDefaultExperience} from "@babylonjs/core"; import {Controllers} from "../controllers/controllers"; import {AbstractMenu} from "./abstractMenu"; import {AdvancedDynamicTexture, Grid, TextBlock} from "@babylonjs/gui"; @@ -7,8 +7,8 @@ import {AdvancedDynamicTexture, Grid, TextBlock} from "@babylonjs/gui"; export class IntegrationMenu extends AbstractMenu { private plane: AbstractMesh = null; - constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { - super(scene, xr, controllers); + constructor(xr: WebXRDefaultExperience, controllers: Controllers) { + super(xr, controllers); this.buildMenu(); } diff --git a/src/menus/scaleMenu.ts b/src/menus/scaleMenu.ts index 068c11b..c89bb4a 100644 --- a/src/menus/scaleMenu.ts +++ b/src/menus/scaleMenu.ts @@ -1,4 +1,4 @@ -import {AbstractMesh, Scene, TransformNode, Vector3, WebXRDefaultExperience} from "@babylonjs/core"; +import {AbstractMesh, TransformNode, Vector3, WebXRDefaultExperience} from "@babylonjs/core"; import {Controllers} from "../controllers/controllers"; import {DiaSounds} from "../util/diaSounds"; @@ -17,14 +17,14 @@ export class ScaleMenu extends AbstractMenu { private yTransformNode: TransformNode; private zTransformNode: TransformNode; - constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { - super(scene, xr, controllers); - this.transformNode = new TransformNode("scaleMenu", scene); - this.xTransformNode = new TransformNode("xTransformNode", scene); + constructor(xr: WebXRDefaultExperience, controllers: Controllers) { + super(xr, controllers); + this.transformNode = new TransformNode("scaleMenu", this.scene); + this.xTransformNode = new TransformNode("xTransformNode", this.scene); this.xTransformNode.parent = this.transformNode; - this.yTransformNode = new TransformNode("yTransformNode", scene); + this.yTransformNode = new TransformNode("yTransformNode", this.scene); this.yTransformNode.parent = this.transformNode; - this.zTransformNode = new TransformNode("zTransformNode", scene); + this.zTransformNode = new TransformNode("zTransformNode", this.scene); this.zTransformNode.parent = this.transformNode; //super.createHandle(this.transformNode); this.transformNode.position.y = 0; diff --git a/src/menus/sequenceMenu.ts b/src/menus/sequenceMenu.ts index 929d0e3..20c0a43 100644 --- a/src/menus/sequenceMenu.ts +++ b/src/menus/sequenceMenu.ts @@ -1,12 +1,12 @@ import {AbstractMenu} from "./abstractMenu"; -import {Scene, WebXRDefaultExperience} from "@babylonjs/core"; +import {WebXRDefaultExperience} from "@babylonjs/core"; import {Controllers} from "../controllers/controllers"; import {makeButton} from "./functions/makeButton"; //a class called SequenceMenu that extends AbstraceMenu and has three buttons labeled '1', '2', and '3' export class SequenceMenu extends AbstractMenu { - constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { - super(scene, xr, controllers); + constructor(xr: WebXRDefaultExperience, controllers: Controllers) { + super(xr, controllers); this.buildMenu(); } @@ -14,7 +14,6 @@ export class SequenceMenu extends AbstractMenu { const button1 = makeButton("1", "1"); const button2 = makeButton("2", "1"); const button3 = makeButton("3", "1"); - } } diff --git a/src/util/functions/groundMeshObserver.ts b/src/util/functions/groundMeshObserver.ts index 8621e90..77e7c58 100644 --- a/src/util/functions/groundMeshObserver.ts +++ b/src/util/functions/groundMeshObserver.ts @@ -74,7 +74,7 @@ export async function groundMeshObserver(ground: AbstractMesh, rig.flyMode = config.flyMode; rig.turnSnap = config.turnSnap; }); - const config = new ConfigMenu(ground.getScene(), xr, diagramManager.controllers, diagramManager.config); + const config = new ConfigMenu(xr, diagramManager.controllers, diagramManager.config); const webController = new WebController(ground.getScene(), rig, diagramManager, diagramManager.controllers); } \ No newline at end of file