meta-client
Version:
Meta.js (Client)
1 lines • 9.51 kB
JavaScript
;Object.defineProperty(exports,'__esModule',{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _config=require('../../../../config');var _config2=_interopRequireDefault(_config);var _log=require('../../../Utilities/log');var _log2=_interopRequireDefault(_log);var _three=require('three');var _ViveController=require('./Controls/ViveController');var _OBJLoader=require('./Loaders/OBJLoader');var _OBJLoader2=_interopRequireDefault(_OBJLoader);var _Cube=require('../../Meta/Graphics/Geometries/Cube');var _Cube2=_interopRequireDefault(_Cube);var _Space=require('../../../Space/Space');var _Space2=_interopRequireDefault(_Space);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var hints=void 0;var scope=void 0;var touch1=false;var touch2=false;var _touch0=false;var _touch1=false;var _release0=false;var _touch={0:false,1:false};var keys={esc:false,enter:false,space:false};var _DEFAULT={FOG:{FAR:6.25},LOG:false};var touchedMeta1=false;var touchedMetaData1=false;var touchedMeta2=false;var touchedMetaData2=false;var intersected=[];var HeadMountedDisplay=function(){function HeadMountedDisplay(space){_classCallCheck(this,HeadMountedDisplay);scope=this;this.name='HeadMountedDisplay';this.space=space;navigator.getVRDisplays().then(function(displays){if(displays.length>0){var display=displays[0];space.renderer.vr.setDevice(display);space.renderer.vr.enabled=true;space.scene.fog.far=_DEFAULT.FOG.FAR;space.device=scope;(0,_log2.default)('['+scope.name+'] - Press (Space) + (Enter) to enter VR',scope.name,true);document.addEventListener('dblclick',function(event){event.stopPropagation();event.preventDefault();display.isPresenting?display.exitPresent():display.requestPresent([{source:space.renderer.domElement}])});addEventListener('dblclick',function(event){event.stopPropagation();event.preventDefault();display.isPresenting?display.exitPresent():display.requestPresent([{source:space.renderer.domElement}])});document.addEventListener('keydown',function(event){switch(event.keyCode){case 13:keys.enter=true;break;case 27:keys.esc=true;break;case 32:keys.space=true;break;}if(keys.enter&&keys.space){(0,_log2.default)('['+scope.name+'] - '+(!display.isPresenting?'Entered':'Exited')+' VR',scope.name,true);display.isPresenting?display.exitPresent():display.requestPresent([{source:space.renderer.domElement}])}},false);document.addEventListener('keyup',function(event){switch(event.keyCode){case 13:keys.enter=false;break;case 27:keys.esc=false;break;case 32:keys.space=false;break;}},false)}else{}});function onThumbpadDown0(){console.log(this.name+' - onThumbpadDown0')}function onThumbpadUp0(){console.log('onThumbpadUp0')}function onMenuDown0(){console.log('onMenuDown0')}function onMenuUp0(){console.log('onMenuUp0')}function onGripsDown0(){console.log('onGripsDown0')}function onGripsUp0(){console.log('onGripsUp0')}this.controller1=new _ViveController.ViveController(0);this.controller1.standingMatrix=scope.space.renderer.vr.getStandingMatrix();this.controller1.addEventListener('triggerdown',scope.onTriggerDown1);this.controller1.addEventListener('triggerup',scope.onTriggerUp1);this.controller1.addEventListener('thumbpaddown',onThumbpadDown0);this.controller1.addEventListener('thumbpadup',onThumbpadUp0);this.controller1.addEventListener('menudown',onMenuDown0);this.controller1.addEventListener('menuup',function(){_Space2.default.clear({events:false})});this.controller1.addEventListener('gripsdown',onGripsDown0);this.controller1.addEventListener('gripsup',onGripsUp0);scope.space.scene.add(scope.controller1);this.controller2=new _ViveController.ViveController(1);this.controller2.standingMatrix=scope.space.renderer.vr.getStandingMatrix();this.controller2.addEventListener('triggerdown',scope.onTriggerDown2);this.controller2.addEventListener('triggerup',scope.onTriggerUp2);this.controller2.addEventListener('thumbpaddown',onThumbpadDown0);this.controller2.addEventListener('thumbpadup',onThumbpadUp0);this.controller2.addEventListener('menudown',onMenuDown0);this.controller2.addEventListener('menuup',function(){_Space2.default.clear({events:false})});this.controller2.addEventListener('gripsdown',onGripsDown0);this.controller2.addEventListener('gripsup',onGripsUp0);scope.space.scene.add(scope.controller2);if(_config2.default.device.headMountedDisplay.controllerModels){var loader=new _OBJLoader2.default;loader.setPath('/static/models/vive-controller/');loader.load('vr_controller_vive_1_5.obj',function(object){var loader=new _three.TextureLoader;loader.setPath('/static/models/vive-controller/');var controller=object.children[0];controller.material.map=loader.load('onepointfive_texture.png');controller.material.specularMap=loader.load('onepointfive_spec.png');controller.castShadow=true;controller.receiveShadow=true;var pivot=new _three.Mesh(new _three.IcosahedronGeometry(0.01,2));pivot.name='pivot';pivot.position.y=-0.016;pivot.position.z=-0.043;pivot.rotation.x=Math.PI/5.5;controller.add(pivot);pivot.material=pivot.material.clone();scope.controller1.add(controller.clone());scope.controller2.add(controller.clone())})}else{var pivot=new _three.Mesh(new _three.SphereGeometry(.025,2,2),new _three.MeshBasicMaterial({color:255}));pivot.name='pivot';scope.controller1.add(pivot);scope.controller2.add(pivot.clone())}}_createClass(HeadMountedDisplay,[{key:'onTriggerDown2',value:function onTriggerDown2(controller){var data=[{position:new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)}];if(scope.controller2)data.push({position:new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)});if(touchedMeta2){touchedMeta2.go('touch',data,touchedMeta2)}else{scope.space.go('touch',data[0],scope.space)}}},{key:'onTriggerUp2',value:function onTriggerUp2(controller){var data=[{position:new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)}];if(scope.controller2)data.push({position:new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)});if(touchedMeta2){touchedMeta2.go('release',data,touchedMeta2)}else{scope.space.go('release',data[0],scope.space)}}},{key:'onTriggerDown1',value:function onTriggerDown1(){var position=new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld);var data=[{position:position}];if(scope.controller2)data.push({position:new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)});if(touchedMeta1){touchedMeta1.go('touch',data,touchedMeta1)}else{scope.space.go('touch',data[0],scope.space)}}},{key:'onTriggerUp1',value:function onTriggerUp1(){var mode=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;var data=[{position:new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)}];if(scope.controller2)data.push({position:new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)});if(touchedMeta1){touchedMeta1.go('release',data,touchedMeta1)}else{scope.space.go('release',data[0],scope.space)}}},{key:'intersect1',value:function intersect1(){scope.space.Meta.forEach(function(Meta){var point=new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld);var box=new _three.Box3().setFromObject(Meta.graphics.mesh);var distance=box.distanceToPoint(point);var data=[{hand:0,distance:distance,position:point}];if(scope.controller2){var _point=new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld);var _box=new _three.Box3().setFromObject(Meta.graphics.mesh);var _distance=_box.distanceToPoint(_point);data.push({hand:1,distance:_distance,position:_point})}if(distance<=0){touchedMeta1=Meta;touchedMetaData1=data;if(!Meta._entered1){Meta.go('touch',data,Meta);Meta.go('enter',data,Meta);Meta._entered1=true}}else{if(Meta._entered1){touchedMeta1=false;touchedMetaData1=data;Meta.go('leave',data,Meta);Meta._entered1=false}}})}},{key:'intersect2',value:function intersect2(){scope.space.Meta.forEach(function(Meta){var point=new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld);var box=new _three.Box3().setFromObject(Meta.graphics.mesh);var distance=box.distanceToPoint(point);var data=[{distance:distance,position:point}];if(scope.controller2){var _point2=new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld);var _box2=new _three.Box3().setFromObject(Meta.graphics.mesh);var _distance2=_box2.distanceToPoint(_point2);data.push({distance:_distance2,position:_point2})}if(distance<=0){touchedMeta2=Meta;touchedMetaData2=data;if(!Meta._entered2){Meta.go('enter',data,Meta);Meta._entered2=true}}else{if(Meta._entered2){touchedMeta2=false;touchedMetaData2=data;Meta.go('leave',data,Meta);Meta._entered2=false};};})}},{key:'render',value:function render(){scope.controller1.update();scope.controller2.update();if(scope.controller1)scope.intersect1();if(scope.controller2)scope.intersect2()}}]);return HeadMountedDisplay}();exports.default=HeadMountedDisplay;