Removed static controller references.

This commit is contained in:
Michael Mainguy 2023-08-14 19:27:15 -05:00
parent 0483bef488
commit 201e19a3aa
7 changed files with 31 additions and 29 deletions

View File

@ -7,7 +7,7 @@ import {
WebXRDefaultExperience,
WebXRState
} from "@babylonjs/core";
import '@babylonjs/loaders';
import {Rigplatform} from "./controllers/rigplatform";
import {DiagramManager} from "./diagram/diagramManager";
import {Toolbox} from "./toolbox/toolbox";

View File

@ -80,7 +80,7 @@ export class Base {
if (init.components['xr-standard-squeeze']) {
this.initGrip(init.components['xr-standard-squeeze'])
}
});
}, -1, false, this);
this.controllers.controllerObserver.add((event) => {
if (event.type == 'pulse') {
this.logger.debug(event);

View File

@ -7,7 +7,6 @@ import {DiagramManager} from "../diagram/diagramManager";
export class Left extends Base {
public static instance: Left;
public configMenu: ConfigMenu;
constructor(controller:
@ -15,7 +14,6 @@ export class Left extends Base {
super(controller, scene, xr, controllers, diagramManager);
this.configMenu = new ConfigMenu(this.scene, xr.baseExperience, this.controllers);
Left.instance = this;
this.controller.onMotionControllerInitObservable.add((init) => {
if (init.components['xr-standard-thumbstick']) {
init.components['xr-standard-thumbstick']

View File

@ -5,13 +5,10 @@ import log from "loglevel";
import {DiagramManager} from "../diagram/diagramManager";
export class Right extends Base {
public static instance: Right;
constructor(controller:
WebXRInputSource, scene: Scene, xr: WebXRDefaultExperience, diagramManager: DiagramManager, controllers: Controllers,
) {
super(controller, scene, xr, controllers, diagramManager);
Right.instance = this;
this.controller.onMotionControllerInitObservable.add((init) => {
this.initTrigger(init.components['xr-standard-trigger']);
this.initBButton(init.components['b-button']);

View File

@ -29,6 +29,8 @@ export class Rigplatform {
public bMenu: EditMenu;
private readonly scene: Scene;
public static instance: Rigplatform;
private rightController: Right;
private leftController: Left;
private static xr: WebXRDefaultExperience;
private yRotation: number = 0;
public body: PhysicsBody;
@ -89,7 +91,7 @@ export class Rigplatform {
this.controllers = controllers;
Rigplatform.xr = xr;
Rigplatform.instance = this;
this.bMenu = new EditMenu(scene, xr.baseExperience, this.diagramManager);
this.bMenu = new EditMenu(scene, xr, this.diagramManager);
this.camera = scene.activeCamera;
this.rigMesh = MeshBuilder.CreateBox("platform", {width: 2, height: .02, depth: 2}, scene);
@ -170,13 +172,13 @@ export class Rigplatform {
let controller;
switch (source.inputSource.handedness) {
case "right":
if (!Right.instance) {
Right.instance = new Right(source, this.scene, Rigplatform.xr, this.diagramManager, this.controllers);
if (!this.rightController) {
this.rightController = new Right(source, this.scene, Rigplatform.xr, this.diagramManager, this.controllers);
}
break;
case "left":
if (!Left.instance) {
Left.instance = new Left(source, this.scene, Rigplatform.xr, this.diagramManager, this.controllers);
if (!this.leftController) {
this.leftController = new Left(source, this.scene, Rigplatform.xr, this.diagramManager, this.controllers);
}
break;

View File

@ -1,6 +1,4 @@
import {Right} from "../controllers/right";
import {Left} from "../controllers/left";
import {Observable, Scene, WebXRSessionManager} from "@babylonjs/core";
import {Observable, Scene, WebXRDefaultExperience} from "@babylonjs/core";
import log from "loglevel";
import {AdvancedDynamicTexture, InputText} from "@babylonjs/gui";
@ -9,7 +7,7 @@ export type TextEvent = {
}
export type InputTextViewOptions = {
scene?: Scene;
xrSession?: WebXRSessionManager;
xr?: WebXRDefaultExperience;
text?: string;
}
@ -17,14 +15,14 @@ export class InputTextView {
public readonly onTextObservable: Observable<TextEvent> = new Observable<TextEvent>();
private readonly text: string;
private readonly scene: Scene;
private readonly xrSession: WebXRSessionManager;
private readonly xr: WebXRDefaultExperience;
constructor(options: InputTextViewOptions) {
if (options.text) {
this.text = options.text;
}
if (options.xrSession) {
this.xrSession = options.xrSession;
if (options.xr) {
this.xr = options.xr;
}
if (options.scene) {
this.scene = options.scene;
@ -32,7 +30,7 @@ export class InputTextView {
}
public show() {
if (this?.xrSession?.inXRSession) {
if (this?.xr?.baseExperience?.sessionManager?.inXRSession) {
this.showXr();
} else {
this.showWeb();
@ -64,11 +62,14 @@ export class InputTextView {
textInput.type = "text";
document.body.appendChild(textInput);
textInput.value = this.text;
if (this.xr?.baseExperience?.sessionManager?.inXRSession) {
this.xr.input.controllers.forEach((controller) => {
controller.grip.setEnabled(false);
controller.pointer.setEnabled(false);
});
if (this.xrSession.inXRSession) {
Right.instance.disable();
Left.instance.disable();
}
textInput.focus();
if (navigator.userAgent.indexOf('Macintosh') > -1) {
textInput.addEventListener('input', (event) => {
@ -79,8 +80,12 @@ export class InputTextView {
textInput.addEventListener('blur', () => {
log.getLogger('bmenu').debug("blur");
this.onTextObservable.notifyObservers({text: textInput.value});
Right.instance.enable();
Left.instance.enable();
if (this.xr?.baseExperience?.sessionManager?.inXRSession) {
this.xr.input.controllers.forEach((controller) => {
controller.grip.setEnabled(true);
controller.pointer.setEnabled(true);
});
}
textInput.blur();
textInput.remove();
});

View File

@ -9,7 +9,7 @@ import {
Scene,
StandardMaterial,
Vector3,
WebXRExperienceHelper
WebXRDefaultExperience
} from "@babylonjs/core";
import {Button3D, GUI3DManager, StackPanel3D, TextBlock} from "@babylonjs/gui";
import {DiagramManager} from "../diagram/diagramManager";
@ -31,12 +31,12 @@ export class EditMenu {
private paintColor: string = null;
private readonly logger: log.Logger = log.getLogger('EditMenu');
private gizmoManager: GizmoManager;
private readonly xr: WebXRExperienceHelper;
private readonly xr: WebXRDefaultExperience;
private readonly diagramManager: DiagramManager;
private connection: DiagramConnection = null;
private panel: StackPanel3D;
constructor(scene: Scene, xr: WebXRExperienceHelper, diagramManager: DiagramManager) {
constructor(scene: Scene, xr: WebXRDefaultExperience, diagramManager: DiagramManager) {
this.scene = scene;
this.xr = xr;
this.diagramManager = diagramManager;
@ -241,7 +241,7 @@ export class EditMenu {
if (mesh?.metadata?.text) {
text = mesh.metadata.text;
}
const textInput = new InputTextView({xrSession: this.xr.sessionManager, text: text});
const textInput = new InputTextView({xr: this.xr, text: text});
textInput.show();
textInput.onTextObservable.addOnce((value) => {
this.persist(mesh, value.text);