mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
133 lines
2.6 KiB
JavaScript
133 lines
2.6 KiB
JavaScript
/**
|
|
* @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;
|