meta-client
Version:
Meta.js (Client)
1 lines • 9.34 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 _three=require('three');var _log=require('../../../Utilities/log');var _log2=_interopRequireDefault(_log);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')}}function prepare(event){event.preventDefault()}var name='DesktopDeviceController';var scope=void 0;var raycaster=new _three.Raycaster;var raycasterGlobe=new _three.Raycaster;var mouse=new _three.Vector2;mouse.x=null;mouse.y=null;var offset=new _three.Vector3;var intersection=new _three.Vector3;var onMouseMove=void 0,onMouseDown=void 0,onMouseUp=void 0,onKeyDown=void 0,onKeyUp=void 0;var selected=null,hovered=null;var selectedGlobe=null;var selectedGlobePoint=null;var intersectsGlobePlane=null;var MetaPosition=null;var globePlane=null;var moveForward=false;var moveBackward=false;var moveLeft=false;var moveRight=false;var moveUp=false;var moveDown=false;var prevTime=performance.now();var velocity=new _three.Vector3;var metaEntered=false;var metaEnteredData=null;var keys={enter:false,space:false,esc:false};var globe=void 0;var plane=void 0;var data=void 0;var _DEFAULT={ACCELERATION:250,FOG:{FAR:25},CONTAINER:{SCALE:1,POSITION:{Y:-2,Z:-10}},GLOBE:{RADIUS:10.5}};var MobileDeviceController=function(){function MobileDeviceController(space){_classCallCheck(this,MobileDeviceController);scope=this;this.space=space;globe=new _three.Mesh(new _three.SphereGeometry(Math.abs(_config2.default.device.mobile.camera.position.z),32,32),new _three.MeshBasicMaterial({color:_config2.default.device.mobile.globe.color,wireframe:_config2.default.device.mobile.globe.wireframe,transparent:_config2.default.device.mobile.globe.transparency,opacity:_config2.default.device.mobile.globe.opacity,side:_three.DoubleSide}));space.camera.add(globe);space.container.position.copy(_config2.default.device.mobile.container.position);space.camera.position.copy(_config2.default.device.mobile.camera.position);space.scene.fog.far=Math.abs(_config2.default.device.mobile.camera.position.z*2);onKeyDown=function onKeyDown(event){switch(event.keyCode){case 13:keys.enter=true;break;case 27:keys.esc=true;break;case 32:keys.space=true;break;case 38:case 87:moveForward=true;break;case 37:case 65:moveLeft=true;break;case 40:case 83:moveBackward=true;break;case 39:case 68:moveRight=true;break;case 32:moveUp=true;break;case 16:moveDown=true;break;}if(keys.enter&&keys.space){scope.space.go('release');element.requestPointerLock=element.requestPointerLock||element.mozRequestPointerLock||element.webkitRequestPointerLock;element.requestPointerLock()}};onKeyUp=function onKeyUp(event){switch(event.keyCode){case 13:keys.enter=false;break;case 27:keys.esc=false;break;case 32:keys.space=false;break;case 38:case 87:moveForward=false;break;case 37:case 65:moveLeft=false;break;case 40:case 83:moveBackward=false;break;case 39:case 68:moveRight=false;break;case 32:moveUp=false;break;case 16:moveDown=false;break;}};onMouseDown=function onMouseDown(event){prepare(event);mouse.x=+(event.touches[0].pageX/window.innerWidth)*2-1;mouse.y=-(event.touches[0].pageY/window.innerHeight)*2+1;raycaster.setFromCamera(mouse,space.camera);var intersects=raycaster.intersectObjects(scope.space.container.children);if(intersects.length>0){selected=intersects[0].object;scope.space.Meta.forEach(function(Meta){if(Meta.graphics.mesh.id===selected.id){MetaPosition=intersects[0].point;MetaPosition.z=MetaPosition.z+Math.abs(_config2.default.device.mobile.container.position.z);MetaPosition.y=MetaPosition.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data={position:MetaPosition};Meta.go('touch',_data);plane=new _three.Mesh(new _three.PlaneGeometry(100,100,10,10),new _three.MeshBasicMaterial({wireframe:true,transparent:true,opacity:false}));plane.position.copy(MetaPosition);scope.space.container.add(plane)}})}else{(0,_log2.default)('Looking for space reaches',name);var _intersectsGlobe=raycaster.intersectObject(globe);if(_intersectsGlobe.length>0){selectedGlobe=_intersectsGlobe[0].object;selectedGlobePoint=_intersectsGlobe[0].point;selectedGlobePoint.z=selectedGlobePoint.z+Math.abs(_config2.default.device.mobile.container.position.z);selectedGlobePoint.y=selectedGlobePoint.y+Math.abs(_config2.default.device.mobile.container.position.y);globePlane=new _three.Mesh(new _three.PlaneGeometry(100,100,10,10),new _three.MeshBasicMaterial({wireframe:_config2.default.device.desktop.globe.wireframe,transparent:true,opacity:_config2.default.device.desktop.globe.opacity}));globePlane.position.copy(selectedGlobePoint);scope.space.scene.add(globePlane);var _data2={position:selectedGlobePoint};(0,_log2.default)('about to trigger space touch');scope.space.go('touch',_data2)};}};onMouseMove=function onMouseMove(event){prepare(event);mouse.x=+(event.touches[0].pageX/window.innerWidth)*2-1;mouse.y=-(event.touches[0].pageY/window.innerHeight)*2+1;raycaster.setFromCamera(mouse,space.camera);if(globePlane){(0,_log2.default)('Intersected globe',name);intersectsGlobePlane=raycaster.intersectObject(globePlane);if(intersectsGlobePlane.length>0){var position=intersectsGlobePlane[0].point;position.z=position.z+Math.abs(_config2.default.device.mobile.container.position.z);position.y=position.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data3={position:position};scope.space.go('touch',_data3)}}else{(0,_log2.default)('Intersected space',name);var _intersectsGlobe=raycaster.intersectObject(globe);if(_intersectsGlobe.length>0){var _position=_intersectsGlobe[0].point;_position.z=_position.z+Math.abs(_config2.default.device.mobile.container.position.z);_position.y=_position.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data4={position:_position};scope.space.go('point',_data4)}}if(selected){var _intersects=raycaster.intersectObject(plane);if(_intersects.length>0){var object=_intersects[0].object;MetaPosition=_intersects[0].point;MetaPosition.z=MetaPosition.z+Math.abs(_config2.default.device.mobile.container.position.z);MetaPosition.y=MetaPosition.y+Math.abs(_config2.default.device.mobile.container.position.y);scope.space.Meta.forEach(function(Meta){if(Meta.graphics.mesh.id===selected.id){var _data5={position:MetaPosition};Meta.go('touch',_data5)}})}}var intersects=raycaster.intersectObjects(scope.space.container.children);if(intersects.length>0){(0,_log2.default)('Intersected Meta',name);var _position2=intersects[0].point;_position2.z=_position2.z+Math.abs(_config2.default.device.mobile.container.position.z);_position2.y=_position2.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data6={position:_position2};scope.space.Meta.forEach(function(Meta){if(Meta.graphics.mesh.id===intersects[0].object.id){Meta.go('point',_data6);if(!Meta._entered){Meta.go('enter',_data6);Meta._entered=true}else{Meta.go('leave',_data6);Meta._entered=false}}})}else{scope.space.Meta.forEach(function(Meta){if(Meta._entered){Meta.go('leave',data);Meta._entered=false}})}};onMouseUp=function onMouseUp(event){prepare(event);if(globePlane){scope.space.container.remove(globePlane);globePlane=false}raycaster.setFromCamera(mouse,space.camera);var _intersectsGlobe=raycaster.intersectObjects(scope.space.camera.children);if(_intersectsGlobe.length>0){(0,_log2.default)('Intersected globe (onMouseDown)',name);selectedGlobe=_intersectsGlobe[0].object;var point=_intersectsGlobe[0].point;point.z=point.z+Math.abs(_config2.default.device.mobile.container.position.z);point.y=point.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data7={position:point};scope.space.go('release',_data7)}if(selected){scope.space.container.remove(plane);plane=null;space.Meta.find(function(Meta){if(Meta.graphics.mesh.id===selected.id){var _data8={position:MetaPosition};Meta.go('release',_data8)}});selected=null}else{}};this.init();return this}_createClass(MobileDeviceController,[{key:'init',value:function init(){document.addEventListener('keydown',onKeyDown,false);document.addEventListener('keyup',onKeyUp,false);addEventListener('touchmove',onMouseMove,false);addEventListener('touchstart',onMouseDown,false);addEventListener('touchend',onMouseUp,false)}},{key:'deactivate',value:function deactivate(){document.removeEventListener('keydown',onKeyDown,false);document.removeEventListener('keyup',onKeyUp,false);removeEventListener('ontouchmove',onMouseMove,false);removeEventListener('ontouchstart',onMouseDown,false);removeEventListener('ontouchend',onMouseUp,false)}},{key:'render',value:function render(space){}}]);return MobileDeviceController}();exports.default=MobileDeviceController;