meta-client
Version:
Meta.js (Client)
1 lines • 2.38 kB
JavaScript
;Object.defineProperty(exports,'__esModule',{value:true});exports.ViveController=ViveController;var _three=require('three');function ViveController(id){_three.Object3D.call(this);var scope=this;var gamepad;var axes=[0,0];var thumbpadIsPressed=false;var triggerIsPressed=false;var gripsArePressed=false;var menuIsPressed=false;function findGamepad(id){var gamepads=navigator.getGamepads&&navigator.getGamepads();for(var i=0,j=0;i<gamepads.length;i++){var gamepad=gamepads[i];if(gamepad&&(gamepad.id==='OpenVR Gamepad'||gamepad.id.startsWith('Oculus Touch')||gamepad.id.startsWith('Spatial Controller'))){if(j===id)return gamepad;j++}}}this.matrixAutoUpdate=false;this.standingMatrix=new _three.Matrix4;this.getGamepad=function(){return gamepad};this.getButtonState=function(button){if(button==='thumbpad')return thumbpadIsPressed;if(button==='trigger')return triggerIsPressed;if(button==='grips')return gripsArePressed;if(button==='menu')return menuIsPressed};this.update=function(){gamepad=findGamepad(id);if(gamepad!==undefined&&gamepad.pose!==undefined){if(gamepad.pose===null)return;var pose=gamepad.pose;if(pose.position!==null)scope.position.fromArray(pose.position);if(pose.orientation!==null)scope.quaternion.fromArray(pose.orientation);scope.matrix.compose(scope.position,scope.quaternion,scope.scale);scope.matrix.premultiply(scope.standingMatrix);scope.matrixWorldNeedsUpdate=true;scope.visible=true;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(thumbpadIsPressed!==gamepad.buttons[0].pressed){thumbpadIsPressed=gamepad.buttons[0].pressed;scope.dispatchEvent({type:thumbpadIsPressed?'thumbpaddown':'thumbpadup',axes:axes})}if(triggerIsPressed!==gamepad.buttons[1].pressed){triggerIsPressed=gamepad.buttons[1].pressed;scope.dispatchEvent({type:triggerIsPressed?'triggerdown':'triggerup'})}if(gripsArePressed!==gamepad.buttons[2].pressed){gripsArePressed=gamepad.buttons[2].pressed;scope.dispatchEvent({type:gripsArePressed?'gripsdown':'gripsup'})}if(menuIsPressed!==gamepad.buttons[3].pressed){menuIsPressed=gamepad.buttons[3].pressed;scope.dispatchEvent({type:menuIsPressed?'menudown':'menuup'})}}else{scope.visible=false}}};ViveController.prototype=Object.create(_three.Object3D.prototype);ViveController.prototype.constructor=ViveController;