Moved loggers out of global module scope.

This commit is contained in:
Michael Mainguy 2024-04-28 09:03:20 -05:00
parent 791481e564
commit 2f29b0a2de
23 changed files with 131 additions and 107 deletions

View File

@ -30,7 +30,7 @@ import {pointable} from "./functions/pointable";
import {DefaultScene} from "../defaultScene"; import {DefaultScene} from "../defaultScene";
const CLICK_TIME = 300; const CLICK_TIME = 300;
const logger = log.getLogger('Base');
export class Base { export class Base {
static stickVector = Vector3.Zero(); static stickVector = Vector3.Zero();
@ -50,10 +50,11 @@ export class Base {
protected controllers: Controllers; protected controllers: Controllers;
private clickMenu: ClickMenu; private clickMenu: ClickMenu;
private pickPoint: Vector3 = new Vector3(); private pickPoint: Vector3 = new Vector3();
private logger = log.getLogger('Base');
constructor(controller: WebXRInputSource, constructor(controller: WebXRInputSource,
xr: WebXRDefaultExperience, xr: WebXRDefaultExperience,
diagramManager: DiagramManager) { diagramManager: DiagramManager) {
this.logger.debug('Base Controller Constructor called');
this.xrInputSource = controller; this.xrInputSource = controller;
this.controllers = diagramManager.controllers; this.controllers = diagramManager.controllers;
this.scene = DefaultScene.Scene; this.scene = DefaultScene.Scene;
@ -61,7 +62,7 @@ export class Base {
this.scene.onPointerObservable.add((pointerInfo) => { this.scene.onPointerObservable.add((pointerInfo) => {
if (pointerInfo.pickInfo.pickedMesh?.metadata?.template) { if (pointerInfo.pickInfo.pickedMesh?.metadata?.template) {
const mesh = pointerInfo.pickInfo.pickedMesh; const mesh = pointerInfo.pickInfo.pickedMesh;
const pos = mesh.absolutePosition; //const pos = mesh.absolutePosition;
this.pickPoint.copyFrom(pointerInfo.pickInfo.pickedPoint); this.pickPoint.copyFrom(pointerInfo.pickInfo.pickedPoint);
} }
@ -72,13 +73,13 @@ export class Base {
//@TODO THis works, but it uses initGrip, not sure if this is the best idea //@TODO THis works, but it uses initGrip, not sure if this is the best idea
this.xrInputSource.onMotionControllerInitObservable.add(motionControllerObserver, -1, false, this); this.xrInputSource.onMotionControllerInitObservable.add(motionControllerObserver, -1, false, this);
this.controllers.controllerObservable.add((event) => { this.controllers.controllerObservable.add((event) => {
logger.debug(event); this.logger.debug(event);
switch (event.type) { switch (event.type) {
case ControllerEventType.PULSE: case ControllerEventType.PULSE:
if (event.gripId == this?.xrInputSource?.grip?.id) { if (event.gripId == this?.xrInputSource?.grip?.id) {
this.xrInputSource?.motionController?.pulse(.25, 30) this.xrInputSource?.motionController?.pulse(.25, 30)
.then(() => { .then(() => {
logger.debug("pulse done"); this.logger.debug("pulse done");
}); });
} }
break; break;
@ -105,7 +106,7 @@ export class Base {
} }
protected initClicker(trigger: WebXRControllerComponent) { protected initClicker(trigger: WebXRControllerComponent) {
logger.debug("initTrigger"); this.logger.debug("initTrigger");
trigger.onButtonStateChangedObservable.add(() => { trigger.onButtonStateChangedObservable.add(() => {
if (trigger.changes.pressed) { if (trigger.changes.pressed) {
if (trigger.pressed) { if (trigger.pressed) {
@ -113,7 +114,7 @@ export class Base {
this.clickStart = Date.now(); this.clickStart = Date.now();
window.setTimeout(() => { window.setTimeout(() => {
if (this.clickStart > 0) { if (this.clickStart > 0) {
logger.debug("grabbing and cloning"); this.logger.debug("grabbing and cloning");
this.grab(true); this.grab(true);
} }
}, 300, this); }, 300, this);
@ -160,7 +161,7 @@ export class Base {
} }
this.previousParentId = mesh?.parent?.id; this.previousParentId = mesh?.parent?.id;
logger.warn("grabbed " + mesh?.id + " parent " + this.previousParentId); this.logger.warn("grabbed " + mesh?.id + " parent " + this.previousParentId);
this.previousRotation = mesh?.rotation.clone(); this.previousRotation = mesh?.rotation.clone();
this.previousScaling = mesh?.scaling.clone(); this.previousScaling = mesh?.scaling.clone();
this.previousPosition = mesh?.position.clone(); this.previousPosition = mesh?.position.clone();
@ -175,7 +176,7 @@ export class Base {
} }
this.grabbedMesh = mesh; this.grabbedMesh = mesh;
} else { } else {
logger.debug("cloning " + mesh?.id); this.logger.debug("cloning " + mesh?.id);
const clone = grabAndClone(this.diagramManager, mesh, this.xrInputSource.motionController.rootMesh); const clone = grabAndClone(this.diagramManager, mesh, this.xrInputSource.motionController.rootMesh);
clone.newMesh.metadata.grabClone = false; clone.newMesh.metadata.grabClone = false;
clone.newMesh.metadata.tool = false; clone.newMesh.metadata.tool = false;
@ -233,12 +234,12 @@ export class Base {
const body = mesh?.physicsBody; const body = mesh?.physicsBody;
if (body) { if (body) {
body.setMotionType(PhysicsMotionType.DYNAMIC); body.setMotionType(PhysicsMotionType.DYNAMIC);
logger.debug(body.transformNode.absolutePosition); this.logger.debug(body.transformNode.absolutePosition);
logger.debug(this.lastPosition); this.logger.debug(this.lastPosition);
if (this.lastPosition) { if (this.lastPosition) {
body.setLinearVelocity(body.transformNode.absolutePosition.subtract(this.lastPosition).scale(20)); body.setLinearVelocity(body.transformNode.absolutePosition.subtract(this.lastPosition).scale(20));
//body.setLinearVelocity(this.lastPosition.subtract(body.transformNode.absolutePosition).scale(20)); //body.setLinearVelocity(this.lastPosition.subtract(body.transformNode.absolutePosition).scale(20));
logger.debug(this.lastPosition.subtract(body.transformNode.absolutePosition).scale(20)); this.logger.debug(this.lastPosition.subtract(body.transformNode.absolutePosition).scale(20));
} }
} }
this.diagramManager.onDiagramEventObservable.notifyObservers(event, DiagramEventObserverMask.ALL); this.diagramManager.onDiagramEventObservable.notifyObservers(event, DiagramEventObserverMask.ALL);
@ -247,7 +248,7 @@ export class Base {
private click() { private click() {
let mesh = this.xr.pointerSelection.getMeshUnderPointer(this.xrInputSource.uniqueId); let mesh = this.xr.pointerSelection.getMeshUnderPointer(this.xrInputSource.uniqueId);
if (pointable(mesh)) { if (pointable(mesh)) {
logger.debug("click on " + mesh.id); this.logger.debug("click on " + mesh.id);
if (this.clickMenu && !this.clickMenu.isDisposed) { if (this.clickMenu && !this.clickMenu.isDisposed) {
if (this.clickMenu.isConnecting) { if (this.clickMenu.isConnecting) {
this.clickMenu.connect(mesh); this.clickMenu.connect(mesh);
@ -258,7 +259,7 @@ export class Base {
} }
} else { } else {
logger.debug("click on nothing"); this.logger.debug("click on nothing");
} }

View File

@ -1,7 +1,10 @@
import {HavokPlugin} from "@babylonjs/core"; import {HavokPlugin} from "@babylonjs/core";
import {DefaultScene} from "../../defaultScene"; import {DefaultScene} from "../../defaultScene";
import log from "loglevel";
export function beforeRenderObserver() { export function beforeRenderObserver() {
const logger = log.getLogger('beforeRenderObserver');
if (this?.grabbedMesh?.physicsBody) { if (this?.grabbedMesh?.physicsBody) {
const scene = DefaultScene.Scene; const scene = DefaultScene.Scene;
const hk = (scene.getPhysicsEngine().getPhysicsPlugin() as HavokPlugin); const hk = (scene.getPhysicsEngine().getPhysicsPlugin() as HavokPlugin);
@ -12,11 +15,11 @@ export function beforeRenderObserver() {
hk.setPhysicsBodyTransformation(this.grabbedMesh.physicsBody, parent); hk.setPhysicsBodyTransformation(this.grabbedMesh.physicsBody, parent);
hk.sync(this.grabbedMesh.physicsBody); hk.sync(this.grabbedMesh.physicsBody);
} else { } else {
this.logger.error("parent not found for " + this.grabbedMeshParentId); logger.error("parent not found for " + this.grabbedMeshParentId);
} }
} else { } else {
this.logger.warn("no parent id"); logger.warn("no parent id");
} }
} }

View File

@ -1,10 +1,16 @@
import {AbstractMesh} from "@babylonjs/core"; import {AbstractMesh} from "@babylonjs/core";
import {isDiagramEntity} from "../../diagram/functions/isDiagramEntity"; import {isDiagramEntity} from "../../diagram/functions/isDiagramEntity";
import log from "loglevel";
export function handleWasGrabbed(mesh: AbstractMesh): boolean { export function handleWasGrabbed(mesh: AbstractMesh): boolean {
const logger = log.getLogger("handleWasGrabbed");
if (isDiagramEntity(mesh)) { if (isDiagramEntity(mesh)) {
logger.debug("handleWasGrabbed: mesh is a diagram entity");
return false; return false;
} else { } else {
return (mesh?.metadata?.handle == true);
const result = (mesh?.metadata?.handle == true);
logger.debug("handleWasGrabbed: mesh ", result);
return result;
} }
} }

View File

@ -1,7 +1,8 @@
import log from "loglevel"; import log from "loglevel";
const logger = log.getLogger('motionControllerObserver');
export function motionControllerObserver(init) { export function motionControllerObserver(init) {
const logger = log.getLogger('motionControllerObserver');
logger.debug(init.components); logger.debug(init.components);
if (init.components['xr-standard-squeeze']) { if (init.components['xr-standard-squeeze']) {
this.initGrip(init.components['xr-standard-squeeze']) this.initGrip(init.components['xr-standard-squeeze'])

View File

@ -1,9 +1,9 @@
import {AbstractMesh} from "@babylonjs/core"; import {AbstractMesh} from "@babylonjs/core";
import log from "loglevel"; import log from "loglevel";
const logger = log.getLogger('reparent');
export function reparent(mesh: AbstractMesh, previousParentId: string, grabbedMeshParentId: string) { export function reparent(mesh: AbstractMesh, previousParentId: string, grabbedMeshParentId: string) {
const logger = log.getLogger('reparent');
if (previousParentId) { if (previousParentId) {
const parent = mesh.getScene().getMeshById(previousParentId); const parent = mesh.getScene().getMeshById(previousParentId);
if (parent) { if (parent) {

View File

@ -5,8 +5,9 @@ import log from "loglevel";
import {DiagramManager} from "../diagram/diagramManager"; import {DiagramManager} from "../diagram/diagramManager";
import {DefaultScene} from "../defaultScene"; import {DefaultScene} from "../defaultScene";
const logger = log.getLogger('Left');
export class Left extends Base { export class Left extends Base {
private leftLogger = log.getLogger('Left');
constructor(controller: constructor(controller:
WebXRInputSource, xr: WebXRDefaultExperience, diagramManager: DiagramManager) { WebXRInputSource, xr: WebXRDefaultExperience, diagramManager: DiagramManager) {
super(controller, xr, diagramManager); super(controller, xr, diagramManager);
@ -15,7 +16,7 @@ export class Left extends Base {
if (init.components['xr-standard-thumbstick']) { if (init.components['xr-standard-thumbstick']) {
init.components['xr-standard-thumbstick'] init.components['xr-standard-thumbstick']
.onAxisValueChangedObservable.add((value) => { .onAxisValueChangedObservable.add((value) => {
logger.trace(`thumbstick moved ${value.x}, ${value.y}`); this.leftLogger.trace(`thumbstick moved ${value.x}, ${value.y}`);
if (!this.controllers.movable) { if (!this.controllers.movable) {
this.moveRig(value); this.moveRig(value);
} else { } else {
@ -27,7 +28,7 @@ export class Left extends Base {
this.initTrigger(init.components['xr-standard-trigger']); this.initTrigger(init.components['xr-standard-trigger']);
init.components['xr-standard-thumbstick'].onButtonStateChangedObservable.add((value) => { init.components['xr-standard-thumbstick'].onButtonStateChangedObservable.add((value) => {
if (value.pressed) { if (value.pressed) {
logger.trace('Left', 'thumbstick changed'); this.leftLogger.trace('Left', 'thumbstick changed');
this.controllers.controllerObservable.notifyObservers({ this.controllers.controllerObservable.notifyObservers({
type: ControllerEventType.DECREASE_VELOCITY, type: ControllerEventType.DECREASE_VELOCITY,
value: value.value value: value.value
@ -44,7 +45,7 @@ export class Left extends Base {
trigger trigger
.onButtonStateChangedObservable .onButtonStateChangedObservable
.add((button) => { .add((button) => {
logger.trace('trigger pressed'); this.leftLogger.trace('trigger pressed');
this.controllers.controllerObservable.notifyObservers({ this.controllers.controllerObservable.notifyObservers({
type: ControllerEventType.TRIGGER, type: ControllerEventType.TRIGGER,
value: button.value, value: button.value,
@ -58,7 +59,7 @@ export class Left extends Base {
if (xbutton) { if (xbutton) {
xbutton.onButtonStateChangedObservable.add((button) => { xbutton.onButtonStateChangedObservable.add((button) => {
if (button.pressed) { if (button.pressed) {
logger.trace('X button pressed'); this.leftLogger.trace('X button pressed');
this.controllers.controllerObservable.notifyObservers({ this.controllers.controllerObservable.notifyObservers({
type: ControllerEventType.X_BUTTON, type: ControllerEventType.X_BUTTON,
value: button.value value: button.value
@ -72,7 +73,7 @@ export class Left extends Base {
if (ybutton) { if (ybutton) {
ybutton.onButtonStateChangedObservable.add((button) => { ybutton.onButtonStateChangedObservable.add((button) => {
if (button.pressed) { if (button.pressed) {
logger.trace('Y button pressed'); this.leftLogger.trace('Y button pressed');
this.controllers.controllerObservable.notifyObservers({ this.controllers.controllerObservable.notifyObservers({
type: ControllerEventType.Y_BUTTON, type: ControllerEventType.Y_BUTTON,
value: button.value value: button.value

View File

@ -6,16 +6,16 @@ import {DiagramManager} from "../diagram/diagramManager";
import log from "loglevel"; import log from "loglevel";
import {DefaultScene} from "../defaultScene"; import {DefaultScene} from "../defaultScene";
const logger = log.getLogger("Right");
export class Right extends Base { export class Right extends Base {
private startPosition: Vector3 = null; private startPosition: Vector3 = null;
private rightLogger = log.getLogger("Right");
private initBButton(bbutton: WebXRControllerComponent) { private initBButton(bbutton: WebXRControllerComponent) {
if (bbutton) { if (bbutton) {
bbutton.onButtonStateChangedObservable.add((button) => { bbutton.onButtonStateChangedObservable.add((button) => {
if (button.pressed) { if (button.pressed) {
logger.debug('B Button Pressed'); this.rightLogger.debug('B Button Pressed');
this.controllers.controllerObservable.notifyObservers({ this.controllers.controllerObservable.notifyObservers({
type: ControllerEventType.B_BUTTON, type: ControllerEventType.B_BUTTON,
value: button.value value: button.value
@ -49,7 +49,7 @@ export class Right extends Base {
trigger trigger
.onButtonStateChangedObservable .onButtonStateChangedObservable
.add((button) => { .add((button) => {
logger.debug("right trigger pressed"); this.rightLogger.debug("right trigger pressed");
this.controllers.controllerObservable.notifyObservers({ this.controllers.controllerObservable.notifyObservers({
type: ControllerEventType.TRIGGER, type: ControllerEventType.TRIGGER,
value: button.value, value: button.value,
@ -63,7 +63,7 @@ export class Right extends Base {
if (abutton) { if (abutton) {
abutton.onButtonStateChangedObservable.add((value) => { abutton.onButtonStateChangedObservable.add((value) => {
if (value.pressed) { if (value.pressed) {
logger.debug('A button pressed'); this.rightLogger.debug('A button pressed');
this.controllers.controllerObservable.notifyObservers({type: ControllerEventType.MENU}); this.controllers.controllerObservable.notifyObservers({type: ControllerEventType.MENU});
} }
}); });
@ -73,12 +73,12 @@ export class Right extends Base {
private initThumbstick(thumbstick: WebXRControllerComponent) { private initThumbstick(thumbstick: WebXRControllerComponent) {
if (thumbstick) { if (thumbstick) {
thumbstick.onAxisValueChangedObservable.add((value) => { thumbstick.onAxisValueChangedObservable.add((value) => {
logger.trace(`thumbstick moved ${value.x}, ${value.y}`); this.rightLogger.trace(`thumbstick moved ${value.x}, ${value.y}`);
this.moveRig(value); this.moveRig(value);
}); });
thumbstick.onButtonStateChangedObservable.add((value) => { thumbstick.onButtonStateChangedObservable.add((value) => {
if (value.pressed) { if (value.pressed) {
logger.trace('Right', `thumbstick changed ${value.value}`); this.rightLogger.trace('Right', `thumbstick changed ${value.value}`);
this.controllers.controllerObservable.notifyObservers({ this.controllers.controllerObservable.notifyObservers({
type: ControllerEventType.INCREASE_VELOCITY, type: ControllerEventType.INCREASE_VELOCITY,
value: value.value value: value.value

View File

@ -10,9 +10,10 @@ import {DefaultScene} from "../defaultScene";
const RIGHT = "right"; const RIGHT = "right";
const LEFT = "left"; const LEFT = "left";
const logger = log.getLogger('Rigplatform');
export class Rigplatform { export class Rigplatform {
private logger = log.getLogger('Rigplatform');
private readonly controllers: Controllers; private readonly controllers: Controllers;
private readonly diagramManager: DiagramManager; private readonly diagramManager: DiagramManager;
private readonly scene: Scene; private readonly scene: Scene;
@ -55,10 +56,10 @@ export class Rigplatform {
this._flyMode = value; this._flyMode = value;
if (this._flyMode) { if (this._flyMode) {
this.rigMesh.physicsBody.setGravityFactor(.01); this.rigMesh.physicsBody.setGravityFactor(.01);
logger.debug('flymode'); this.logger.debug('flymode');
} else { } else {
this.rigMesh.physicsBody.setGravityFactor(1); this.rigMesh.physicsBody.setGravityFactor(1);
logger.debug('walkmode'); this.logger.debug('walkmode');
} }
} }
@ -104,7 +105,7 @@ export class Rigplatform {
vel.y = 0; vel.y = 0;
} }
if (vel.length() > 0) { if (vel.length() > 0) {
logger.debug('Velocity', this.velocity, vel, this.scene.activeCamera.absoluteRotation); this.logger.debug('Velocity', this.velocity, vel, this.scene.activeCamera.absoluteRotation);
} }
this.rigMesh.physicsBody.setLinearVelocity(vel); this.rigMesh.physicsBody.setLinearVelocity(vel);
}); });
@ -114,7 +115,7 @@ export class Rigplatform {
if (!this.registered) { if (!this.registered) {
this.registered = true; this.registered = true;
this.controllers.controllerObservable.add((event: ControllerEvent) => { this.controllers.controllerObservable.add((event: ControllerEvent) => {
logger.debug(event); this.logger.debug(event);
switch (event.type) { switch (event.type) {
case ControllerEventType.INCREASE_VELOCITY: case ControllerEventType.INCREASE_VELOCITY:
if (this.velocityIndex < this.velocityArray.length - 1) { if (this.velocityIndex < this.velocityArray.length - 1) {
@ -145,7 +146,7 @@ export class Rigplatform {
} }
break; break;
case ControllerEventType.MOTION: case ControllerEventType.MOTION:
logger.debug(JSON.stringify(event)); this.logger.debug(JSON.stringify(event));
break; break;
} }
}); });

View File

@ -1,12 +1,13 @@
import {Engine, Scene} from "@babylonjs/core"; import {Engine, Scene} from "@babylonjs/core";
import log from "loglevel"; import log from "loglevel";
const logger = log.getLogger('DefaultScene');
export class DefaultScene { export class DefaultScene {
private static _Scene: Scene; private static _Scene: Scene;
public static get Scene(): Scene { public static get Scene(): Scene {
if (!DefaultScene._Scene) { if (!DefaultScene._Scene) {
const logger = log.getLogger('DefaultScene');
logger.error('default scene not yet created'); logger.error('default scene not yet created');
if (Engine.LastCreatedScene) { if (Engine.LastCreatedScene) {
logger.warn('using last created scene, this may not be what you want, proceed with caution'); logger.warn('using last created scene, this may not be what you want, proceed with caution');
@ -21,6 +22,7 @@ export class DefaultScene {
} }
public static set Scene(scene: Scene) { public static set Scene(scene: Scene) {
const logger = log.getLogger('DefaultScene');
if (DefaultScene._Scene) { if (DefaultScene._Scene) {
logger.error('default scene already created, disposing and recreating'); logger.error('default scene already created, disposing and recreating');
if (DefaultScene._Scene.isDisposed) { if (DefaultScene._Scene.isDisposed) {

View File

@ -3,14 +3,13 @@ import {v4 as uuidv4} from 'uuid';
import log, {Logger} from "loglevel"; import log, {Logger} from "loglevel";
import {buildStandardMaterial} from "../materials/functions/buildStandardMaterial"; import {buildStandardMaterial} from "../materials/functions/buildStandardMaterial";
const logger: Logger = log.getLogger('DiagramConnection');
export class DiagramConnection { export class DiagramConnection {
private readonly id: string; private readonly id: string;
private logger: Logger = log.getLogger('DiagramConnection');
constructor(from: string, to: string, id: string, scene?: Scene, gripTransform?: TransformNode, clickPoint?: Vector3) { constructor(from: string, to: string, id: string, scene?: Scene, gripTransform?: TransformNode, clickPoint?: Vector3) {
logger.debug('buildConnection constructor'); this.logger.debug('buildConnection constructor');
if (id) { if (id) {
this.id = id; this.id = id;
} else { } else {
@ -46,7 +45,7 @@ export class DiagramConnection {
this.toAnchor = to; this.toAnchor = to;
} else { } else {
logger.info("no fromMesh yet, will build when toMesh is available"); this.logger.info("no fromMesh yet, will build when toMesh is available");
} }
} }
this.buildConnection(); this.buildConnection();
@ -127,7 +126,7 @@ export class DiagramConnection {
} }
private buildConnection() { private buildConnection() {
logger.debug(`buildConnection from ${this._from} to ${this._to}`); this.logger.debug(`buildConnection from ${this._from} to ${this._to}`);
this._mesh = MeshBuilder.CreateCylinder(this.id + "_connection", {diameter: .025, height: 1}, this.scene); this._mesh = MeshBuilder.CreateCylinder(this.id + "_connection", {diameter: .025, height: 1}, this.scene);
this.transformNode = new TransformNode(this.id + "_transform", this.scene); this.transformNode = new TransformNode(this.id + "_transform", this.scene);
this.transformNode.metadata = {exportable: true}; this.transformNode.metadata = {exportable: true};
@ -159,7 +158,7 @@ export class DiagramConnection {
} }
} }
private removeConnection = () => { private removeConnection = () => {
logger.debug("removeConnection"); this.logger.debug("removeConnection");
this.scene.onBeforeRenderObservable.removeCallback(this.beforeRender); this.scene.onBeforeRenderObservable.removeCallback(this.beforeRender);
this._mesh.onDisposeObservable.removeCallback(this.removeConnection); this._mesh.onDisposeObservable.removeCallback(this.removeConnection);
this.removeObserver(); this.removeObserver();
@ -181,17 +180,17 @@ export class DiagramConnection {
if (mesh && mesh.id) { if (mesh && mesh.id) {
if (!this.toAnchor || !this.fromAnchor) { if (!this.toAnchor || !this.fromAnchor) {
if (mesh?.id == this?._to) { if (mesh?.id == this?._to) {
logger.debug("Found to anchor"); this.logger.debug("Found to anchor");
this.toAnchor = mesh; this.toAnchor = mesh;
this._mesh.metadata.to = this.to; this._mesh.metadata.to = this.to;
} }
if (mesh?.id == this?._from) { if (mesh?.id == this?._from) {
logger.debug("Found from anchor"); this.logger.debug("Found from anchor");
this.fromAnchor = mesh; this.fromAnchor = mesh;
this._mesh.metadata.from = this.from; this._mesh.metadata.from = this.from;
} }
if (this.toAnchor && this.fromAnchor) { if (this.toAnchor && this.fromAnchor) {
logger.debug(`connection built from ${this._from} to ${this._to}`); this.logger.debug(`connection built from ${this._from} to ${this._to}`);
this.removeObserver(); this.removeObserver();
} }
} }
@ -199,7 +198,7 @@ export class DiagramConnection {
} }
private removeObserver() { private removeObserver() {
logger.debug("removing observer"); this.logger.debug("removing observer");
this.scene.onNewMeshAddedObservable.removeCallback(this.onMeshAdded); this.scene.onNewMeshAddedObservable.removeCallback(this.onMeshAdded);
} }
} }

View File

@ -15,13 +15,14 @@ import {DefaultScene} from "../defaultScene";
import {DiagramMenuManager} from "./diagramMenuManager"; import {DiagramMenuManager} from "./diagramMenuManager";
import {ClickMenu} from "../menus/clickMenu"; import {ClickMenu} from "../menus/clickMenu";
const logger = log.getLogger('DiagramManager');
export enum DiagramEventObserverMask { export enum DiagramEventObserverMask {
ALL = -1, ALL = -1,
FROM_DB = 1, FROM_DB = 1,
TO_DB = 2, TO_DB = 2,
} }
export class DiagramManager { export class DiagramManager {
private logger = log.getLogger('DiagramManager');
public readonly _config: AppConfig; public readonly _config: AppConfig;
private readonly _controllers: Controllers; private readonly _controllers: Controllers;
private readonly _diagramEntityActionManager: ActionManager; private readonly _diagramEntityActionManager: ActionManager;
@ -36,7 +37,7 @@ export class DiagramManager {
this._diagramMenuManager = new DiagramMenuManager(this.onDiagramEventObservable, this._controllers, this._config); this._diagramMenuManager = new DiagramMenuManager(this.onDiagramEventObservable, this._controllers, this._config);
this._diagramEntityActionManager = buildEntityActionManager(this._controllers); this._diagramEntityActionManager = buildEntityActionManager(this._controllers);
this.onDiagramEventObservable.add(this.onDiagramEvent, DiagramEventObserverMask.FROM_DB, true, this); this.onDiagramEventObservable.add(this.onDiagramEvent, DiagramEventObserverMask.FROM_DB, true, this);
logger.debug("DiagramManager constructed"); this.logger.debug("DiagramManager constructed");
this._scene.onMeshRemovedObservable.add((mesh) => { this._scene.onMeshRemovedObservable.add((mesh) => {
if (isDiagramEntity(mesh)) { if (isDiagramEntity(mesh)) {
this.cleanupOrphanConnections(mesh) this.cleanupOrphanConnections(mesh)
@ -74,7 +75,7 @@ export class DiagramManager {
if (mesh.absoluteRotationQuaternion) { if (mesh.absoluteRotationQuaternion) {
newMesh.rotation = mesh.absoluteRotationQuaternion.toEulerAngles().clone(); newMesh.rotation = mesh.absoluteRotationQuaternion.toEulerAngles().clone();
} else { } else {
logger.error("no rotation quaternion"); this.logger.error("no rotation quaternion");
} }
applyScaling(mesh, newMesh, copy, this._config.current?.createSnap); applyScaling(mesh, newMesh, copy, this._config.current?.createSnap);
newMesh.material = mesh.material; newMesh.material = mesh.material;
@ -92,7 +93,7 @@ export class DiagramManager {
if (mesh.metadata.template != '#connection-template') { if (mesh.metadata.template != '#connection-template') {
this._scene.meshes.forEach((m) => { this._scene.meshes.forEach((m) => {
if (m?.metadata?.to == mesh.id || m?.metadata?.from == mesh.id) { if (m?.metadata?.to == mesh.id || m?.metadata?.from == mesh.id) {
logger.debug("removing connection", m.id); this.logger.debug("removing connection", m.id);
this.notifyAll({type: DiagramEventType.REMOVE, entity: toDiagramEntity(m)}); this.notifyAll({type: DiagramEventType.REMOVE, entity: toDiagramEntity(m)});
} }
}); });

View File

@ -12,7 +12,6 @@ import {ClickMenu} from "../menus/clickMenu";
import {ConfigMenu} from "../menus/configMenu"; import {ConfigMenu} from "../menus/configMenu";
import {AppConfig} from "../util/appConfig"; import {AppConfig} from "../util/appConfig";
const logger = log.getLogger('DiagramMenuManager');
export class DiagramMenuManager { export class DiagramMenuManager {
public readonly toolbox: Toolbox; public readonly toolbox: Toolbox;
@ -21,7 +20,7 @@ export class DiagramMenuManager {
private readonly _notifier: Observable<DiagramEvent>; private readonly _notifier: Observable<DiagramEvent>;
private readonly _inputTextView: InputTextView; private readonly _inputTextView: InputTextView;
private readonly _scene: Scene; private readonly _scene: Scene;
private logger = log.getLogger('DiagramMenuManager');
constructor(notifier: Observable<DiagramEvent>, controllers: Controllers, config: AppConfig) { constructor(notifier: Observable<DiagramEvent>, controllers: Controllers, config: AppConfig) {
this._scene = DefaultScene.Scene; this._scene = DefaultScene.Scene;
@ -36,7 +35,7 @@ export class DiagramMenuManager {
entity.text = evt.text; entity.text = evt.text;
this.notifyAll({type: DiagramEventType.MODIFY, entity: entity}); this.notifyAll({type: DiagramEventType.MODIFY, entity: entity});
} else { } else {
logger.error("mesh not found", evt.id); this.logger.error("mesh not found", evt.id);
} }
}); });
this.toolbox = new Toolbox(); this.toolbox = new Toolbox();

View File

@ -6,9 +6,9 @@ import log from "loglevel";
import {v4 as uuidv4} from 'uuid'; import {v4 as uuidv4} from 'uuid';
import {buildStandardMaterial} from "../../materials/functions/buildStandardMaterial"; import {buildStandardMaterial} from "../../materials/functions/buildStandardMaterial";
const logger = log.getLogger('buildMeshFromDiagramEntity');
export function buildMeshFromDiagramEntity(entity: DiagramEntity, scene: Scene): AbstractMesh { export function buildMeshFromDiagramEntity(entity: DiagramEntity, scene: Scene): AbstractMesh {
const logger = log.getLogger('buildMeshFromDiagramEntity');
if (!entity) { if (!entity) {
logger.error("buildMeshFromDiagramEntity: entity is null"); logger.error("buildMeshFromDiagramEntity: entity is null");
return null; return null;
@ -26,6 +26,7 @@ export function buildMeshFromDiagramEntity(entity: DiagramEntity, scene: Scene):
} }
function createNewInstanceIfNecessary(entity: DiagramEntity, scene: Scene): AbstractMesh { function createNewInstanceIfNecessary(entity: DiagramEntity, scene: Scene): AbstractMesh {
const logger = log.getLogger('createNewInstanceIfNecessary');
const oldMesh: AbstractMesh = scene.getMeshById(entity.id); const oldMesh: AbstractMesh = scene.getMeshById(entity.id);
let newMesh: AbstractMesh; let newMesh: AbstractMesh;
if (oldMesh) { if (oldMesh) {
@ -58,6 +59,7 @@ function generateId(entity: DiagramEntity) {
} }
function mapMetadata(entity: DiagramEntity, newMesh: AbstractMesh, scene: Scene): AbstractMesh { function mapMetadata(entity: DiagramEntity, newMesh: AbstractMesh, scene: Scene): AbstractMesh {
const logger = log.getLogger('mapMetaqdata');
if (newMesh) { if (newMesh) {
if (!newMesh.metadata) { if (!newMesh.metadata) {
newMesh.metadata = {}; newMesh.metadata = {};

View File

@ -2,13 +2,14 @@ import {AbstractMesh, PhysicsAggregate, PhysicsBody, PhysicsMotionType, PhysicsS
import log from "loglevel"; import log from "loglevel";
import {isDiagramEntity} from "./isDiagramEntity"; import {isDiagramEntity} from "./isDiagramEntity";
const logger = log.getLogger('DiagramShapePhysics');
const MASS_FACTOR = 10; const MASS_FACTOR = 10;
export function applyPhysics( export function applyPhysics(
mesh: AbstractMesh, mesh: AbstractMesh,
scene: Scene, scene: Scene,
motionType?: PhysicsMotionType) { motionType?: PhysicsMotionType) {
const logger = log.getLogger('DiagramShapePhysics');
if (!isDiagramEntity(mesh)) { if (!isDiagramEntity(mesh)) {
logger.error("applyPhysics: mesh.metadata.template is null", mesh); logger.error("applyPhysics: mesh.metadata.template is null", mesh);
return; return;

View File

@ -3,10 +3,9 @@ import {DiagramEntity} from "../types/diagramEntity";
import log from "loglevel"; import log from "loglevel";
import {v4 as uuidv4} from 'uuid'; import {v4 as uuidv4} from 'uuid';
const logger = log.getLogger('toDiagramEntity');
export function toDiagramEntity(mesh: AbstractMesh): DiagramEntity { export function toDiagramEntity(mesh: AbstractMesh): DiagramEntity {
const logger = log.getLogger('toDiagramEntity');
if (!mesh) { if (!mesh) {
logger.error("toDiagramEntity: mesh is null"); logger.error("toDiagramEntity: mesh is null");
return null; return null;

View File

@ -9,8 +9,9 @@ export type TextEvent = {
id: string; id: string;
text: string; text: string;
} }
const logger: Logger = log.getLogger('InputTextView');
export class InputTextView { export class InputTextView {
private logger: Logger = log.getLogger('InputTextView');
public readonly onTextObservable: Observable<TextEvent> = new Observable<TextEvent>(); public readonly onTextObservable: Observable<TextEvent> = new Observable<TextEvent>();
private readonly scene: Scene; private readonly scene: Scene;
private readonly inputMesh: AbstractMesh; private readonly inputMesh: AbstractMesh;
@ -42,7 +43,7 @@ export class InputTextView {
this.diagramMesh = mesh; this.diagramMesh = mesh;
this.keyboard.isVisible = true; this.keyboard.isVisible = true;
this.inputText.focus(); this.inputText.focus();
logger.debug(mesh.metadata); this.logger.debug(mesh.metadata);
} }
public get handleMesh(): AbstractMesh { public get handleMesh(): AbstractMesh {
@ -68,7 +69,7 @@ export class InputTextView {
if (!platform) { if (!platform) {
this.scene.onNewMeshAddedObservable.add((mesh) => { this.scene.onNewMeshAddedObservable.add((mesh) => {
if (mesh.id == 'platform') { if (mesh.id == 'platform') {
logger.debug("platform added"); this.logger.debug("platform added");
handle.mesh.parent = mesh; handle.mesh.parent = mesh;
if (!handle.idStored) { if (!handle.idStored) {
handle.mesh.position = position; handle.mesh.position = position;
@ -114,7 +115,7 @@ export class InputTextView {
keyboard.isEnabled = true; keyboard.isEnabled = true;
keyboard.children.forEach((key) => { keyboard.children.forEach((key) => {
key.onPointerEnterObservable.add((eventData, eventState) => { key.onPointerEnterObservable.add((eventData, eventState) => {
logger.debug(eventData); this.logger.debug(eventData);
const gripId = eventState?.userInfo?.pickInfo?.gripTransform?.id; const gripId = eventState?.userInfo?.pickInfo?.gripTransform?.id;
if (gripId) { if (gripId) {
this.controllers.controllerObservable.notifyObservers({ this.controllers.controllerObservable.notifyObservers({
@ -132,7 +133,7 @@ export class InputTextView {
keyboard.onKeyPressObservable.add((key) => { keyboard.onKeyPressObservable.add((key) => {
if (key === '↵') { if (key === '↵') {
if (this.inputText.text && this.inputText.text.length > 0) { if (this.inputText.text && this.inputText.text.length > 0) {
logger.error(this.inputText.text); this.logger.error(this.inputText.text);
this.onTextObservable.notifyObservers({id: this.diagramMesh.id, text: this.inputText.text}); this.onTextObservable.notifyObservers({id: this.diagramMesh.id, text: this.inputText.text});
} else { } else {
this.onTextObservable.notifyObservers({id: this.diagramMesh.id, text: null}); this.onTextObservable.notifyObservers({id: this.diagramMesh.id, text: null});

View File

@ -7,8 +7,9 @@ import log, {Logger} from "loglevel";
import {ascii_to_hex} from "./functions/hexFunctions"; import {ascii_to_hex} from "./functions/hexFunctions";
import {getPath} from "../util/functions/getPath"; import {getPath} from "../util/functions/getPath";
const logger: Logger = log.getLogger('PouchdbPersistenceManager');
export class PouchdbPersistenceManager { export class PouchdbPersistenceManager {
private logger: Logger = log.getLogger('PouchdbPersistenceManager');
onDBUpdateObservable: Observable<DiagramEntity> = new Observable<DiagramEntity>(); onDBUpdateObservable: Observable<DiagramEntity> = new Observable<DiagramEntity>();
onDBRemoveObservable: Observable<DiagramEntity> = new Observable<DiagramEntity>(); onDBRemoveObservable: Observable<DiagramEntity> = new Observable<DiagramEntity>();
@ -21,7 +22,7 @@ export class PouchdbPersistenceManager {
} }
public setDiagramManager(diagramManager: DiagramManager) { public setDiagramManager(diagramManager: DiagramManager) {
diagramManager.onDiagramEventObservable.add((evt) => { diagramManager.onDiagramEventObservable.add((evt) => {
logger.debug(evt); this.logger.debug(evt);
switch (evt.type) { switch (evt.type) {
case DiagramEventType.REMOVE: case DiagramEventType.REMOVE:
this.remove(evt.entity.id); this.remove(evt.entity.id);
@ -32,12 +33,12 @@ export class PouchdbPersistenceManager {
this.upsert(evt.entity); this.upsert(evt.entity);
break; break;
default: default:
logger.warn('unknown diagram event type', evt); this.logger.warn('unknown diagram event type', evt);
} }
}, DiagramEventObserverMask.TO_DB); }, DiagramEventObserverMask.TO_DB);
this.onDBUpdateObservable.add((evt) => { this.onDBUpdateObservable.add((evt) => {
logger.debug(evt); this.logger.debug(evt);
diagramManager.onDiagramEventObservable.notifyObservers({ diagramManager.onDiagramEventObservable.notifyObservers({
type: DiagramEventType.ADD, type: DiagramEventType.ADD,
entity: evt entity: evt
@ -45,7 +46,7 @@ export class PouchdbPersistenceManager {
}); });
this.onDBRemoveObservable.add((entity) => { this.onDBRemoveObservable.add((entity) => {
logger.debug(entity); this.logger.debug(entity);
diagramManager.onDiagramEventObservable.notifyObservers( diagramManager.onDiagramEventObservable.notifyObservers(
{type: DiagramEventType.REMOVE, entity: entity}, DiagramEventObserverMask.FROM_DB); {type: DiagramEventType.REMOVE, entity: entity}, DiagramEventObserverMask.FROM_DB);
}); });
@ -59,7 +60,7 @@ export class PouchdbPersistenceManager {
const doc = await this.db.get(id); const doc = await this.db.get(id);
this.db.remove(doc); this.db.remove(doc);
} catch (err) { } catch (err) {
logger.error(err); this.logger.error(err);
} }
} }
@ -79,10 +80,10 @@ export class PouchdbPersistenceManager {
const newEntity = {...entity, _id: entity.id}; const newEntity = {...entity, _id: entity.id};
this.db.put(newEntity); this.db.put(newEntity);
} catch (err2) { } catch (err2) {
logger.error(err2); this.logger.error(err2);
} }
} else { } else {
logger.error(err); this.logger.error(err);
} }
} }
} }
@ -131,8 +132,8 @@ export class PouchdbPersistenceManager {
} }
return true; return true;
} catch (err) { } catch (err) {
logger.error(err); this.logger.error(err);
logger.error('cannot initialize pouchdb for sync'); this.logger.error('cannot initialize pouchdb for sync');
return false; return false;
} }
} }
@ -141,11 +142,11 @@ export class PouchdbPersistenceManager {
try { try {
const all = await this.db.allDocs({include_docs: true}); const all = await this.db.allDocs({include_docs: true});
for (const entity of all.rows) { for (const entity of all.rows) {
logger.debug(entity.doc); this.logger.debug(entity.doc);
this.onDBUpdateObservable.notifyObservers(entity.doc, 1); this.onDBUpdateObservable.notifyObservers(entity.doc, 1);
} }
} catch (err) { } catch (err) {
logger.error(err); this.logger.error(err);
} }
} }
@ -155,13 +156,13 @@ export class PouchdbPersistenceManager {
} }
private syncDoc(info) { private syncDoc(info) {
logger.debug(info); this.logger.debug(info);
if (info.direction == 'pull') { if (info.direction == 'pull') {
const docs = info.change.docs; const docs = info.change.docs;
for (const doc of docs) { for (const doc of docs) {
logger.debug(doc); this.logger.debug(doc);
if (doc._deleted) { if (doc._deleted) {
logger.debug('Delete', doc); this.logger.debug('Delete', doc);
this.onDBRemoveObservable.notifyObservers({id: doc._id, template: doc.template}, 1); this.onDBRemoveObservable.notifyObservers({id: doc._id, template: doc.template}, 1);
} else { } else {
this.onDBUpdateObservable.notifyObservers(doc, 1); this.onDBUpdateObservable.notifyObservers(doc, 1);
@ -178,9 +179,9 @@ export class PouchdbPersistenceManager {
const remoteUserName = localName; const remoteUserName = localName;
const password = localName; const password = localName;
const dbs = await axios.get(import.meta.env.VITE_SYNCDB_ENDPOINT + 'list'); const dbs = await axios.get(import.meta.env.VITE_SYNCDB_ENDPOINT + 'list');
logger.debug(dbs.data); this.logger.debug(dbs.data);
if (dbs.data.indexOf(remoteDbName) == -1) { if (dbs.data.indexOf(remoteDbName) == -1) {
logger.warn('sync target missing attempting to create'); this.logger.warn('sync target missing attempting to create');
const newdb = await axios.post(import.meta.env.VITE_CREATE_ENDPOINT, const newdb = await axios.post(import.meta.env.VITE_CREATE_ENDPOINT,
{ {
"_id": "org.couchdb.user:" + localName, "_id": "org.couchdb.user:" + localName,
@ -191,17 +192,18 @@ export class PouchdbPersistenceManager {
} }
); );
if (newdb.status == 201) { if (newdb.status == 201) {
logger.info('sync target created'); this.logger.info('sync target created');
} else { } else {
this.logger.warn('sync target not created', newdb);
return; return;
} }
} }
const userEndpoint: string = import.meta.env.VITE_USER_ENDPOINT const userEndpoint: string = import.meta.env.VITE_USER_ENDPOINT
logger.debug(userEndpoint); this.logger.debug(userEndpoint);
logger.debug(remoteDbName); this.logger.debug(remoteDbName);
const target = await axios.get(userEndpoint); const target = await axios.get(userEndpoint);
if (target.status != 200) { if (target.status != 200) {
logger.info(target.statusText); this.logger.warn(target.statusText);
return; return;
} }
if (target.data && target.data.userCtx) { if (target.data && target.data.userCtx) {
@ -209,37 +211,36 @@ export class PouchdbPersistenceManager {
const buildTarget = await axios.post(userEndpoint, const buildTarget = await axios.post(userEndpoint,
{username: remoteUserName, password: password}); {username: remoteUserName, password: password});
if (buildTarget.status != 200) { if (buildTarget.status != 200) {
logger.info(buildTarget.statusText); this.logger.info(buildTarget.statusText);
return; return;
} else { } else {
this.user = buildTarget.data.userCtx; this.user = buildTarget.data.userCtx;
logger.debug(this.user); this.logger.debug(this.user);
} }
} }
} }
const remoteEndpoint: string = import.meta.env.VITE_SYNCDB_ENDPOINT; const remoteEndpoint: string = import.meta.env.VITE_SYNCDB_ENDPOINT;
logger.debug(remoteEndpoint + remoteDbName); this.logger.debug(remoteEndpoint + remoteDbName);
this.remote = new PouchDB(remoteEndpoint + remoteDbName, this.remote = new PouchDB(remoteEndpoint + remoteDbName,
{auth: {username: remoteUserName, password: password}, skip_setup: true}); {auth: {username: remoteUserName, password: password}, skip_setup: true});
const dbInfo = await this.remote.info(); const dbInfo = await this.remote.info();
logger.debug(dbInfo); this.logger.debug(dbInfo);
this.db.sync(this.remote, {live: true, retry: true}) this.db.sync(this.remote, {live: true, retry: true})
.on('change', (info) => { .on('change', (info) => {
this.syncDoc(info) this.syncDoc(info)
}) })
.on('active', function (info) { .on('active', (info) => {
logger.debug('sync active', info) this.logger.debug('sync active', info)
}) })
.on('paused', function (info) { .on('paused', (info) => {
logger.debug('sync paused', info) this.logger.debug('sync paused', info)
}) })
.on('error', function (err) { .on('error', (err) => {
logger.error('sync error', err) this.logger.error('sync error', err)
}); });
} catch (err) { } catch (err) {
logger.error(err); this.logger.error(err);
} }
} }
} }

View File

@ -5,9 +5,9 @@ import log from "loglevel";
import {DefaultScene} from "../defaultScene"; import {DefaultScene} from "../defaultScene";
import {Handle} from "../objects/handle"; import {Handle} from "../objects/handle";
const logger = log.getLogger('ConfigMenu');
export class ConfigMenu { export class ConfigMenu {
private logger = log.getLogger('ConfigMenu');
private config: AppConfig; private config: AppConfig;
private readonly baseTransform: TransformNode; private readonly baseTransform: TransformNode;
private gridSnaps: Array<{ label: string, value: number }> = [ private gridSnaps: Array<{ label: string, value: number }> = [
@ -61,7 +61,7 @@ export class ConfigMenu {
selectionPanel.addGroup(radio); selectionPanel.addGroup(radio);
for (const [index, snap] of this.gridSnaps.entries()) { for (const [index, snap] of this.gridSnaps.entries()) {
const selected = (this.config.current.createSnap == snap.value); const selected = (this.config.current.createSnap == snap.value);
logger.debug(selected); this.logger.debug(selected);
radio.addRadio(snap.label, this.createVal.bind(this), selected); radio.addRadio(snap.label, this.createVal.bind(this), selected);
} }
this.adjustRadio(radio); this.adjustRadio(radio);

View File

@ -49,13 +49,14 @@ const steps: Array<Step> = [
{'name': 'Done', 'video': null} {'name': 'Done', 'video': null}
] ]
const logger = log.getLogger('Introduction');
export class Introduction { export class Introduction {
private logger = log.getLogger('Introduction');
private readonly _scene: Scene; private readonly _scene: Scene;
private videoElement: HTMLVideoElement; private videoElement: HTMLVideoElement;
constructor() { constructor() {
logger.info('Introduction constructor'); this.logger.debug('Introduction constructor');
this._scene = DefaultScene.Scene; this._scene = DefaultScene.Scene;
this.initialize(); this.initialize();
} }
@ -82,7 +83,7 @@ export class Introduction {
hls.on(Hls.Events.MANIFEST_PARSED, function () { hls.on(Hls.Events.MANIFEST_PARSED, function () {
vid.loop = false; vid.loop = false;
vid.play().then(() => { vid.play().then(() => {
logger.debug("Video Playing"); this.logger.debug("Video Playing");
}); });
}); });
} else if (vid.canPlayType('application/vnd.apple.mpegurl')) { } else if (vid.canPlayType('application/vnd.apple.mpegurl')) {

View File

@ -24,6 +24,7 @@ export class AppConfig {
if (config) { if (config) {
this._currentConfig = config; this._currentConfig = config;
} else { } else {
localStorage.setItem('appConfig', JSON.stringify(this._currentConfig)); localStorage.setItem('appConfig', JSON.stringify(this._currentConfig));
} }
} catch (err) { } catch (err) {

View File

@ -5,11 +5,11 @@ import {Rigplatform} from "../../controllers/rigplatform";
import {DiagramManager} from "../../diagram/diagramManager"; import {DiagramManager} from "../../diagram/diagramManager";
import {Spinner} from "../../objects/spinner"; import {Spinner} from "../../objects/spinner";
const logger = log.getLogger('groungMeshObserver');
export async function groundMeshObserver(ground: AbstractMesh, export async function groundMeshObserver(ground: AbstractMesh,
diagramManager: DiagramManager, diagramManager: DiagramManager,
spinner: Spinner) { spinner: Spinner) {
const logger = log.getLogger('groungMeshObserver');
WebXRMotionControllerManager.PrioritizeOnlineRepository = false; WebXRMotionControllerManager.PrioritizeOnlineRepository = false;
WebXRMotionControllerManager.UseOnlineRepository = true; WebXRMotionControllerManager.UseOnlineRepository = true;
const xr = await WebXRDefaultExperience.CreateAsync(ground.getScene(), { const xr = await WebXRDefaultExperience.CreateAsync(ground.getScene(), {
@ -55,6 +55,7 @@ export async function groundMeshObserver(ground: AbstractMesh,
}); });
xr.baseExperience.onStateChangedObservable.add((state) => { xr.baseExperience.onStateChangedObservable.add((state) => {
logger.debug(WebXRState[state]);
switch (state) { switch (state) {
case WebXRState.IN_XR: case WebXRState.IN_XR:
ground.getScene().audioEnabled = true; ground.getScene().audioEnabled = true;

View File

@ -2,7 +2,6 @@ import {Angle, Vector3} from "@babylonjs/core";
import round from "round"; import round from "round";
import log from "loglevel"; import log from "loglevel";
const logger = log.getLogger('snapRotateVal');
export function snapRotateVal(value: Vector3, snap: number): Vector3 { export function snapRotateVal(value: Vector3, snap: number): Vector3 {
if (!snap) { if (!snap) {
@ -15,6 +14,7 @@ export function snapRotateVal(value: Vector3, snap: number): Vector3 {
} }
function snapAngle(val: number, snap: number): number { function snapAngle(val: number, snap: number): number {
const logger = log.getLogger('snapRotateVal');
const angle = snap; const angle = snap;
const deg = Angle.FromRadians(val).degrees(); const deg = Angle.FromRadians(val).degrees();
const snappedDegrees = round(deg, angle); const snappedDegrees = round(deg, angle);

View File

@ -14,6 +14,8 @@ import {DefaultScene} from "./defaultScene";
import {Introduction} from "./tutorial/introduction"; import {Introduction} from "./tutorial/introduction";
const webGpu = false; const webGpu = false;
//log.setLevel('debug', false);
export class VrApp { export class VrApp {
private engine: WebGPUEngine | Engine; private engine: WebGPUEngine | Engine;
@ -21,6 +23,7 @@ export class VrApp {
private logger: Logger = log.getLogger('App'); private logger: Logger = log.getLogger('App');
constructor() { constructor() {
this.initializeEngine().then(() => { this.initializeEngine().then(() => {
this.logger.info('Engine initialized'); this.logger.info('Engine initialized');
}); });
@ -88,8 +91,8 @@ export class VrApp {
scene.ambientColor = new Color3(.1, .1, .1); scene.ambientColor = new Color3(.1, .1, .1);
DefaultScene.Scene = scene; DefaultScene.Scene = scene;
log.resetLevel(); //log.resetLevel();
log.setDefaultLevel('error'); //log.setDefaultLevel('error');
this.logger.debug('App', 'gameCanvas created'); this.logger.debug('App', 'gameCanvas created');
await this.initialize(); await this.initialize();
} }