Quellcode durchsuchen

Merge pull request #7136 from RaananW/onControllerMeshLoaded

onControllerModelLoaded observable
David Catuhe vor 5 Jahren
Ursprung
Commit
f26782a57e
2 geänderte Dateien mit 10 neuen und 0 gelöschten Zeilen
  1. 1 0
      dist/preview release/what's new.md
  2. 9 0
      src/Cameras/XR/webXRControllerModelLoader.ts

+ 1 - 0
dist/preview release/what's new.md

@@ -148,6 +148,7 @@
 - Added option to configure the output canvas ([RaananW](https://github.com/RaananW/))
 - Supporting multisampled multiview rendering using the oculus multiview extension ([RaananW](https://github.com/RaananW/))
 - Preparing to deprecate supportsSession in favor of isSupportedSession ([RaananW](https://github.com/RaananW/))
+- Added onControllerModelLoaded observable for WebXR ([RaananW](https://github.com/RaananW/))
 - UI Button has options to set different session mode and reference type ([RaananW](https://github.com/RaananW/))
 
 ### Ray

+ 9 - 0
src/Cameras/XR/webXRControllerModelLoader.ts

@@ -4,11 +4,19 @@ import { OculusTouchController } from '../../Gamepads/Controllers/oculusTouchCon
 import { WebXRInput } from './webXRInput';
 import { ViveController } from '../../Gamepads/Controllers/viveController';
 import { WebVRController } from '../../Gamepads/Controllers/webVRController';
+import { Observable } from '../../Misc/observable';
+import { WebXRController } from './webXRController';
 
 /**
  * Loads a controller model and adds it as a child of the WebXRControllers grip when the controller is created
  */
 export class WebXRControllerModelLoader {
+
+    /**
+     * an observable that triggers when a new model (the mesh itself) was initialized.
+     * To know when the mesh was loaded use the controller's own modelLoaded() method
+     */
+    public onControllerModelLoaded = new Observable<WebXRController>();
     /**
      * Creates the WebXRControllerModelLoader
      * @param input xr input that creates the controllers
@@ -60,6 +68,7 @@ export class WebXRControllerModelLoader {
                 m.getChildMeshes(false).forEach((m) => {
                     m.isPickable = false;
                 });
+                this.onControllerModelLoaded.notifyObservers(c);
             });
 
             c.gamepadController = controllerModel;