MCPcopy Create free account
hub / github.com/GoogleChrome/samples / _classCallCheck

Function _classCallCheck

web-vr/basic-input/third_party/ray.min.js:1–1  ·  view source on GitHub ↗
(instance,Constructor)

Source from the content-addressed store, hash-verified

1(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.RayInput=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){"use strict";var has=Object.prototype.hasOwnProperty;var prefix=typeof Object.create!=="function"?"~":false;function EE(fn,context,once){this.fn=fn;this.context=context;this.once=once||false}function EventEmitter(){}EventEmitter.prototype._events=undefined;EventEmitter.prototype.eventNames=function eventNames(){var events=this._events,names=[],name;if(!events)return names;for(name in events){if(has.call(events,name))names.push(prefix?name.slice(1):name)}if(Object.getOwnPropertySymbols){return names.concat(Object.getOwnPropertySymbols(events))}return names};EventEmitter.prototype.listeners=function listeners(event,exists){var evt=prefix?prefix+event:event,available=this._events&&this._events[evt];if(exists)return!!available;if(!available)return[];if(available.fn)return[available.fn];for(var i=0,l=available.length,ee=new Array(l);i<l;i++){ee[i]=available[i].fn}return ee};EventEmitter.prototype.emit=function emit(event,a1,a2,a3,a4,a5){var evt=prefix?prefix+event:event;if(!this._events||!this._events[evt])return false;var listeners=this._events[evt],len=arguments.length,args,i;if("function"===typeof listeners.fn){if(listeners.once)this.removeListener(event,listeners.fn,undefined,true);switch(len){case 1:return listeners.fn.call(listeners.context),true;case 2:return listeners.fn.call(listeners.context,a1),true;case 3:return listeners.fn.call(listeners.context,a1,a2),true;case 4:return listeners.fn.call(listeners.context,a1,a2,a3),true;case 5:return listeners.fn.call(listeners.context,a1,a2,a3,a4),true;case 6:return listeners.fn.call(listeners.context,a1,a2,a3,a4,a5),true}for(i=1,args=new Array(len-1);i<len;i++){args[i-1]=arguments[i]}listeners.fn.apply(listeners.context,args)}else{var length=listeners.length,j;for(i=0;i<length;i++){if(listeners[i].once)this.removeListener(event,listeners[i].fn,undefined,true);switch(len){case 1:listeners[i].fn.call(listeners[i].context);break;case 2:listeners[i].fn.call(listeners[i].context,a1);break;case 3:listeners[i].fn.call(listeners[i].context,a1,a2);break;default:if(!args)for(j=1,args=new Array(len-1);j<len;j++){args[j-1]=arguments[j]}listeners[i].fn.apply(listeners[i].context,args)}}}return true};EventEmitter.prototype.on=function on(event,fn,context){var listener=new EE(fn,context||this),evt=prefix?prefix+event:event;if(!this._events)this._events=prefix?{}:Object.create(null);if(!this._events[evt])this._events[evt]=listener;else{if(!this._events[evt].fn)this._events[evt].push(listener);else this._events[evt]=[this._events[evt],listener]}return this};EventEmitter.prototype.once=function once(event,fn,context){var listener=new EE(fn,context||this,true),evt=prefix?prefix+event:event;if(!this._events)this._events=prefix?{}:Object.create(null);if(!this._events[evt])this._events[evt]=listener;else{if(!this._events[evt].fn)this._events[evt].push(listener);else this._events[evt]=[this._events[evt],listener]}return this};EventEmitter.prototype.removeListener=function removeListener(event,fn,context,once){var evt=prefix?prefix+event:event;if(!this._events||!this._events[evt])return this;var listeners=this._events[evt],events=[];if(fn){if(listeners.fn){if(listeners.fn!==fn||once&&!listeners.once||context&&listeners.context!==context){events.push(listeners)}}else{for(var i=0,length=listeners.length;i<length;i++){if(listeners[i].fn!==fn||once&&!listeners[i].once||context&&listeners[i].context!==context){events.push(listeners[i])}}}}if(events.length){this._events[evt]=events.length===1?events[0]:events}else{delete this._events[evt]}return this};EventEmitter.prototype.removeAllListeners=function removeAllListeners(event){if(!this._events)return this;if(event)delete this._events[prefix?prefix+event:event];else this._events=prefix?{}:Object.create(null);return this};EventEmitter.prototype.off=EventEmitter.prototype.removeListener;EventEmitter.prototype.addListener=EventEmitter.prototype.on;EventEmitter.prototype.setMaxListeners=function setMaxListeners(){return this};EventEmitter.prefixed=prefix;if("undefined"!==typeof module){module.exports=EventEmitter}},{}],2:[function(require,module,exports){"use strict";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}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var HEAD_ELBOW_OFFSET=new THREE.Vector3(.155,-.465,-.15);var ELBOW_WRIST_OFFSET=new THREE.Vector3(0,0,-.25);var WRIST_CONTROLLER_OFFSET=new THREE.Vector3(0,0,.05);var ARM_EXTENSION_OFFSET=new THREE.Vector3(-.08,.14,.08);var ELBOW_BEND_RATIO=.4;var EXTENSION_RATIO_WEIGHT=.4;var MIN_ANGULAR_SPEED=.61;var OrientationArmModel=function(){function OrientationArmModel(){_classCallCheck(this,OrientationArmModel);this.isLeftHanded=false;this.controllerQ=new THREE.Quaternion;this.lastControllerQ=new THREE.Quaternion;this.headQ=new THREE.Quaternion;this.headPos=new THREE.Vector3;this.elbowPos=new THREE.Vector3;this.wristPos=new THREE.Vector3;this.time=null;this.lastTime=null;this.rootQ=new THREE.Quaternion;this.pose={orientation:new THREE.Quaternion,position:new THREE.Vector3}}_createClass(OrientationArmModel,[{key:"setControllerOrientation",value:function setControllerOrientation(quaternion){this.lastControllerQ.copy(this.controllerQ);this.controllerQ.copy(quaternion)}},{key:"setHeadOrientation",value:function setHeadOrientation(quaternion){this.headQ.copy(quaternion)}},{key:"setHeadPosition",value:function setHeadPosition(position){this.headPos.copy(position)}},{key:"setLeftHanded",value:function setLeftHanded(isLeftHanded){this.isLeftHanded=isLeftHanded}},{key:"update",value:function update(){this.time=performance.now();var headYawQ=this.getHeadYawOrientation_();var timeDelta=(this.time-this.lastTime)/1e3;var angleDelta=this.quatAngle_(this.lastControllerQ,this.controllerQ);var controllerAngularSpeed=angleDelta/timeDelta;if(controllerAngularSpeed>MIN_ANGULAR_SPEED){this.rootQ.slerp(headYawQ,angleDelta/10)}else{this.rootQ.copy(headYawQ)}var controllerEuler=(new THREE.Euler).setFromQuaternion(this.controllerQ,"YXZ");var controllerXDeg=THREE.Math.radToDeg(controllerEuler.x);var extensionRatio=this.clamp_((controllerXDeg-11)/(50-11),0,1);var controllerCameraQ=this.rootQ.clone().inverse();controllerCameraQ.multiply(this.controllerQ);var elbowPos=this.elbowPos;elbowPos.copy(this.headPos).add(HEAD_ELBOW_OFFSET);var elbowOffset=(new THREE.Vector3).copy(ARM_EXTENSION_OFFSET);elbowOffset.multiplyScalar(extensionRatio);elbowPos.add(elbowOffset);var totalAngle=this.quatAngle_(controllerCameraQ,new THREE.Quaternion);var totalAngleDeg=THREE.Math.radToDeg(totalAngle);var lerpSuppression=1-Math.pow(totalAngleDeg/180,4);var elbowRatio=ELBOW_BEND_RATIO;var wristRatio=1-ELBOW_BEND_RATIO;var lerpValue=lerpSuppression*(elbowRatio+wristRatio*extensionRatio*EXTENSION_RATIO_WEIGHT);var wristQ=(new THREE.Quaternion).slerp(controllerCameraQ,lerpValue);var invWristQ=wristQ.inverse();var elbowQ=controllerCameraQ.clone().multiply(invWristQ);var wristPos=this.wristPos;wristPos.copy(WRIST_CONTROLLER_OFFSET);wristPos.applyQuaternion(wristQ);wristPos.add(ELBOW_WRIST_OFFSET);wristPos.applyQuaternion(elbowQ);wristPos.add(this.elbowPos);var offset=(new THREE.Vector3).copy(ARM_EXTENSION_OFFSET);offset.multiplyScalar(extensionRatio);var position=(new THREE.Vector3).copy(this.wristPos);position.add(offset);position.applyQuaternion(this.rootQ);var orientation=(new THREE.Quaternion).copy(this.controllerQ);this.pose.orientation.copy(orientation);this.pose.position.copy(position);this.lastTime=this.time}},{key:"getPose",value:function getPose(){return this.pose}},{key:"getForearmLength",value:function getForearmLength(){return ELBOW_WRIST_OFFSET.length()}},{key:"getElbowPosition",value:function getElbowPosition(){var out=this.elbowPos.clone();return out.applyQuaternion(this.rootQ)}},{key:"getWristPosition",value:function getWristPosition(){var out=this.wristPos.clone();return out.applyQuaternion(this.rootQ)}},{key:"getHeadYawOrientation_",value:function getHeadYawOrientation_(){var headEuler=(new THREE.Euler).setFromQuaternion(this.headQ,"YXZ");headEuler.x=0;headEuler.z=0;var destinationQ=(new THREE.Quaternion).setFromEuler(headEuler);return destinationQ}},{key:"clamp_",value:function clamp_(value,min,max){return Math.min(Math.max(value,min),max)}},{key:"quatAngle_",value:function quatAngle_(q1,q2){var vec1=new THREE.Vector3(0,0,-1);var vec2=new THREE.Vector3(0,0,-1);vec1.applyQuaternion(q1);vec2.applyQuaternion(q2);return vec1.angleTo(vec2)}}]);return OrientationArmModel}();exports.default=OrientationArmModel},{}],3:[function(require,module,exports){"use strict";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 _eventemitter=require("eventemitter3");var _eventemitter2=_interopRequireDefault(_eventemitter);var _rayInteractionModes=require("./ray-interaction-modes");var _rayInteractionModes2=_interopRequireDefault(_rayInteractionModes);var _util=require("./util");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 _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var DRAG_DISTANCE_PX=10;var RayController=function(_EventEmitter){_inherits(RayController,_EventEmitter);function RayController(opt_el){_classCallCheck(this,RayController);var _this=_possibleConstructorReturn(this,(RayController.__proto__||Object.getPrototypeOf(RayController)).call(this));var el=opt_el||window;el.addEventListener("mousedown",_this.onMouseDown_.bind(_this));el.addEventListener("mousemove",_this.onMouseMove_.bind(_this));el.addEventListener("mouseup",_this.onMouseUp_.bind(_this));el.addEventListener("touchstart",_this.onTouchStart_.bind(_this));el.addEventListener("touchmove",_this.onTouchMove_.bind(_this));el.addEventListener("touchend",_this.onTouchEnd_.bind(_this));_this.pointer=new THREE.Vector2;_this.lastPointer=new THREE.Vector2;_this.pointerNdc=new THREE.Vector2;_this.dragDistance=0;_this.isDragging=false;_this.isTouchActive=false;_this.gamepad=null;if(!navigator.getVRDisplays){console.warn("WebVR API not available! Consider using the webvr-polyfill.")}else{navigator.getVRDisplays().then(function(displays){_this.vrDisplay=displays[0]})}return _this}_createClass(RayController,[{key:"getInteractionMode",value:function getInteractionMode(){var gamepad=this.getVRGamepad_();if(gamepad){var pose=gamepad.pose;if(pose.hasPosition){return _rayInteractionModes2.default.VR_6DOF}if(pose.hasOrientation){return _rayInteractionModes2.default.VR_3DOF}}else{if((0,_util.isMobile)()){if(this.vrDisplay&&this.vrDisplay.isPresenting){return _rayInteractionModes2.default.VR_0DOF}else{return _rayInteractionModes2.default.TOUCH}}else{return _rayInteractionModes2.default.MOUSE}}return _rayInteractionModes2.default.TOUCH}},{key:"getGamepadPose",value:function getGamepadPose(){var gamepad=this.getVRGamepad_();return gamepad.pose}},{key:"getIsTouchActive",value:function getIsTouchActive(){return this.isTouchActive}},{key:"setSize",value:function setSize(size){this.size=size}},{key:"update",value:function update(){var mode=this.getInteractionMode();if(mode==_rayInteractionModes2.default.VR_3DOF||mode==_rayInteractionModes2.default.VR_6DOF){var isGamepadPressed=this.getGamepadButtonPressed_();if(isGamepadPressed&&!this.wasGamepadPressed){this.emit("raydown")}if(!isGamepadPressed&&this.wasGamepadPressed){this.emit("rayup")}this.wasGamepadPressed=isGamepadPressed}}},{key:"getGamepadButtonPressed_",value:function getGamepadButtonPressed_(){var gamepad=this.getVRGamepad_();if(!gamepad){return false}for(var j=0;j<gamepad.buttons.length;++j){if(gamepad.buttons[j].pressed){return true}}return false}},{key:"onMouseDown_",value:function onMouseDown_(e){this.startDragging_(e);this.emit("raydown")}},{key:"onMouseMove_",value:function onMouseMove_(e){this.updatePointer_(e);this.updateDragDistance_();this.emit("pointermove",this.pointerNdc)}},{key:"onMouseUp_",value:function onMouseUp_(e){this.endDragging_()}},{key:"onTouchStart_",value:function onTouchStart_(e){this.isTouchActive=true;var t=e.touches[0];this.startDragging_(t);this.updateTouchPointer_(e);this.emit("pointermove",this.pointerNdc);this.emit("raydown");e.preventDefault()}},{key:"onTouchMove_",value:function onTouchMove_(e){this.updateTouchPointer_(e);this.updateDragDistance_();e.preventDefault()}},{key:"onTouchEnd_",value:function onTouchEnd_(e){this.endDragging_();e.preventDefault();this.isTouchActive=false}},{key:"updateTouchPointer_",value:function updateTouchPointer_(e){if(e.touches.length===0){console.warn("Received touch event with no touches.");return}var t=e.touches[0];this.updatePointer_(t)}},{key:"updatePointer_",value:function updatePointer_(e){this.pointer.set(e.clientX,e.clientY);this.pointerNdc.x=e.clientX/this.size.width*2-1;this.pointerNdc.y=-(e.clientY/this.size.height)*2+1}},{key:"updateDragDistance_",value:function updateDragDistance_(){if(this.isDragging){var distance=this.lastPointer.sub(this.pointer).length();this.dragDistance+=distance;this.lastPointer.copy(this.pointer);if(this.dragDistance>DRAG_DISTANCE_PX){this.emit("raycancel");this.isDragging=false}}}},{key:"startDragging_",value:function startDragging_(e){this.isDragging=true;this.lastPointer.set(e.clientX,e.clientY)}},{key:"endDragging_",value:function endDragging_(){if(this.dragDistance<DRAG_DISTANCE_PX){this.emit("rayup")}this.dragDistance=0;this.isDragging=false}},{key:"getVRGamepad_",value:function getVRGamepad_(){if(!navigator.getGamepads){return null}var gamepads=navigator.getGamepads();for(var i=0;i<gamepads.length;++i){var gamepad=gamepads[i];if(gamepad&&gamepad.pose){return gamepad}}return null}}]);return RayController}(_eventemitter2.default);exports.default=RayController},{"./ray-interaction-modes":5,"./util":7,eventemitter3:1}],4:[function(require,module,exports){"use strict";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 _orientationArmModel=require("./orientation-arm-model");var _orientationArmModel2=_interopRequireDefault(_orientationArmModel);var _eventemitter=require("eventemitter3");var _eventemitter2=_interopRequireDefault(_eventemitter);var _rayRenderer=require("./ray-renderer");var _rayRenderer2=_interopRequireDefault(_rayRenderer);var _rayController=require("./ray-controller");var _rayController2=_interopRequireDefault(_rayController);var _rayInteractionModes=require("./ray-interaction-modes");var _rayInteractionModes2=_interopRequireDefault(_rayInteractionModes);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 _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var RayInput=function(_EventEmitter){_inherits(RayInput,_EventEmitter);function RayInput(camera,opt_el){_classCallCheck(this,RayInput);var _this=_possibleConstructorReturn(this,(RayInput.__proto__||Object.getPrototypeOf(RayInput)).call(this));_this.camera=camera;_this.renderer=new _rayRenderer2.default(camera);_this.controller=new _rayController2.default(opt_el);_this.armModel=new _orientationArmModel2.default;_this.controller.on("raydown",_this.onRayDown_.bind(_this));_this.controller.on("rayup",_this.onRayUp_.bind(_this));_this.controller.on("raycancel",_this.onRayCancel_.bind(_this));_this.controller.on("pointermove",_this.onPointerMove_.bind(_this));_this.renderer.on("rayover",function(mesh){_this.emit("rayover",mesh)});_this.renderer.on("rayout",function(mesh){_this.emit("rayout",mesh)});_this.pointerNdc=new THREE.Vector2(1,1);_this.handlers={};return _this}_createClass(RayInput,[{key:"add",value:function add(object,handlers){this.renderer.add(object,handlers);this.handlers[object.id]=handlers}},{key:"remove",value:function remove(object){this.renderer.remove(object);delete this.handlers[object.id]}},{key:"update",value:function update(){var lookAt=new THREE.Vector3(0,0,-1);lookAt.applyQuaternion(this.camera.quaternion);var mode=this.controller.getInteractionMode();switch(mode){case _rayInteractionModes2.default.MOUSE:this.renderer.setPointer(this.pointerNdc);this.renderer.setRayVisibility(false);this.renderer.setReticleVisibility(false);this.renderer.setActive(true);break;case _rayInteractionModes2.default.TOUCH:this.renderer.setPointer(this.pointerNdc);this.renderer.setRayVisibility(false);this.renderer.setReticleVisibility(false);this.renderer.setActive(this.controller.getIsTouchActive());break;case _rayInteractionModes2.default.VR_0DOF:this.renderer.setPosition(this.camera.position);this.renderer.setOrientation(this.camera.quaternion);this.renderer.setRayVisibility(false);this.renderer.setReticleVisibility(true);this.renderer.setActive(true);break;case _rayInteractionModes2.default.VR_3DOF:var pose=this.controller.getGamepadPose();var controllerOrientation=(new THREE.Quaternion).fromArray(pose.orientation);this.armModel.setHeadOrientation(this.camera.quaternion);this.armModel.setHeadPosition(this.camera.position);this.armModel.setControllerOrientation(controllerOrientation);this.armModel.update();var modelPose=this.armModel.getPose();this.renderer.setPosition(modelPose.position);this.renderer.setOrientation(modelPose.orientation);this.renderer.setRayVisibility(true);this.renderer.setReticleVisibility(true);this.renderer.setActive(true);break;case _rayInteractionModes2.default.VR_6DOF:var pose=this.controller.getGamepadPose();if(!pose.orientation||!pose.position){console.warn("Invalid gamepad pose. Can't update ray.");break}var orientation=(new THREE.Quaternion).fromArray(pose.orientation);var position=(new THREE.Vector3).fromArray(pose.position);this.renderer.setOrientation(orientation);this.renderer.setPosition(position);this.renderer.setRayVisibility(true);this.renderer.setReticleVisibility(true);this.renderer.setActive(true);break;default:console.error("Unknown interaction mode.")}this.renderer.update();this.controller.update()}},{key:"setSize",value:function setSize(size){this.controller.setSize(size)}},{key:"getMesh",value:function getMesh(){return this.renderer.getReticleRayMesh()}},{key:"getOrigin",value:function getOrigin(){return this.renderer.getOrigin()}},{key:"getDirection",value:function getDirection(){return this.renderer.getDirection()}},{key:"getRightDirection",value:function getRightDirection(){var lookAt=new THREE.Vector3(0,0,-1);lookAt.applyQuaternion(this.camera.quaternion);return(new THREE.Vector3).crossVectors(lookAt,this.camera.up)}},{key:"onRayDown_",value:function onRayDown_(e){this.renderer.update();var mesh=this.renderer.getSelectedMesh();this.emit("raydown",mesh);this.renderer.setActive(true)}},{key:"onRayUp_",value:function onRayUp_(e){var mesh=this.renderer.getSelectedMesh();this.emit("rayup",mesh);this.renderer.setActive(false)}},{key:"onRayCancel_",value:function onRayCancel_(e){var mesh=this.renderer.getSelectedMesh();this.emit("raycancel",mesh)}},{key:"onPointerMove_",value:function onPointerMove_(ndc){this.pointerNdc.copy(ndc)}}]);return RayInput}(_eventemitter2.default);exports.default=RayInput},{"./orientation-arm-model":2,"./ray-controller":3,"./ray-interaction-modes":5,"./ray-renderer":6,eventemitter3:1}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var InteractionModes={MOUSE:1,TOUCH:2,VR_0DOF:3,VR_3DOF:4,VR_6DOF:5};exports.default=InteractionModes},{}],6:[function(require,module,exports){"use strict";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 _util=require("./util");var _eventemitter=require("eventemitter3");var _eventemitter2=_interopRequireDefault(_eventemitter);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 _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var RETICLE_DISTANCE=3;var INNER_RADIUS=.02;var OUTER_RADIUS=.04;var RAY_RADIUS=.02;var GRADIENT_IMAGE=(0,_util.base64)("image/png","iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABdklEQVR4nO3WwXHEQAwDQcin/FOWw+BjuiPYB2q4G2nP933P9SO4824zgDADiDOAuHfb3/UjuKMAcQYQZwBx/gBxChCnAHEKEKcAcQoQpwBxChCnAHEGEGcAcf4AcQoQZwBxBhBnAHEGEGcAcQYQZwBxBhBnAHEGEGcAcQYQZwBxBhBnAHHvtt/1I7ijAHEGEGcAcf4AcQoQZwBxTkCcAsQZQJwTEKcAcQoQpwBxBhDnBMQpQJwCxClAnALEKUCcAsQpQJwCxClAnALEKUCcAsQpQJwBxDkBcQoQpwBxChCnAHEKEKcAcQoQpwBxChCnAHEKEGcAcU5AnALEKUCcAsQZQJwTEKcAcQYQ5wTEKUCcAcQZQJw/QJwCxBlAnAHEGUCcAcQZQJwBxBlAnAHEGUCcAcQZQJwBxBlAnAHEGUDcu+25fgR3FCDOAOIMIM4fIE4B4hQgTgHiFCBOAeIUIE4B4hQgzgDiDCDOHyBOAeIMIM4A4v4B/5IF9eD6QxgAAAAASUVORK5CYII=");var RayRenderer=function(_EventEmitter){_inherits(RayRenderer,_EventEmitter);function RayRenderer(camera,opt_params){_classCallCheck(this,RayRenderer);var _this=_possibleConstructorReturn(this,(RayRenderer.__proto__||Object.getPrototypeOf(RayRenderer)).call(this));_this.camera=camera;var params=opt_params||{};_this.meshes={};_this.selected={};_this.raycaster=new THREE.Raycaster;_this.position=new THREE.Vector3;_this.orientation=new THREE.Quaternion;_this.root=new THREE.Object3D;_this.reticle=_this.createReticle_();_this.root.add(_this.reticle);_this.ray=_this.createRay_();_this.root.add(_this.ray);_this.reticleDistance=RETICLE_DISTANCE;return _this}_createClass(RayRenderer,[{key:"add",value:function add(object){this.meshes[object.id]=object}},{key:"remove",value:function remove(object){var id=object.id;if(!this.meshes[id]){delete this.meshes[id]}if(this.selected[id]){delete this.selected[object.id]}}},{key:"update",value:function update(){for(var id in this.meshes){var mesh=this.meshes[id];var intersects=this.raycaster.intersectObject(mesh,true);if(intersects.length>1){console.warn("Unexpected: multiple meshes intersected.")}var isIntersected=intersects.length>0;var isSelected=this.selected[id];if(isIntersected&&!isSelected){this.selected[id]=true;if(this.isActive){this.emit("rayover",mesh)}}if(!isIntersected&&isSelected){delete this.selected[id];this.moveReticle_(null);if(this.isActive){this.emit("rayout",mesh)}}if(isIntersected){this.moveReticle_(intersects)}}}},{key:"setPosition",value:function setPosition(vector){this.position.copy(vector);this.raycaster.ray.origin.copy(vector);this.updateRaycaster_()}},{key:"getOrigin",value:function getOrigin(){return this.raycaster.ray.origin}},{key:"setOrientation",value:function setOrientation(quaternion){this.orientation.copy(quaternion);var pointAt=new THREE.Vector3(0,0,-1).applyQuaternion(quaternion);this.raycaster.ray.direction.copy(pointAt);this.updateRaycaster_()}},{key:"getDirection",value:function getDirection(){return this.raycaster.ray.direction}},{key:"setPointer",value:function setPointer(vector){this.raycaster.setFromCamera(vector,this.camera);this.updateRaycaster_()}},{key:"getReticleRayMesh",value:function getReticleRayMesh(){return this.root}},{key:"getSelectedMesh",value:function getSelectedMesh(){var count=0;var mesh=null;for(var id in this.selected){count+=1;mesh=this.meshes[id]}if(count>1){console.warn("More than one mesh selected.")}return mesh}},{key:"setReticleVisibility",value:function setReticleVisibility(isVisible){this.reticle.visible=isVisible}},{key:"setRayVisibility",value:function setRayVisibility(isVisible){this.ray.visible=isVisible}},{key:"setActive",value:function setActive(isActive){if(this.isActive==isActive){return}this.isActive=isActive;if(!isActive){this.moveReticle_(null);for(var id in this.selected){var mesh=this.meshes[id];delete this.selected[id];this.emit("rayout",mesh)}}}},{key:"updateRaycaster_",value:function updateRaycaster_(){var ray=this.raycaster.ray;var position=this.reticle.position;position.copy(ray.direction);position.multiplyScalar(this.reticleDistance);position.add(ray.origin);var delta=(new THREE.Vector3).copy(ray.direction);delta.multiplyScalar(this.reticleDistance);this.ray.scale.y=delta.length();var arrow=new THREE.ArrowHelper(ray.direction,ray.origin);this.ray.rotation.copy(arrow.rotation);this.ray.position.addVectors(ray.origin,delta.multiplyScalar(.5))}},{key:"createReticle_",value:function createReticle_(){var innerGeometry=new THREE.SphereGeometry(INNER_RADIUS,32,32);var innerMaterial=new THREE.MeshBasicMaterial({color:16777215,transparent:true,opacity:.9});var inner=new THREE.Mesh(innerGeometry,innerMaterial);var outerGeometry=new THREE.SphereGeometry(OUTER_RADIUS,32,32);var outerMaterial=new THREE.MeshBasicMaterial({color:3355443,transparent:true,opacity:.3});var outer=new THREE.Mesh(outerGeometry,outerMaterial);var reticle=new THREE.Group;reticle.add(inner);reticle.add(outer);return reticle}},{key:"moveReticle_",value:function moveReticle_(intersections){var distance=RETICLE_DISTANCE;if(intersections){var inter=intersections[0];distance=inter.distance}this.reticleDistance=distance;this.updateRaycaster_();return}},{key:"createRay_",value:function createRay_(){var geometry=new THREE.CylinderGeometry(RAY_RADIUS,RAY_RADIUS,1,32);var material=new THREE.MeshBasicMaterial({map:THREE.ImageUtils.loadTexture(GRADIENT_IMAGE),transparent:true,opacity:.3});var mesh=new THREE.Mesh(geometry,material);return mesh}}]);return RayRenderer}(_eventemitter2.default);exports.default=RayRenderer},{"./util":7,eventemitter3:1}],7:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.isMobile=isMobile;exports.base64=base64;function isMobile(){var check=false;(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check=true;
2})(navigator.userAgent||navigator.vendor||window.opera);return check}function base64(mimeType,base64){return"data:"+mimeType+";base64,"+base64}},{}]},{},[4])(4)});

Callers 4

OrientationArmModelFunction · 0.85
RayControllerFunction · 0.85
RayInputFunction · 0.85
RayRendererFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected