Moved loggers out of global module scope.
This commit is contained in:
parent
791481e564
commit
2f29b0a2de
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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'])
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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 = {};
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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});
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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')) {
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user