Refactored scene to use DefaultScene.

This commit is contained in:
Michael Mainguy 2024-04-16 13:21:00 -05:00
parent a1248a2e34
commit f7dd6840e7
9 changed files with 40 additions and 28 deletions

View File

@ -1,5 +1,7 @@
import {Scene} from "@babylonjs/core"; import {Scene} from "@babylonjs/core";
import log from "loglevel";
const logger = log.getLogger('DefaultScene');
export class DefaultScene { export class DefaultScene {
private static _scene: Scene; private static _scene: Scene;
@ -8,6 +10,18 @@ export class DefaultScene {
} }
static create(scene: Scene) { 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; DefaultScene._scene = scene;
logger.info('default scene created');
} }
} }

View File

@ -12,13 +12,11 @@ export class PouchdbPersistenceManager {
configObserver: Observable<AppConfigType> = new Observable<AppConfigType>(); configObserver: Observable<AppConfigType> = new Observable<AppConfigType>();
updateObserver: Observable<DiagramEntity> = new Observable<DiagramEntity>(); updateObserver: Observable<DiagramEntity> = new Observable<DiagramEntity>();
removeObserver: Observable<DiagramEntity> = new Observable<DiagramEntity>(); removeObserver: Observable<DiagramEntity> = new Observable<DiagramEntity>();
//implement IPersistenceManager interface with pouchdb apis
private db: PouchDB; private db: PouchDB;
private remote: PouchDB; private remote: PouchDB;
private diagramListings: PouchDB; private diagramListings: PouchDB;
private user: string; private user: string;
constructor() { constructor() {
@ -43,7 +41,7 @@ export class PouchdbPersistenceManager {
this.modify(evt.entity); this.modify(evt.entity);
break; break;
default: default:
//this.logger.warn('App', 'unknown diagram event type', evt); logger.warn('unknown diagram event type', evt);
} }
}, 2); }, 2);
this.updateObserver.add((evt) => { this.updateObserver.add((evt) => {

View File

@ -1,6 +1,7 @@
import {Scene, TransformNode, Vector3, WebXRDefaultExperience} from "@babylonjs/core"; import {Scene, TransformNode, Vector3, WebXRDefaultExperience} from "@babylonjs/core";
import {Controllers} from "../controllers/controllers"; import {Controllers} from "../controllers/controllers";
import {Handle} from "../objects/handle"; import {Handle} from "../objects/handle";
import {DefaultScene} from "../defaultScene";
export abstract class AbstractMenu { export abstract class AbstractMenu {
protected handle: Handle; protected handle: Handle;
@ -8,8 +9,8 @@ export abstract class AbstractMenu {
protected xr: WebXRDefaultExperience; protected xr: WebXRDefaultExperience;
protected controllers: Controllers; protected controllers: Controllers;
protected constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { protected constructor(xr: WebXRDefaultExperience, controllers: Controllers) {
this.scene = scene; this.scene = DefaultScene.scene;
this.xr = xr; this.xr = xr;
this.controllers = controllers; this.controllers = controllers;
} }

View File

@ -1,5 +1,5 @@
import {AdvancedDynamicTexture, CheckboxGroup, RadioGroup, SelectionPanel, StackPanel} from "@babylonjs/gui"; 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 {AppConfig} from "../util/appConfig";
import {Controllers} from "../controllers/controllers"; import {Controllers} from "../controllers/controllers";
import {AbstractMenu} from "./abstractMenu"; import {AbstractMenu} from "./abstractMenu";
@ -25,9 +25,9 @@ export class ConfigMenu extends AbstractMenu {
{label: "90", value: 90}, {label: "90", value: 90},
] ]
constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers, config: AppConfig) { constructor(xr: WebXRDefaultExperience, controllers: Controllers, config: AppConfig) {
super(scene, xr, controllers); super(xr, controllers);
this.baseTransform = new TransformNode("configMenuBase", scene); this.baseTransform = new TransformNode("configMenuBase", this.scene);
this.config = config; this.config = config;
this.buildMenu(); this.buildMenu();
} }

View File

@ -1,12 +1,12 @@
import {AbstractMenu} from "./abstractMenu"; 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"; import {Controllers} from "../controllers/controllers";
export class DeckMenu extends AbstractMenu { export class DeckMenu extends AbstractMenu {
private static instance: DeckMenu; private static instance: DeckMenu;
public constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { public constructor(xr: WebXRDefaultExperience, controllers: Controllers) {
super(scene, xr, controllers); super(xr, controllers);
this.buildMenu(); this.buildMenu();
} }

View File

@ -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 {Controllers} from "../controllers/controllers";
import {AbstractMenu} from "./abstractMenu"; import {AbstractMenu} from "./abstractMenu";
import {AdvancedDynamicTexture, Grid, TextBlock} from "@babylonjs/gui"; import {AdvancedDynamicTexture, Grid, TextBlock} from "@babylonjs/gui";
@ -7,8 +7,8 @@ import {AdvancedDynamicTexture, Grid, TextBlock} from "@babylonjs/gui";
export class IntegrationMenu extends AbstractMenu { export class IntegrationMenu extends AbstractMenu {
private plane: AbstractMesh = null; private plane: AbstractMesh = null;
constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { constructor(xr: WebXRDefaultExperience, controllers: Controllers) {
super(scene, xr, controllers); super(xr, controllers);
this.buildMenu(); this.buildMenu();
} }

View File

@ -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 {Controllers} from "../controllers/controllers";
import {DiaSounds} from "../util/diaSounds"; import {DiaSounds} from "../util/diaSounds";
@ -17,14 +17,14 @@ export class ScaleMenu extends AbstractMenu {
private yTransformNode: TransformNode; private yTransformNode: TransformNode;
private zTransformNode: TransformNode; private zTransformNode: TransformNode;
constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { constructor(xr: WebXRDefaultExperience, controllers: Controllers) {
super(scene, xr, controllers); super(xr, controllers);
this.transformNode = new TransformNode("scaleMenu", scene); this.transformNode = new TransformNode("scaleMenu", this.scene);
this.xTransformNode = new TransformNode("xTransformNode", scene); this.xTransformNode = new TransformNode("xTransformNode", this.scene);
this.xTransformNode.parent = this.transformNode; this.xTransformNode.parent = this.transformNode;
this.yTransformNode = new TransformNode("yTransformNode", scene); this.yTransformNode = new TransformNode("yTransformNode", this.scene);
this.yTransformNode.parent = this.transformNode; this.yTransformNode.parent = this.transformNode;
this.zTransformNode = new TransformNode("zTransformNode", scene); this.zTransformNode = new TransformNode("zTransformNode", this.scene);
this.zTransformNode.parent = this.transformNode; this.zTransformNode.parent = this.transformNode;
//super.createHandle(this.transformNode); //super.createHandle(this.transformNode);
this.transformNode.position.y = 0; this.transformNode.position.y = 0;

View File

@ -1,12 +1,12 @@
import {AbstractMenu} from "./abstractMenu"; import {AbstractMenu} from "./abstractMenu";
import {Scene, WebXRDefaultExperience} from "@babylonjs/core"; import {WebXRDefaultExperience} from "@babylonjs/core";
import {Controllers} from "../controllers/controllers"; import {Controllers} from "../controllers/controllers";
import {makeButton} from "./functions/makeButton"; import {makeButton} from "./functions/makeButton";
//a class called SequenceMenu that extends AbstraceMenu and has three buttons labeled '1', '2', and '3' //a class called SequenceMenu that extends AbstraceMenu and has three buttons labeled '1', '2', and '3'
export class SequenceMenu extends AbstractMenu { export class SequenceMenu extends AbstractMenu {
constructor(scene: Scene, xr: WebXRDefaultExperience, controllers: Controllers) { constructor(xr: WebXRDefaultExperience, controllers: Controllers) {
super(scene, xr, controllers); super(xr, controllers);
this.buildMenu(); this.buildMenu();
} }
@ -14,7 +14,6 @@ export class SequenceMenu extends AbstractMenu {
const button1 = makeButton("1", "1"); const button1 = makeButton("1", "1");
const button2 = makeButton("2", "1"); const button2 = makeButton("2", "1");
const button3 = makeButton("3", "1"); const button3 = makeButton("3", "1");
} }
} }

View File

@ -74,7 +74,7 @@ export async function groundMeshObserver(ground: AbstractMesh,
rig.flyMode = config.flyMode; rig.flyMode = config.flyMode;
rig.turnSnap = config.turnSnap; 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); const webController = new WebController(ground.getScene(), rig, diagramManager, diagramManager.controllers);
} }