Spaces:
Running
Running
| /** | |
| * @author servinlp | |
| */ | |
| THREE.GearVRController = function () { | |
| THREE.Object3D.call( this ); | |
| var scope = this; | |
| var gamepad; | |
| var axes = [ 0, 0 ]; | |
| var touchpadIsPressed = false; | |
| var triggerIsPressed = false; | |
| var angularVelocity = new THREE.Vector3(); | |
| this.matrixAutoUpdate = true; | |
| function findGamepad() { | |
| var gamepads = navigator.getGamepads && navigator.getGamepads(); | |
| for ( var i = 0; i < 4; i ++ ) { | |
| var gamepad = gamepads[ i ]; | |
| if ( gamepad && ( gamepad.id === 'Gear VR Controller' || gamepad.id === 'Oculus Go Controller' ) ) { | |
| return gamepad; | |
| } | |
| } | |
| } | |
| this.getGamepad = function () { | |
| return gamepad; | |
| }; | |
| this.getTouchpadState = function () { | |
| return touchpadIsPressed; | |
| }; | |
| this.update = function () { | |
| gamepad = findGamepad(); | |
| if ( gamepad !== undefined && gamepad.pose !== undefined ) { | |
| var pose = gamepad.pose; | |
| if ( pose === null ) return; // no user action yet | |
| // orientation | |
| if ( pose.orientation !== null ) scope.quaternion.fromArray( pose.orientation ); | |
| scope.updateMatrix(); | |
| scope.visible = true; | |
| // angular velocity | |
| if ( pose.angularVelocity !== null && ! angularVelocity.equals( pose.angularVelocity ) ) { | |
| angularVelocity.fromArray( pose.angularVelocity ); | |
| scope.dispatchEvent( { type: 'angularvelocitychanged', angularVelocity: angularVelocity } ); | |
| } | |
| // axes (touchpad) | |
| if ( axes[ 0 ] !== gamepad.axes[ 0 ] || axes[ 1 ] !== gamepad.axes[ 1 ] ) { | |
| axes[ 0 ] = gamepad.axes[ 0 ]; | |
| axes[ 1 ] = gamepad.axes[ 1 ]; | |
| scope.dispatchEvent( { type: 'axischanged', axes: axes } ); | |
| } | |
| // button (touchpad) | |
| if ( touchpadIsPressed !== gamepad.buttons[ 0 ].pressed ) { | |
| touchpadIsPressed = gamepad.buttons[ 0 ].pressed; | |
| scope.dispatchEvent( { type: touchpadIsPressed ? 'touchpaddown' : 'touchpadup', axes: axes } ); | |
| } | |
| // trigger | |
| if ( triggerIsPressed !== gamepad.buttons[ 1 ].pressed ) { | |
| triggerIsPressed = gamepad.buttons[ 1 ].pressed; | |
| scope.dispatchEvent( { type: triggerIsPressed ? 'triggerdown' : 'triggerup' } ); | |
| } | |
| // app button not available, reserved for use by the browser | |
| } else { | |
| scope.visible = false; | |
| } | |
| }; | |
| // DEPRECATED | |
| this.getTouchPadState = function () { | |
| console.warn( 'THREE.GearVRController: getTouchPadState() is now getTouchpadState()' ); | |
| return touchpadIsPressed; | |
| }; | |
| this.setHand = function () { | |
| console.warn( 'THREE.GearVRController: setHand() has been removed.' ); | |
| }; | |
| }; | |
| THREE.GearVRController.prototype = Object.create( THREE.Object3D.prototype ); | |
| THREE.GearVRController.prototype.constructor = THREE.GearVRController; | |