Browse Source

more bug fixes

Trevor Baron 7 years ago
parent
commit
f5238f9b42
1 changed files with 33 additions and 23 deletions
  1. 33 23
      src/Cameras/VR/babylon.vrExperienceHelper.ts

+ 33 - 23
src/Cameras/VR/babylon.vrExperienceHelper.ts

@@ -43,23 +43,28 @@ module BABYLON {
         public _teleportationEnabled: boolean;
         public _teleportationRequestInitiated = false;
         public _teleportationBackRequestInitiated = false;
-        public _dpadPressed = false;
+        public _dpadPressed = true;
 
         public _activePointer = false;
 
-        constructor(public scene: Scene){
+        constructor(public scene: Scene, gazeTrackerToClone:Nullable<Mesh> = null){
             this._id = VRExperienceHelperGazer._idCounter++;
 
             // Gaze tracker
-            this._gazeTracker = Mesh.CreateTorus("gazeTracker", 0.0035, 0.0025, 20, scene, false);
-            this._gazeTracker.bakeCurrentTransformIntoVertices();
-            this._gazeTracker.isPickable = false;
-            this._gazeTracker.isVisible = false;
-            var targetMat = new StandardMaterial("targetMat", scene);
-            targetMat.specularColor = Color3.Black();
-            targetMat.emissiveColor = new Color3(0.7, 0.7, 0.7)
-            targetMat.backFaceCulling = false;
-            this._gazeTracker.material = targetMat;
+            if(!gazeTrackerToClone){
+                this._gazeTracker = Mesh.CreateTorus("gazeTracker", 0.0035, 0.0025, 20, scene, false);
+                this._gazeTracker.bakeCurrentTransformIntoVertices();
+                this._gazeTracker.isPickable = false;
+                this._gazeTracker.isVisible = false;
+                var targetMat = new StandardMaterial("targetMat", scene);
+                targetMat.specularColor = Color3.Black();
+                targetMat.emissiveColor = new Color3(0.7, 0.7, 0.7)
+                targetMat.backFaceCulling = false;
+                this._gazeTracker.material = targetMat;
+            }else{
+                this._gazeTracker = gazeTrackerToClone.clone("gazeTracker");
+            }
+            
         }
 
         public _getForwardRay(length:number):Ray{
@@ -100,8 +105,8 @@ module BABYLON {
     class VRExperienceHelperControllerGazer extends VRExperienceHelperGazer{
         private _laserPointer: Mesh;
 
-        constructor(public webVRController: WebVRController, scene: Scene){
-            super(scene);
+        constructor(public webVRController: WebVRController, scene: Scene, gazeTrackerToClone:Mesh){
+            super(scene, gazeTrackerToClone);
             // Laser pointer
             this._laserPointer = Mesh.CreateCylinder("laserPointer", 1, 0.004, 0.0002, 20, 1, scene, false);
             var laserPointerMaterial = new StandardMaterial("laserPointerMat", scene);
@@ -342,13 +347,13 @@ module BABYLON {
                 this._cameraGazer._gazeTracker.bakeCurrentTransformIntoVertices();
                 this._cameraGazer._gazeTracker.isPickable = false;
                 this._cameraGazer._gazeTracker.isVisible = false;
-
+                this._cameraGazer._gazeTracker.name = "gazeTracker";
                 if(this.leftController){
-                    this.leftController._gazeTracker = this._cameraGazer._gazeTracker.clone("controllerGazeTacker");
+                    this.leftController._gazeTracker = this._cameraGazer._gazeTracker.clone("gazeTracker");
                 }
 
                 if(this.rightController){
-                    this.rightController._gazeTracker = this._cameraGazer._gazeTracker.clone("controllerGazeTacker");
+                    this.rightController._gazeTracker = this._cameraGazer._gazeTracker.clone("gazeTracker");
                 }
             }
         }
@@ -866,15 +871,15 @@ module BABYLON {
         }
 
         private beforeRender = () => {
-            if(this.leftController && this.leftController._activatePointer){
+            if(this.leftController && this.leftController._activePointer){
                 this._castRayAndSelectObject(this.leftController);
             }
             
-            if(this.rightController && this.rightController._activatePointer){
+            if(this.rightController && this.rightController._activePointer){
                 this._castRayAndSelectObject(this.rightController);
             }
 
-            if(!(this.leftController && this.leftController._activatePointer) && !(this.rightController && this.rightController._activePointer)){
+            if(!(this.leftController && this.leftController._activePointer) && !(this.rightController && this.rightController._activePointer)){
                 this._castRayAndSelectObject(this._cameraGazer);
             }else{
                 this._cameraGazer._gazeTracker.isVisible = false;
@@ -1008,7 +1013,7 @@ module BABYLON {
                 }
             } else {
                 var webVRController = <WebVRController>gamepad;
-                var controller = new VRExperienceHelperControllerGazer(webVRController, this._scene);
+                var controller = new VRExperienceHelperControllerGazer(webVRController, this._scene, this._cameraGazer._gazeTracker);
 
                 if (webVRController.hand === "right" || (this.leftController && this.leftController.webVRController != webVRController)) {
                     this.rightController = controller;
@@ -1069,11 +1074,13 @@ module BABYLON {
                     // Enabling / disabling laserPointer 
                     if (this._displayLaserPointer && stateObject.value === 1) {
                         if(controller._activePointer){
-                            controller._activatePointer();
-                        }else{
                             controller._deactivatePointer();
+                        }else{
+                            controller._activatePointer();
+                        }
+                        if(this.displayGaze){
+                            controller._gazeTracker.isVisible = controller._activePointer;
                         }
-                        controller._gazeTracker.isVisible = controller._activePointer;
                     }
                 });
                 controller.webVRController.onTriggerStateChangedObservable.add((stateObject) => {
@@ -1647,6 +1654,9 @@ module BABYLON {
          * @param color new color for the ray.
          */
         public changeGazeColor(color: Color3) {
+            if(!(<StandardMaterial>this._cameraGazer._gazeTracker.material)){
+                return;
+            }
             (<StandardMaterial>this._cameraGazer._gazeTracker.material).emissiveColor = color;
             if(this.leftController){
                 (<StandardMaterial>this.leftController._gazeTracker.material).emissiveColor = color;