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 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');
}
}

View File

@ -12,13 +12,11 @@ export class PouchdbPersistenceManager {
configObserver: Observable<AppConfigType> = new Observable<AppConfigType>();
updateObserver: Observable<DiagramEntity> = new Observable<DiagramEntity>();
removeObserver: Observable<DiagramEntity> = new Observable<DiagramEntity>();
//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) => {

View File

@ -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;
}

View File

@ -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();
}

View File

@ -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();
}

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 {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();
}

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 {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;

View File

@ -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");
}
}

View File

@ -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);
}