|
@@ -1,4 +1,4 @@
|
|
|
-import { Quaternion } from '../../Maths/math.vector';
|
|
|
+import { Quaternion, Vector3 } from '../../Maths/math.vector';
|
|
|
import { WindowsMotionController } from '../../Gamepads/Controllers/windowsMotionController';
|
|
|
import { OculusTouchController } from '../../Gamepads/Controllers/oculusTouchController';
|
|
|
import { WebXRInput } from './webXRInput';
|
|
@@ -21,56 +21,47 @@ export class WebXRControllerModelLoader {
|
|
|
|
|
|
let controllerModel: WebVRController;
|
|
|
|
|
|
+ let rotation: Quaternion;
|
|
|
+ const position = new Vector3();
|
|
|
+
|
|
|
switch (c.inputSource.gamepad.id) {
|
|
|
case "htc-vive": {
|
|
|
controllerModel = new ViveController(c.inputSource.gamepad);
|
|
|
- controllerModel.hand = c.inputSource.handedness;
|
|
|
- controllerModel.isXR = true;
|
|
|
- controllerModel.initControllerMesh(c.getScene(), (m) => {
|
|
|
- m.isPickable = false;
|
|
|
- m.getChildMeshes(false).forEach((m) => {
|
|
|
- m.isPickable = false;
|
|
|
- });
|
|
|
- controllerModel.mesh!.parent = c.grip!;
|
|
|
- controllerModel.mesh!.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);
|
|
|
- });
|
|
|
+ rotation = Quaternion.FromEulerAngles(0, Math.PI, 0);
|
|
|
break;
|
|
|
}
|
|
|
case "oculus-touch": {
|
|
|
controllerModel = new OculusTouchController(c.inputSource.gamepad);
|
|
|
- controllerModel.hand = c.inputSource.handedness;
|
|
|
- controllerModel.isXR = true;
|
|
|
- controllerModel.initControllerMesh(c.getScene(), (m) => {
|
|
|
- controllerModel.mesh!.parent = c.grip!;
|
|
|
- controllerModel.mesh!.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);
|
|
|
- controllerModel.mesh!.position.y = 0.034;
|
|
|
- controllerModel.mesh!.position.z = 0.052;
|
|
|
- });
|
|
|
+ rotation = Quaternion.FromEulerAngles(0, Math.PI, 0);
|
|
|
+ position.y = 0.034;
|
|
|
+ position.z = 0.052;
|
|
|
break;
|
|
|
}
|
|
|
case "oculus-quest": {
|
|
|
OculusTouchController._IsQuest = true;
|
|
|
controllerModel = new OculusTouchController(c.inputSource.gamepad);
|
|
|
- controllerModel.hand = c.inputSource.handedness;
|
|
|
- controllerModel.isXR = true;
|
|
|
- controllerModel.initControllerMesh(c.getScene(), (m) => {
|
|
|
- controllerModel.mesh!.parent = c.grip!;
|
|
|
- controllerModel.mesh!.rotationQuaternion = Quaternion.FromEulerAngles(Math.PI / -4, Math.PI, 0);
|
|
|
- });
|
|
|
+ rotation = Quaternion.FromEulerAngles(Math.PI / -4, Math.PI, 0);
|
|
|
break;
|
|
|
}
|
|
|
default: {
|
|
|
controllerModel = new WindowsMotionController(c.inputSource.gamepad);
|
|
|
- controllerModel.hand = c.inputSource.handedness;
|
|
|
- controllerModel.isXR = true;
|
|
|
- controllerModel.initControllerMesh(c.getScene(), (m) => {
|
|
|
- controllerModel.mesh!.parent = c.grip!;
|
|
|
- controllerModel.mesh!.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);
|
|
|
- });
|
|
|
+ rotation = Quaternion.FromEulerAngles(0, Math.PI, 0);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ controllerModel.hand = c.inputSource.handedness;
|
|
|
+ controllerModel.isXR = true;
|
|
|
+ controllerModel.initControllerMesh(c.getScene(), (m) => {
|
|
|
+ controllerModel.mesh!.parent = c.grip || input.baseExperience.container;
|
|
|
+ controllerModel.mesh!.rotationQuaternion = rotation;
|
|
|
+ controllerModel.mesh!.position = position;
|
|
|
+ m.isPickable = false;
|
|
|
+ m.getChildMeshes(false).forEach((m) => {
|
|
|
+ m.isPickable = false;
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
c.gamepadController = controllerModel;
|
|
|
});
|
|
|
}
|