Browse Source

Fixing zebXR when no gamepad on input

David Catuhe 5 năm trước cách đây
mục cha
commit
b800e4aa2c
1 tập tin đã thay đổi với 52 bổ sung37 xóa
  1. 52 37
      src/Cameras/XR/webXRControllerModelLoader.ts

+ 52 - 37
src/Cameras/XR/webXRControllerModelLoader.ts

@@ -15,47 +15,62 @@ export class WebXRControllerModelLoader {
      */
     constructor(input: WebXRInput) {
         input.onControllerAddedObservable.add((c) => {
+            if (!c.inputSource.gamepad) {
+                return;
+            }
+
             let controllerModel: WebVRController;
-            if (c.inputSource.gamepad && c.inputSource.gamepad.id === "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) => {
+
+            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);
+                    });
+                    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;
                     });
-                    controllerModel.mesh!.parent = c.grip!;
-                    controllerModel.mesh!.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);
-                });
-            } else if (c.inputSource.gamepad && c.inputSource.gamepad.id === "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;
-                });
-            } else if (c.inputSource.gamepad && c.inputSource.gamepad.id === "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);
-                });
-            } else {
-                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);
-                });
+                    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);
+                    });
+                    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);
+                    });
+                    break;
+                }
             }
+
             c.gamepadController = controllerModel;
         });
     }