Selaa lähdekoodia

pointer events in screen mode

Raanan Weber 5 vuotta sitten
vanhempi
commit
8d06eac257
1 muutettua tiedostoa jossa 11 lisäystä ja 1 poistoa
  1. 11 1
      src/Cameras/XR/webXRControllerPointerSelection.ts

+ 11 - 1
src/Cameras/XR/webXRControllerPointerSelection.ts

@@ -63,6 +63,10 @@ export class WebXRControllerPointerSelection {
                             pressed = true;
                             pressed = true;
                         }
                         }
                     }
                     }
+                    // in screen mode - means finger is on the screen
+                    if (controller.inputSource.targetRayMode === 'screen') {
+                        pressed = true;
+                    }
                     if (pressed) {
                     if (pressed) {
                         if (!triggerDown) {
                         if (!triggerDown) {
                             scene.simulatePointerDown(pick, { pointerId: id });
                             scene.simulatePointerDown(pick, { pointerId: id });
@@ -106,7 +110,13 @@ export class WebXRControllerPointerSelection {
             controller.onDisposeObservable.addOnce(() => {
             controller.onDisposeObservable.addOnce(() => {
                 laserPointer.dispose();
                 laserPointer.dispose();
                 cursorMesh.dispose();
                 cursorMesh.dispose();
-
+                if (controller.inputSource.targetRayMode === 'screen') {
+                    controller.getWorldPointerRayToRef(this._tmpRay);
+                    let pick = scene.pickWithRay(this._tmpRay);
+                    if (pick) {
+                        scene.simulatePointerUp(pick, { pointerId: id });
+                    }
+                }
                 scene.onBeforeRenderObservable.remove(renderObserver);
                 scene.onBeforeRenderObservable.remove(renderObserver);
             });
             });
         });
         });