| |
| |
| |
|
|
| 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; |
|
|
| |
|
|
| if ( pose.orientation !== null ) scope.quaternion.fromArray( pose.orientation ); |
|
|
| scope.updateMatrix(); |
| scope.visible = true; |
|
|
| |
|
|
| if ( pose.angularVelocity !== null && ! angularVelocity.equals( pose.angularVelocity ) ) { |
|
|
| angularVelocity.fromArray( pose.angularVelocity ); |
| scope.dispatchEvent( { type: 'angularvelocitychanged', angularVelocity: angularVelocity } ); |
|
|
| } |
|
|
| |
|
|
| 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 } ); |
|
|
| } |
|
|
| |
|
|
| if ( touchpadIsPressed !== gamepad.buttons[ 0 ].pressed ) { |
|
|
| touchpadIsPressed = gamepad.buttons[ 0 ].pressed; |
| scope.dispatchEvent( { type: touchpadIsPressed ? 'touchpaddown' : 'touchpadup', axes: axes } ); |
|
|
| } |
|
|
|
|
| |
|
|
| if ( triggerIsPressed !== gamepad.buttons[ 1 ].pressed ) { |
|
|
| triggerIsPressed = gamepad.buttons[ 1 ].pressed; |
| scope.dispatchEvent( { type: triggerIsPressed ? 'triggerdown' : 'triggerup' } ); |
|
|
| } |
|
|
| |
|
|
| } else { |
|
|
| scope.visible = false; |
|
|
| } |
|
|
| }; |
|
|
| |
|
|
| 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; |
|
|