Added motion event.
This commit is contained in:
parent
2509869723
commit
d24373b3f8
@ -1,8 +1,11 @@
|
|||||||
import {AbstractMesh, Observable, TransformNode} from "@babylonjs/core";
|
import {AbstractMesh, Observable, TransformNode, Vector3} from "@babylonjs/core";
|
||||||
|
|
||||||
export type ControllerEvent = {
|
export type ControllerEvent = {
|
||||||
type: ControllerEventType,
|
type: ControllerEventType,
|
||||||
value?: number,
|
value?: number,
|
||||||
|
startPosition?: Vector3,
|
||||||
|
endPosition?: Vector3,
|
||||||
|
duration?: number,
|
||||||
gripId?: string;
|
gripId?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,7 +28,8 @@ export enum ControllerEventType {
|
|||||||
TURN = 'turn',
|
TURN = 'turn',
|
||||||
UP_DOWN = 'updown',
|
UP_DOWN = 'updown',
|
||||||
TRIGGER = 'trigger',
|
TRIGGER = 'trigger',
|
||||||
MENU = 'menu'
|
MENU = 'menu',
|
||||||
|
MOTION = 'motion'
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Controllers {
|
export class Controllers {
|
||||||
|
|||||||
@ -8,18 +8,7 @@ import {DiagramListingMenu} from "../menus/diagramListingMenu";
|
|||||||
export class Right extends Base {
|
export class Right extends Base {
|
||||||
private listingMenu: DiagramListingMenu;
|
private listingMenu: DiagramListingMenu;
|
||||||
|
|
||||||
constructor(controller:
|
private startPosition: Vector3 = null;
|
||||||
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 initBButton(bbutton: WebXRControllerComponent) {
|
private initBButton(bbutton: WebXRControllerComponent) {
|
||||||
if (bbutton) {
|
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) {
|
private initTrigger(trigger: WebXRControllerComponent) {
|
||||||
if (trigger) {
|
if (trigger) {
|
||||||
@ -44,8 +51,28 @@ export class Right extends Base {
|
|||||||
type: ControllerEventType.TRIGGER,
|
type: ControllerEventType.TRIGGER,
|
||||||
value: button.value
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user