Added motion event.

This commit is contained in:
Michael Mainguy 2023-09-17 09:16:21 -05:00
parent 2509869723
commit d24373b3f8
2 changed files with 46 additions and 15 deletions

View File

@ -1,8 +1,11 @@
import {AbstractMesh, Observable, TransformNode} from "@babylonjs/core";
import {AbstractMesh, Observable, TransformNode, Vector3} from "@babylonjs/core";
export type ControllerEvent = {
type: ControllerEventType,
value?: number,
startPosition?: Vector3,
endPosition?: Vector3,
duration?: number,
gripId?: string;
}
@ -25,7 +28,8 @@ export enum ControllerEventType {
TURN = 'turn',
UP_DOWN = 'updown',
TRIGGER = 'trigger',
MENU = 'menu'
MENU = 'menu',
MOTION = 'motion'
}
export class Controllers {

View File

@ -8,18 +8,7 @@ import {DiagramListingMenu} from "../menus/diagramListingMenu";
export class Right extends Base {
private listingMenu: DiagramListingMenu;
constructor(controller:
WebXRInputSource, scene: Scene, xr: WebXRDefaultExperience, diagramManager: DiagramManager, controllers: Controllers,
) {
super(controller, scene, xr, controllers, diagramManager);
this.listingMenu = new DiagramListingMenu(this.scene, xr, this.controllers);
this.controller.onMotionControllerInitObservable.add((init) => {
this.initTrigger(init.components['xr-standard-trigger']);
this.initBButton(init.components['b-button']);
this.initAButton(init.components['a-button']);
this.initThumbstick(init.components['xr-standard-thumbstick']);
});
}
private startPosition: Vector3 = null;
private initBButton(bbutton: WebXRControllerComponent) {
if (bbutton) {
@ -33,6 +22,24 @@ export class Right extends Base {
});
}
}
private startTime: number = null;
private endPosition: Vector3 = null;
constructor(controller: WebXRInputSource,
scene: Scene,
xr: WebXRDefaultExperience,
diagramManager: DiagramManager,
controllers: Controllers,
) {
super(controller, scene, xr, controllers, diagramManager);
this.listingMenu = new DiagramListingMenu(this.scene, xr, this.controllers);
this.controller.onMotionControllerInitObservable.add((init) => {
this.initTrigger(init.components['xr-standard-trigger']);
this.initBButton(init.components['b-button']);
this.initAButton(init.components['a-button']);
this.initThumbstick(init.components['xr-standard-thumbstick']);
});
}
private initTrigger(trigger: WebXRControllerComponent) {
if (trigger) {
@ -44,8 +51,28 @@ export class Right extends Base {
type: ControllerEventType.TRIGGER,
value: button.value
});
if (!this.startTime) {
this.startTime = new Date().getTime();
this.startPosition = this.controller.pointer.absolutePosition.clone();
}
} else {
this.endPosition = this.controller.pointer.absolutePosition.clone();
if (this.startTime && this.startPosition) {
const duration = new Date().getTime() - this.startTime;
this.controllers.controllerObserver.notifyObservers({
type: ControllerEventType.MOTION,
startPosition: this.startPosition,
endPosition: this.endPosition,
duration: duration
});
this.startTime = null;
this.startPosition = null;
}
}
});
}, -1, false, this);
}
}