Browse Source

Avoid emiting squeeze events on controllers that doesn't have a grip as the daydream

Fernando Serrano 5 years ago
parent
commit
5d09b88ce1
1 changed files with 13 additions and 9 deletions
  1. 13 9
      src/renderers/webvr/WebVRManager.js

+ 13 - 9
src/renderers/webvr/WebVRManager.js

@@ -181,23 +181,27 @@ function WebVRManager( renderer ) {
 				}
 
 				// Grip
-
-				buttonId = gamepad.buttons.length > 2 ? 2 : 0;
+				buttonId = 2;
 
 				if ( grips[ i ] === undefined ) grips[ i ] = false;
 
-				if ( grips[ i ] !== gamepad.buttons[ buttonId ].pressed ) {
+				// Skip if the grip button doesn't exist on this controller
+				if ( gamepad.buttons[ buttonId ] !== undefined ) {
 
-					grips[ i ] = gamepad.buttons[ buttonId ].pressed;
+					if ( grips[ i ] !== gamepad.buttons[ buttonId ].pressed ) {
 
-					if ( grips[ i ] === true ) {
+						grips[ i ] = gamepad.buttons[ buttonId ].pressed;
 
-						controller.dispatchEvent( { type: 'squeezestart' } );
+						if ( grips[ i ] === true ) {
 
-					} else {
+							controller.dispatchEvent( { type: 'squeezestart' } );
+
+						} else {
+
+							controller.dispatchEvent( { type: 'squeezeend' } );
+							controller.dispatchEvent( { type: 'squeeze' } );
 
-						controller.dispatchEvent( { type: 'squeezeend' } );
-						controller.dispatchEvent( { type: 'squeeze' } );
+						}
 
 					}