Socket
Socket
Sign inDemoInstall

ray-input

Package Overview
Dependencies
5
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.2 to 0.1.3

.nojekyll

2

build/ray.min.js

@@ -1,1 +0,1 @@

!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.RayInput=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";function d(a,b,c){this.fn=a,this.context=b,this.once=c||!1}function e(){}var f=Object.prototype.hasOwnProperty,g="function"!=typeof Object.create?"~":!1;e.prototype._events=void 0,e.prototype.eventNames=function(){var a,b=this._events,c=[];if(!b)return c;for(a in b)f.call(b,a)&&c.push(g?a.slice(1):a);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(b)):c},e.prototype.listeners=function(a,b){var c=g?g+a:a,d=this._events&&this._events[c];if(b)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var e=0,f=d.length,h=new Array(f);f>e;e++)h[e]=d[e].fn;return h},e.prototype.emit=function(a,b,c,d,e,f){var h=g?g+a:a;if(!this._events||!this._events[h])return!1;var i,j,k=this._events[h],l=arguments.length;if("function"==typeof k.fn){switch(k.once&&this.removeListener(a,k.fn,void 0,!0),l){case 1:return k.fn.call(k.context),!0;case 2:return k.fn.call(k.context,b),!0;case 3:return k.fn.call(k.context,b,c),!0;case 4:return k.fn.call(k.context,b,c,d),!0;case 5:return k.fn.call(k.context,b,c,d,e),!0;case 6:return k.fn.call(k.context,b,c,d,e,f),!0}for(j=1,i=new Array(l-1);l>j;j++)i[j-1]=arguments[j];k.fn.apply(k.context,i)}else{var m,n=k.length;for(j=0;n>j;j++)switch(k[j].once&&this.removeListener(a,k[j].fn,void 0,!0),l){case 1:k[j].fn.call(k[j].context);break;case 2:k[j].fn.call(k[j].context,b);break;case 3:k[j].fn.call(k[j].context,b,c);break;default:if(!i)for(m=1,i=new Array(l-1);l>m;m++)i[m-1]=arguments[m];k[j].fn.apply(k[j].context,i)}}return!0},e.prototype.on=function(a,b,c){var e=new d(b,c||this),f=g?g+a:a;return this._events||(this._events=g?{}:Object.create(null)),this._events[f]?this._events[f].fn?this._events[f]=[this._events[f],e]:this._events[f].push(e):this._events[f]=e,this},e.prototype.once=function(a,b,c){var e=new d(b,c||this,!0),f=g?g+a:a;return this._events||(this._events=g?{}:Object.create(null)),this._events[f]?this._events[f].fn?this._events[f]=[this._events[f],e]:this._events[f].push(e):this._events[f]=e,this},e.prototype.removeListener=function(a,b,c,d){var e=g?g+a:a;if(!this._events||!this._events[e])return this;var f=this._events[e],h=[];if(b)if(f.fn)(f.fn!==b||d&&!f.once||c&&f.context!==c)&&h.push(f);else for(var i=0,j=f.length;j>i;i++)(f[i].fn!==b||d&&!f[i].once||c&&f[i].context!==c)&&h.push(f[i]);return h.length?this._events[e]=1===h.length?h[0]:h:delete this._events[e],this},e.prototype.removeAllListeners=function(a){return this._events?(a?delete this._events[g?g+a:a]:this._events=g?{}:Object.create(null),this):this},e.prototype.off=e.prototype.removeListener,e.prototype.addListener=e.prototype.on,e.prototype.setMaxListeners=function(){return this},e.prefixed=g,"undefined"!=typeof b&&(b.exports=e)},{}],2:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=new THREE.Vector3(.155,-.465,-.15),g=new THREE.Vector3(0,0,-.25),h=new THREE.Vector3(0,0,.05),i=new THREE.Vector3(-.08,.14,.08),j=.4,k=.4,l=.61,m=function(){function a(){d(this,a),this.isLeftHanded=!1,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}}return e(a,[{key:"setControllerOrientation",value:function(a){this.lastControllerQ.copy(this.controllerQ),this.controllerQ.copy(a)}},{key:"setHeadOrientation",value:function(a){this.headQ.copy(a)}},{key:"setHeadPosition",value:function(a){this.headPos.copy(a)}},{key:"setLeftHanded",value:function(a){this.isLeftHanded=a}},{key:"update",value:function(){this.time=performance.now();var a=this.getHeadYawOrientation_(),b=(this.time-this.lastTime)/1e3,c=this.quatAngle_(this.lastControllerQ,this.controllerQ),d=c/b;d>l?this.rootQ.slerp(a,c/10):this.rootQ.copy(a);var e=(new THREE.Euler).setFromQuaternion(this.controllerQ,"YXZ"),m=THREE.Math.radToDeg(e.x),n=this.clamp_((m-11)/39,0,1),o=this.rootQ.clone().inverse();o.multiply(this.controllerQ);var p=this.elbowPos;p.copy(this.headPos).add(f);var q=(new THREE.Vector3).copy(i);q.multiplyScalar(n),p.add(q);var r=this.quatAngle_(o,new THREE.Quaternion),s=THREE.Math.radToDeg(r),t=1-Math.pow(s/180,4),u=j,v=1-j,w=t*(u+v*n*k),x=(new THREE.Quaternion).slerp(o,w),y=x.inverse(),z=o.clone().multiply(y),A=this.wristPos;A.copy(h),A.applyQuaternion(x),A.add(g),A.applyQuaternion(z),A.add(this.elbowPos);var B=(new THREE.Vector3).copy(i);B.multiplyScalar(n);var C=(new THREE.Vector3).copy(this.wristPos);C.add(B),C.applyQuaternion(this.rootQ);var D=(new THREE.Quaternion).copy(this.controllerQ);this.pose.orientation.copy(D),this.pose.position.copy(C),this.lastTime=this.time}},{key:"getPose",value:function(){return this.pose}},{key:"getForearmLength",value:function(){return g.length()}},{key:"getElbowPosition",value:function(){var a=this.elbowPos.clone();return a.applyQuaternion(this.rootQ)}},{key:"getWristPosition",value:function(){var a=this.wristPos.clone();return a.applyQuaternion(this.rootQ)}},{key:"getHeadYawOrientation_",value:function(){var a=(new THREE.Euler).setFromQuaternion(this.headQ,"YXZ");a.x=0,a.z=0;var b=(new THREE.Quaternion).setFromEuler(a);return b}},{key:"clamp_",value:function(a,b,c){return Math.min(Math.max(a,b),c)}},{key:"quatAngle_",value:function(a,b){var c=new THREE.Vector3(0,0,-1),d=new THREE.Vector3(0,0,-1);return c.applyQuaternion(a),d.applyQuaternion(b),c.angleTo(d)}}]),a}();c["default"]=m},{}],3:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),i=a("eventemitter3"),j=d(i),k=a("./ray-interaction-modes"),l=d(k),m=a("./util"),n=10,o=function(a){function b(a){e(this,b);var c=f(this,(b.__proto__||Object.getPrototypeOf(b)).call(this));return c.renderer=a,c.availableInteractions={},window.addEventListener("mousedown",c.onMouseDown_.bind(c)),window.addEventListener("mousemove",c.onMouseMove_.bind(c)),window.addEventListener("mouseup",c.onMouseUp_.bind(c)),window.addEventListener("touchstart",c.onTouchStart_.bind(c)),window.addEventListener("touchmove",c.onTouchMove_.bind(c)),window.addEventListener("touchend",c.onTouchEnd_.bind(c)),c.pointer=new THREE.Vector2,c.lastPointer=new THREE.Vector2,c.pointerNdc=new THREE.Vector2,c.dragDistance=0,c.isDragging=!1,c.isTouchActive=!1,c.gamepad=null,navigator.getVRDisplays?navigator.getVRDisplays().then(function(a){c.vrDisplay=a[0]}):console.warn("WebVR API not available! Consider using the webvr-polyfill."),c}return g(b,a),h(b,[{key:"getInteractionMode",value:function(){var a=this.getVRGamepad_();if(!a)return m.isMobile()?this.vrDisplay&&this.vrDisplay.isPresenting?l["default"].VR_0DOF:l["default"].TOUCH:l["default"].MOUSE;var b=a.pose;return b.hasPosition?l["default"].VR_6DOF:b.hasOrientation?l["default"].VR_3DOF:l["default"].TOUCH}},{key:"getGamepadPose",value:function(){var a=this.getVRGamepad_();return a.pose}},{key:"getIsTouchActive",value:function(){return this.isTouchActive}},{key:"setSize",value:function(a){this.size=a}},{key:"update",value:function(){var a=this.getInteractionMode();if(a==l["default"].VR_3DOF||a==l["default"].VR_6DOF){var b=this.getGamepadButtonPressed_();b&&!this.wasGamepadPressed&&this.emit("raydown"),!b&&this.wasGamepadPressed&&this.emit("rayup"),this.wasGamepadPressed=b}}},{key:"getGamepadButtonPressed_",value:function(){var a=this.getVRGamepad_();if(!a)return!1;for(var b=0;b<a.buttons.length;++b)if(a.buttons[b].pressed)return!0;return!1}},{key:"onMouseDown_",value:function(a){this.startDragging_(a),this.emit("raydown")}},{key:"onMouseMove_",value:function(a){this.updatePointer_(a),this.updateDragDistance_(),this.emit("pointermove",this.pointerNdc)}},{key:"onMouseUp_",value:function(a){this.endDragging_()}},{key:"onTouchStart_",value:function(a){var b=a.touches[0];this.startDragging_(b),this.updateTouchPointer_(a),this.isTouchActive=!0,this.emit("pointermove",this.pointerNdc),this.emit("raydown"),a.preventDefault()}},{key:"onTouchMove_",value:function(a){this.updateTouchPointer_(a),this.updateDragDistance_(),a.preventDefault()}},{key:"onTouchEnd_",value:function(a){this.isTouchActive=!1,this.endDragging_(),a.preventDefault()}},{key:"updateTouchPointer_",value:function(a){if(0===a.touches.length)return void console.warn("Received touch event with no touches.");var b=a.touches[0];this.updatePointer_(b)}},{key:"updatePointer_",value:function(a){this.pointer.set(a.clientX,a.clientY),this.pointerNdc.x=a.clientX/this.size.width*2-1,this.pointerNdc.y=2*-(a.clientY/this.size.height)+1}},{key:"updateDragDistance_",value:function(){if(this.isDragging){var a=this.lastPointer.sub(this.pointer).length();this.dragDistance+=a,this.lastPointer.copy(this.pointer),this.dragDistance>n&&(this.emit("raycancel"),this.isDragging=!1)}}},{key:"startDragging_",value:function(a){this.isDragging=!0,this.lastPointer.set(a.clientX,a.clientY)}},{key:"endDragging_",value:function(){this.dragDistance<n&&this.emit("rayup"),this.dragDistance=0,this.isDragging=!1}},{key:"getVRGamepad_",value:function(){if(!navigator.getGamepads)return null;for(var a=navigator.getGamepads(),b=0;b<a.length;++b){var c=a[b];if(c&&c.pose)return c}return null}}]),b}(j["default"]);c["default"]=o},{"./ray-interaction-modes":5,"./util":7,eventemitter3:1}],4:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),i=a("./orientation-arm-model"),j=d(i),k=a("eventemitter3"),l=d(k),m=a("./ray-renderer"),n=d(m),o=a("./ray-controller"),p=d(o),q=a("./ray-interaction-modes"),r=d(q),s=function(a){function b(a){e(this,b);var c=f(this,(b.__proto__||Object.getPrototypeOf(b)).call(this));return c.camera=a,c.renderer=new n["default"](a),c.controller=new p["default"],c.armModel=new j["default"],c.controller.on("raydown",c.onRayDown_.bind(c)),c.controller.on("rayup",c.onRayUp_.bind(c)),c.controller.on("raycancel",c.onRayCancel_.bind(c)),c.controller.on("pointermove",c.onPointerMove_.bind(c)),c.renderer.on("rayover",function(a){c.emit("rayover",a)}),c.renderer.on("rayout",function(a){c.emit("rayout",a)}),c.pointerNdc=new THREE.Vector2(1,1),c.handlers={},c}return g(b,a),h(b,[{key:"add",value:function(a,b){this.renderer.add(a,b),this.handlers[a.id]=b}},{key:"remove",value:function(a){this.renderer.remove(a),delete this.handlers[a.id]}},{key:"update",value:function(){var a=new THREE.Vector3(0,0,-1);a.applyQuaternion(this.camera.quaternion);var b=this.controller.getInteractionMode();switch(b){case r["default"].MOUSE:this.renderer.setPointer(this.pointerNdc),this.renderer.setRayVisibility(!1),this.renderer.setReticleVisibility(!1),this.renderer.setActive(!0);break;case r["default"].TOUCH:this.renderer.setPointer(this.pointerNdc),this.renderer.setRayVisibility(!1),this.renderer.setReticleVisibility(!1),this.renderer.setActive(this.controller.getIsTouchActive());break;case r["default"].VR_0DOF:this.renderer.setPosition(this.camera.position),this.renderer.setOrientation(this.camera.quaternion),this.renderer.setRayVisibility(!1),this.renderer.setReticleVisibility(!0),this.renderer.setActive(!0);break;case r["default"].VR_3DOF:var c=this.controller.getGamepadPose(),d=(new THREE.Quaternion).fromArray(c.orientation);this.armModel.setHeadOrientation(this.camera.quaternion),this.armModel.setHeadPosition(this.camera.position),this.armModel.setControllerOrientation(d),this.armModel.update();var e=this.armModel.getPose();this.renderer.setPosition(e.position),this.renderer.setOrientation(e.orientation),this.renderer.setRayVisibility(!0),this.renderer.setReticleVisibility(!0),this.renderer.setActive(!0);break;case r["default"].VR_6DOF:var c=this.controller.getGamepadPose();if(!c.orientation||!c.position){console.warn("Invalid gamepad pose. Can't update ray.");break}var f=(new THREE.Quaternion).fromArray(c.orientation),g=(new THREE.Vector3).fromArray(c.position);this.renderer.setOrientation(f),this.renderer.setPosition(g),this.renderer.setRayVisibility(!0),this.renderer.setReticleVisibility(!0),this.renderer.setActive(!0);break;default:console.error("Unknown interaction mode.")}this.renderer.update(),this.controller.update()}},{key:"setSize",value:function(a){this.controller.setSize(a)}},{key:"getMesh",value:function(){return this.renderer.getReticleRayMesh()}},{key:"getOrigin",value:function(){return this.renderer.getOrigin()}},{key:"getDirection",value:function(){return this.renderer.getDirection()}},{key:"getRightDirection",value:function(){var a=new THREE.Vector3(0,0,-1);return a.applyQuaternion(this.camera.quaternion),(new THREE.Vector3).crossVectors(a,this.camera.up)}},{key:"onRayDown_",value:function(a){this.fireActiveMeshEvent_("onAction");var b=this.renderer.getSelectedMesh();this.emit("raydown",b),this.renderer.setActive(!0)}},{key:"onRayUp_",value:function(a){this.fireActiveMeshEvent_("onRelease");var b=this.renderer.getSelectedMesh();this.emit("rayup",b),this.renderer.setActive(!1)}},{key:"onRayCancel_",value:function(a){var b=this.renderer.getSelectedMesh();this.emit("raycancel",b)}},{key:"fireActiveMeshEvent_",value:function(a){var b=this.renderer.getSelectedMesh();if(b){var c=this.handlers[b.id];c&&c[a]&&c[a](b)}}},{key:"onPointerMove_",value:function(a){this.pointerNdc.copy(a)}}]),b}(l["default"]);c["default"]=s},{"./orientation-arm-model":2,"./ray-controller":3,"./ray-interaction-modes":5,"./ray-renderer":6,eventemitter3:1}],5:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={MOUSE:1,TOUCH:2,VR_0DOF:3,VR_3DOF:4,VR_6DOF:5};c["default"]=d},{}],6:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),i=a("./util"),j=a("eventemitter3"),k=d(j),l=3,m=.02,n=.04,o=.02,p=i.base64("image/png","iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABdklEQVR4nO3WwXHEQAwDQcin/FOWw+BjuiPYB2q4G2nP933P9SO4824zgDADiDOAuHfb3/UjuKMAcQYQZwBx/gBxChCnAHEKEKcAcQoQpwBxChCnAHEGEGcAcf4AcQoQZwBxBhBnAHEGEGcAcQYQZwBxBhBnAHEGEGcAcQYQZwBxBhBnAHHvtt/1I7ijAHEGEGcAcf4AcQoQZwBxTkCcAsQZQJwTEKcAcQoQpwBxBhDnBMQpQJwCxClAnALEKUCcAsQpQJwCxClAnALEKUCcAsQpQJwBxDkBcQoQpwBxChCnAHEKEKcAcQoQpwBxChCnAHEKEGcAcU5AnALEKUCcAsQZQJwTEKcAcQYQ5wTEKUCcAcQZQJw/QJwCxBlAnAHEGUCcAcQZQJwBxBlAnAHEGUCcAcQZQJwBxBlAnAHEGUDcu+25fgR3FCDOAOIMIM4fIE4B4hQgTgHiFCBOAeIUIE4B4hQgzgDiDCDOHyBOAeIMIM4A4v4B/5IF9eD6QxgAAAAASUVORK5CYII="),q=function(a){function b(a,c){e(this,b);var d=f(this,(b.__proto__||Object.getPrototypeOf(b)).call(this));d.camera=a;return d.meshes={},d.selected={},d.raycaster=new THREE.Raycaster,d.position=new THREE.Vector3,d.orientation=new THREE.Quaternion,d.root=new THREE.Object3D,d.reticle=d.createReticle_(),d.root.add(d.reticle),d.ray=d.createRay_(),d.root.add(d.ray),d.reticleDistance=l,d}return g(b,a),h(b,[{key:"add",value:function(a){this.meshes[a.id]=a}},{key:"remove",value:function(a){var b=a.id;this.meshes[b]||delete this.meshes[b],this.selected[b]&&delete this.selected[a.id]}},{key:"update",value:function(){if(this.isActive)for(var a in this.meshes){var b=this.meshes[a],c=this.raycaster.intersectObject(b,!0);c.length>1&&console.warn("Unexpected: multiple meshes intersected.");var d=c.length>0,e=this.selected[a];d&&!e&&(this.selected[a]=!0,this.emit("rayover",b)),!d&&e&&(delete this.selected[a],this.moveReticle_(null),this.emit("rayout",b)),d&&this.moveReticle_(c)}else for(var f in this.selected){var g=this.meshes[f];delete this.selected[f],this.moveReticle_(null),this.emit("rayout",g)}}},{key:"setPosition",value:function(a){this.position.copy(a),this.raycaster.ray.origin.copy(a),this.updateRaycaster_()}},{key:"getOrigin",value:function(){return this.raycaster.ray.origin}},{key:"setOrientation",value:function(a){this.orientation.copy(a);var b=new THREE.Vector3(0,0,-1).applyQuaternion(a);this.raycaster.ray.direction.copy(b),this.updateRaycaster_()}},{key:"getDirection",value:function(){return this.raycaster.ray.direction}},{key:"setPointer",value:function(a){this.raycaster.setFromCamera(a,this.camera),this.updateRaycaster_()}},{key:"getReticleRayMesh",value:function(){return this.root}},{key:"getSelectedMesh",value:function(){var a=0,b=null;for(var c in this.selected)a+=1,b=this.meshes[c];return a>1&&console.warn("More than one mesh selected."),b}},{key:"setReticleVisibility",value:function(a){this.reticle.visible=a}},{key:"setRayVisibility",value:function(a){this.ray.visible=a}},{key:"setActive",value:function(a){this.isActive=a}},{key:"updateRaycaster_",value:function(){var a=this.raycaster.ray,b=this.reticle.position;b.copy(a.direction),b.multiplyScalar(this.reticleDistance),b.add(a.origin);var c=(new THREE.Vector3).copy(a.direction);c.multiplyScalar(this.reticleDistance),this.ray.scale.y=c.length();var d=new THREE.ArrowHelper(a.direction,a.origin);this.ray.rotation.copy(d.rotation),this.ray.position.addVectors(a.origin,c.multiplyScalar(.5))}},{key:"createReticle_",value:function(){var a=new THREE.SphereGeometry(m,32,32),b=new THREE.MeshBasicMaterial({color:16777215,transparent:!0,opacity:.9}),c=new THREE.Mesh(a,b),d=new THREE.SphereGeometry(n,32,32),e=new THREE.MeshBasicMaterial({color:3355443,transparent:!0,opacity:.3}),f=new THREE.Mesh(d,e),g=new THREE.Group;return g.add(c),g.add(f),g}},{key:"moveReticle_",value:function(a){var b=l;if(a){var c=a[0];b=c.distance}this.reticleDistance=b,this.updateRaycaster_()}},{key:"createRay_",value:function(){var a=new THREE.CylinderGeometry(o,o,1,32),b=new THREE.MeshBasicMaterial({map:THREE.ImageUtils.loadTexture(p),transparent:!0,opacity:.3}),c=new THREE.Mesh(a,b);return c}}]),b}(k["default"]);c["default"]=q},{"./util":7,eventemitter3:1}],7:[function(a,b,c){"use strict";function d(){var a=!1;return function(b){(/(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(b)||/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(b.substr(0,4)))&&(a=!0)}(navigator.userAgent||navigator.vendor||window.opera),a}function e(a,b){return"data:"+a+";base64,"+b}Object.defineProperty(c,"__esModule",{value:!0}),c.isMobile=d,c.base64=e},{}]},{},[4])(4)});
!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.RayInput=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";function d(a,b,c){this.fn=a,this.context=b,this.once=c||!1}function e(){}var f=Object.prototype.hasOwnProperty,g="function"!=typeof Object.create?"~":!1;e.prototype._events=void 0,e.prototype.eventNames=function(){var a,b=this._events,c=[];if(!b)return c;for(a in b)f.call(b,a)&&c.push(g?a.slice(1):a);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(b)):c},e.prototype.listeners=function(a,b){var c=g?g+a:a,d=this._events&&this._events[c];if(b)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var e=0,f=d.length,h=new Array(f);f>e;e++)h[e]=d[e].fn;return h},e.prototype.emit=function(a,b,c,d,e,f){var h=g?g+a:a;if(!this._events||!this._events[h])return!1;var i,j,k=this._events[h],l=arguments.length;if("function"==typeof k.fn){switch(k.once&&this.removeListener(a,k.fn,void 0,!0),l){case 1:return k.fn.call(k.context),!0;case 2:return k.fn.call(k.context,b),!0;case 3:return k.fn.call(k.context,b,c),!0;case 4:return k.fn.call(k.context,b,c,d),!0;case 5:return k.fn.call(k.context,b,c,d,e),!0;case 6:return k.fn.call(k.context,b,c,d,e,f),!0}for(j=1,i=new Array(l-1);l>j;j++)i[j-1]=arguments[j];k.fn.apply(k.context,i)}else{var m,n=k.length;for(j=0;n>j;j++)switch(k[j].once&&this.removeListener(a,k[j].fn,void 0,!0),l){case 1:k[j].fn.call(k[j].context);break;case 2:k[j].fn.call(k[j].context,b);break;case 3:k[j].fn.call(k[j].context,b,c);break;default:if(!i)for(m=1,i=new Array(l-1);l>m;m++)i[m-1]=arguments[m];k[j].fn.apply(k[j].context,i)}}return!0},e.prototype.on=function(a,b,c){var e=new d(b,c||this),f=g?g+a:a;return this._events||(this._events=g?{}:Object.create(null)),this._events[f]?this._events[f].fn?this._events[f]=[this._events[f],e]:this._events[f].push(e):this._events[f]=e,this},e.prototype.once=function(a,b,c){var e=new d(b,c||this,!0),f=g?g+a:a;return this._events||(this._events=g?{}:Object.create(null)),this._events[f]?this._events[f].fn?this._events[f]=[this._events[f],e]:this._events[f].push(e):this._events[f]=e,this},e.prototype.removeListener=function(a,b,c,d){var e=g?g+a:a;if(!this._events||!this._events[e])return this;var f=this._events[e],h=[];if(b)if(f.fn)(f.fn!==b||d&&!f.once||c&&f.context!==c)&&h.push(f);else for(var i=0,j=f.length;j>i;i++)(f[i].fn!==b||d&&!f[i].once||c&&f[i].context!==c)&&h.push(f[i]);return h.length?this._events[e]=1===h.length?h[0]:h:delete this._events[e],this},e.prototype.removeAllListeners=function(a){return this._events?(a?delete this._events[g?g+a:a]:this._events=g?{}:Object.create(null),this):this},e.prototype.off=e.prototype.removeListener,e.prototype.addListener=e.prototype.on,e.prototype.setMaxListeners=function(){return this},e.prefixed=g,"undefined"!=typeof b&&(b.exports=e)},{}],2:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=new THREE.Vector3(.155,-.465,-.15),g=new THREE.Vector3(0,0,-.25),h=new THREE.Vector3(0,0,.05),i=new THREE.Vector3(-.08,.14,.08),j=.4,k=.4,l=.61,m=function(){function a(){d(this,a),this.isLeftHanded=!1,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}}return e(a,[{key:"setControllerOrientation",value:function(a){this.lastControllerQ.copy(this.controllerQ),this.controllerQ.copy(a)}},{key:"setHeadOrientation",value:function(a){this.headQ.copy(a)}},{key:"setHeadPosition",value:function(a){this.headPos.copy(a)}},{key:"setLeftHanded",value:function(a){this.isLeftHanded=a}},{key:"update",value:function(){this.time=performance.now();var a=this.getHeadYawOrientation_(),b=(this.time-this.lastTime)/1e3,c=this.quatAngle_(this.lastControllerQ,this.controllerQ),d=c/b;d>l?this.rootQ.slerp(a,c/10):this.rootQ.copy(a);var e=(new THREE.Euler).setFromQuaternion(this.controllerQ,"YXZ"),m=THREE.Math.radToDeg(e.x),n=this.clamp_((m-11)/39,0,1),o=this.rootQ.clone().inverse();o.multiply(this.controllerQ);var p=this.elbowPos;p.copy(this.headPos).add(f);var q=(new THREE.Vector3).copy(i);q.multiplyScalar(n),p.add(q);var r=this.quatAngle_(o,new THREE.Quaternion),s=THREE.Math.radToDeg(r),t=1-Math.pow(s/180,4),u=j,v=1-j,w=t*(u+v*n*k),x=(new THREE.Quaternion).slerp(o,w),y=x.inverse(),z=o.clone().multiply(y),A=this.wristPos;A.copy(h),A.applyQuaternion(x),A.add(g),A.applyQuaternion(z),A.add(this.elbowPos);var B=(new THREE.Vector3).copy(i);B.multiplyScalar(n);var C=(new THREE.Vector3).copy(this.wristPos);C.add(B),C.applyQuaternion(this.rootQ);var D=(new THREE.Quaternion).copy(this.controllerQ);this.pose.orientation.copy(D),this.pose.position.copy(C),this.lastTime=this.time}},{key:"getPose",value:function(){return this.pose}},{key:"getForearmLength",value:function(){return g.length()}},{key:"getElbowPosition",value:function(){var a=this.elbowPos.clone();return a.applyQuaternion(this.rootQ)}},{key:"getWristPosition",value:function(){var a=this.wristPos.clone();return a.applyQuaternion(this.rootQ)}},{key:"getHeadYawOrientation_",value:function(){var a=(new THREE.Euler).setFromQuaternion(this.headQ,"YXZ");a.x=0,a.z=0;var b=(new THREE.Quaternion).setFromEuler(a);return b}},{key:"clamp_",value:function(a,b,c){return Math.min(Math.max(a,b),c)}},{key:"quatAngle_",value:function(a,b){var c=new THREE.Vector3(0,0,-1),d=new THREE.Vector3(0,0,-1);return c.applyQuaternion(a),d.applyQuaternion(b),c.angleTo(d)}}]),a}();c["default"]=m},{}],3:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),i=a("eventemitter3"),j=d(i),k=a("./ray-interaction-modes"),l=d(k),m=a("./util"),n=10,o=function(a){function b(a){e(this,b);var c=f(this,(b.__proto__||Object.getPrototypeOf(b)).call(this)),d=a||window;return d.addEventListener("mousedown",c.onMouseDown_.bind(c)),d.addEventListener("mousemove",c.onMouseMove_.bind(c)),d.addEventListener("mouseup",c.onMouseUp_.bind(c)),d.addEventListener("touchstart",c.onTouchStart_.bind(c)),d.addEventListener("touchmove",c.onTouchMove_.bind(c)),d.addEventListener("touchend",c.onTouchEnd_.bind(c)),c.pointer=new THREE.Vector2,c.lastPointer=new THREE.Vector2,c.pointerNdc=new THREE.Vector2,c.dragDistance=0,c.isDragging=!1,c.isTouchActive=!1,c.isSyntheticMouseEvent=!1,c.gamepad=null,navigator.getVRDisplays?navigator.getVRDisplays().then(function(a){c.vrDisplay=a[0]}):console.warn("WebVR API not available! Consider using the webvr-polyfill."),c}return g(b,a),h(b,[{key:"getInteractionMode",value:function(){var a=this.getVRGamepad_();if(!a)return m.isMobile()?this.vrDisplay&&this.vrDisplay.isPresenting?l["default"].VR_0DOF:l["default"].TOUCH:l["default"].MOUSE;var b=a.pose;return b?b.hasPosition?l["default"].VR_6DOF:b.hasOrientation?l["default"].VR_3DOF:l["default"].TOUCH:l["default"].VR_0DOF}},{key:"getGamepadPose",value:function(){var a=this.getVRGamepad_();return a.pose||{}}},{key:"getIsTouchActive",value:function(){return this.isTouchActive}},{key:"isCardboardCompatClick",value:function(a){var b=this.getInteractionMode();return b!=l["default"].VR_0DOF&&b!=l["default"].VR_3DOF||0!=a.screenX||0!=a.screenY?!1:!0}},{key:"setSize",value:function(a){this.size=a}},{key:"update",value:function(){var a=this.getInteractionMode();if(a==l["default"].VR_0DOF||a==l["default"].VR_3DOF||a==l["default"].VR_6DOF){var b=this.getGamepadButtonPressed_();b&&!this.wasGamepadPressed&&this.emit("raydown"),!b&&this.wasGamepadPressed&&this.emit("rayup"),this.wasGamepadPressed=b}}},{key:"getGamepadButtonPressed_",value:function(){var a=this.getVRGamepad_();if(!a)return!1;for(var b=0;b<a.buttons.length;++b)if(a.buttons[b].pressed)return!0;return!1}},{key:"onMouseDown_",value:function(a){this.isSyntheticMouseEvent||this.isCardboardCompatClick(a)||(this.startDragging_(a),this.emit("raydown"))}},{key:"onMouseMove_",value:function(a){this.isSyntheticMouseEvent||(this.updatePointer_(a),this.updateDragDistance_(),this.emit("pointermove",this.pointerNdc))}},{key:"onMouseUp_",value:function(a){var b=this.isSyntheticMouseEvent;this.isSyntheticMouseEvent=!1,b||this.isCardboardCompatClick(a)||this.endDragging_()}},{key:"onTouchStart_",value:function(a){this.isTouchActive=!0;var b=a.touches[0];this.startDragging_(b),this.updateTouchPointer_(a),this.emit("pointermove",this.pointerNdc),this.emit("raydown")}},{key:"onTouchMove_",value:function(a){this.updateTouchPointer_(a),this.updateDragDistance_()}},{key:"onTouchEnd_",value:function(a){this.endDragging_(),this.isSyntheticMouseEvent=!0,this.isTouchActive=!1}},{key:"updateTouchPointer_",value:function(a){if(0===a.touches.length)return void console.warn("Received touch event with no touches.");var b=a.touches[0];this.updatePointer_(b)}},{key:"updatePointer_",value:function(a){this.pointer.set(a.clientX,a.clientY),this.pointerNdc.x=a.clientX/this.size.width*2-1,this.pointerNdc.y=2*-(a.clientY/this.size.height)+1}},{key:"updateDragDistance_",value:function(){if(this.isDragging){var a=this.lastPointer.sub(this.pointer).length();this.dragDistance+=a,this.lastPointer.copy(this.pointer),this.dragDistance>n&&(this.emit("raycancel"),this.isDragging=!1)}}},{key:"startDragging_",value:function(a){this.isDragging=!0,this.lastPointer.set(a.clientX,a.clientY)}},{key:"endDragging_",value:function(){this.dragDistance<n&&this.emit("rayup"),this.dragDistance=0,this.isDragging=!1}},{key:"getVRGamepad_",value:function(){if(!navigator.getGamepads)return null;for(var a=navigator.getGamepads(),b=0;b<a.length;++b){var c=a[b];if(c&&(c.pose||c.displayId))return c}return null}}]),b}(j["default"]);c["default"]=o},{"./ray-interaction-modes":5,"./util":7,eventemitter3:1}],4:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),i=a("./orientation-arm-model"),j=d(i),k=a("eventemitter3"),l=d(k),m=a("./ray-renderer"),n=d(m),o=a("./ray-controller"),p=d(o),q=a("./ray-interaction-modes"),r=d(q),s=function(a){function b(a,c){e(this,b);var d=f(this,(b.__proto__||Object.getPrototypeOf(b)).call(this));return d.camera=a,d.renderer=new n["default"](a),d.controller=new p["default"](c),d.armModel=new j["default"],d.controller.on("raydown",d.onRayDown_.bind(d)),d.controller.on("rayup",d.onRayUp_.bind(d)),d.controller.on("raycancel",d.onRayCancel_.bind(d)),d.controller.on("pointermove",d.onPointerMove_.bind(d)),d.renderer.on("rayover",function(a){d.emit("rayover",a)}),d.renderer.on("rayout",function(a){d.emit("rayout",a)}),d.pointerNdc=new THREE.Vector2(1,1),d.handlers={},d}return g(b,a),h(b,[{key:"add",value:function(a,b){this.renderer.add(a,b),this.handlers[a.id]=b}},{key:"remove",value:function(a){this.renderer.remove(a),delete this.handlers[a.id]}},{key:"update",value:function(){var a=new THREE.Vector3(0,0,-1);a.applyQuaternion(this.camera.quaternion);var b=this.controller.getInteractionMode();switch(b){case r["default"].MOUSE:this.renderer.setPointer(this.pointerNdc),this.renderer.setRayVisibility(!1),this.renderer.setReticleVisibility(!1),this.renderer.setActive(!0);break;case r["default"].TOUCH:this.renderer.setPointer(this.pointerNdc),this.renderer.setRayVisibility(!1),this.renderer.setReticleVisibility(!1),this.renderer.setActive(this.controller.getIsTouchActive());break;case r["default"].VR_0DOF:this.renderer.setPosition(this.camera.position),this.renderer.setOrientation(this.camera.quaternion),this.renderer.setRayVisibility(!1),this.renderer.setReticleVisibility(!0),this.renderer.setActive(!0);break;case r["default"].VR_3DOF:var c=this.controller.getGamepadPose(),d=(new THREE.Quaternion).fromArray(c.orientation);this.armModel.setHeadOrientation(this.camera.quaternion),this.armModel.setHeadPosition(this.camera.position),this.armModel.setControllerOrientation(d),this.armModel.update();var e=this.armModel.getPose();this.renderer.setPosition(e.position),this.renderer.setOrientation(e.orientation),this.renderer.setRayVisibility(!0),this.renderer.setReticleVisibility(!0),this.renderer.setActive(!0);break;case r["default"].VR_6DOF:var c=this.controller.getGamepadPose();if(!c.orientation||!c.position){console.warn("Invalid gamepad pose. Can't update ray.");break}var f=(new THREE.Quaternion).fromArray(c.orientation),g=(new THREE.Vector3).fromArray(c.position);this.renderer.setOrientation(f),this.renderer.setPosition(g),this.renderer.setRayVisibility(!0),this.renderer.setReticleVisibility(!0),this.renderer.setActive(!0);break;default:console.error("Unknown interaction mode.")}this.renderer.update(),this.controller.update()}},{key:"setSize",value:function(a){this.controller.setSize(a)}},{key:"getMesh",value:function(){return this.renderer.getReticleRayMesh()}},{key:"getOrigin",value:function(){return this.renderer.getOrigin()}},{key:"getDirection",value:function(){return this.renderer.getDirection()}},{key:"getRightDirection",value:function(){var a=new THREE.Vector3(0,0,-1);return a.applyQuaternion(this.camera.quaternion),(new THREE.Vector3).crossVectors(a,this.camera.up)}},{key:"onRayDown_",value:function(a){this.renderer.update();var b=this.renderer.getSelectedMesh();this.emit("raydown",b),this.renderer.setActive(!0)}},{key:"onRayUp_",value:function(a){var b=this.renderer.getSelectedMesh();this.emit("rayup",b),this.renderer.setActive(!1)}},{key:"onRayCancel_",value:function(a){var b=this.renderer.getSelectedMesh();this.emit("raycancel",b)}},{key:"onPointerMove_",value:function(a){this.pointerNdc.copy(a)}}]),b}(l["default"]);c["default"]=s},{"./orientation-arm-model":2,"./ray-controller":3,"./ray-interaction-modes":5,"./ray-renderer":6,eventemitter3:1}],5:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={MOUSE:1,TOUCH:2,VR_0DOF:3,VR_3DOF:4,VR_6DOF:5};c["default"]=d},{}],6:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),i=a("./util"),j=a("eventemitter3"),k=d(j),l=3,m=.02,n=.04,o=.02,p=i.base64("image/png","iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABdklEQVR4nO3WwXHEQAwDQcin/FOWw+BjuiPYB2q4G2nP933P9SO4824zgDADiDOAuHfb3/UjuKMAcQYQZwBx/gBxChCnAHEKEKcAcQoQpwBxChCnAHEGEGcAcf4AcQoQZwBxBhBnAHEGEGcAcQYQZwBxBhBnAHEGEGcAcQYQZwBxBhBnAHHvtt/1I7ijAHEGEGcAcf4AcQoQZwBxTkCcAsQZQJwTEKcAcQoQpwBxBhDnBMQpQJwCxClAnALEKUCcAsQpQJwCxClAnALEKUCcAsQpQJwBxDkBcQoQpwBxChCnAHEKEKcAcQoQpwBxChCnAHEKEGcAcU5AnALEKUCcAsQZQJwTEKcAcQYQ5wTEKUCcAcQZQJw/QJwCxBlAnAHEGUCcAcQZQJwBxBlAnAHEGUCcAcQZQJwBxBlAnAHEGUDcu+25fgR3FCDOAOIMIM4fIE4B4hQgTgHiFCBOAeIUIE4B4hQgzgDiDCDOHyBOAeIMIM4A4v4B/5IF9eD6QxgAAAAASUVORK5CYII="),q=function(a){function b(a,c){e(this,b);var d=f(this,(b.__proto__||Object.getPrototypeOf(b)).call(this));d.camera=a;return d.meshes={},d.selected={},d.raycaster=new THREE.Raycaster,d.position=new THREE.Vector3,d.orientation=new THREE.Quaternion,d.root=new THREE.Object3D,d.reticle=d.createReticle_(),d.root.add(d.reticle),d.ray=d.createRay_(),d.root.add(d.ray),d.reticleDistance=l,d}return g(b,a),h(b,[{key:"add",value:function(a){this.meshes[a.id]=a}},{key:"remove",value:function(a){var b=a.id;this.meshes[b]&&delete this.meshes[b],this.selected[b]&&delete this.selected[a.id]}},{key:"update",value:function(){for(var a in this.meshes){var b=this.meshes[a],c=this.raycaster.intersectObject(b,!0);c.length>1&&console.warn("Unexpected: multiple meshes intersected.");var d=c.length>0,e=this.selected[a];d&&!e&&(this.selected[a]=!0,this.isActive&&this.emit("rayover",b)),!d&&e&&(delete this.selected[a],this.moveReticle_(null),this.isActive&&this.emit("rayout",b)),d&&this.moveReticle_(c)}}},{key:"setPosition",value:function(a){this.position.copy(a),this.raycaster.ray.origin.copy(a),this.updateRaycaster_()}},{key:"getOrigin",value:function(){return this.raycaster.ray.origin}},{key:"setOrientation",value:function(a){this.orientation.copy(a);var b=new THREE.Vector3(0,0,-1).applyQuaternion(a);this.raycaster.ray.direction.copy(b),this.updateRaycaster_()}},{key:"getDirection",value:function(){return this.raycaster.ray.direction}},{key:"setPointer",value:function(a){this.raycaster.setFromCamera(a,this.camera),this.updateRaycaster_()}},{key:"getReticleRayMesh",value:function(){return this.root}},{key:"getSelectedMesh",value:function(){var a=0,b=null;for(var c in this.selected)a+=1,b=this.meshes[c];return a>1&&console.warn("More than one mesh selected."),b}},{key:"setReticleVisibility",value:function(a){this.reticle.visible=a}},{key:"setRayVisibility",value:function(a){this.ray.visible=a}},{key:"setActive",value:function(a){if(this.isActive!=a&&(this.isActive=a,!a)){this.moveReticle_(null);for(var b in this.selected){var c=this.meshes[b];delete this.selected[b],this.emit("rayout",c)}}}},{key:"updateRaycaster_",value:function(){var a=this.raycaster.ray,b=this.reticle.position;b.copy(a.direction),b.multiplyScalar(this.reticleDistance),b.add(a.origin);var c=(new THREE.Vector3).copy(a.direction);c.multiplyScalar(this.reticleDistance),this.ray.scale.y=c.length();var d=new THREE.ArrowHelper(a.direction,a.origin);this.ray.rotation.copy(d.rotation),this.ray.position.addVectors(a.origin,c.multiplyScalar(.5))}},{key:"createReticle_",value:function(){var a=new THREE.SphereGeometry(m,32,32),b=new THREE.MeshBasicMaterial({color:16777215,transparent:!0,opacity:.9}),c=new THREE.Mesh(a,b),d=new THREE.SphereGeometry(n,32,32),e=new THREE.MeshBasicMaterial({color:3355443,transparent:!0,opacity:.3}),f=new THREE.Mesh(d,e),g=new THREE.Group;return g.add(c),g.add(f),g}},{key:"moveReticle_",value:function(a){var b=l;if(a){var c=a[0];b=c.distance}this.reticleDistance=b,this.updateRaycaster_()}},{key:"createRay_",value:function(){var a=new THREE.CylinderGeometry(o,o,1,32),b=new THREE.MeshBasicMaterial({map:THREE.ImageUtils.loadTexture(p),transparent:!0,opacity:.3}),c=new THREE.Mesh(a,b);return c}}]),b}(k["default"]);c["default"]=q},{"./util":7,eventemitter3:1}],7:[function(a,b,c){"use strict";function d(){var a=!1;return function(b){(/(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(b)||/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(b.substr(0,4)))&&(a=!0)}(navigator.userAgent||navigator.vendor||window.opera),a}function e(a,b){return"data:"+a+";base64,"+b}Object.defineProperty(c,"__esModule",{value:!0}),c.isMobile=d,c.base64=e},{}]},{},[4])(4)});
{
"name": "ray-input",
"version": "0.1.2",
"version": "0.1.3",
"description": "Cross platform VR input capabilities. For desktop, mobile, Cardboard, Daydream and Vive.",
"main": "src/ray-input.js",
"scripts": {
"build": "browserify --standalone RayInput -vdt [ babelify --presets [ es2015 ] ] src/ray-input.js -o build/ray.js && uglify -s build/ray.js -o build/ray.min.js",
"build": "browserify --standalone RayInput -vdt [ babelify --presets [ es2015 ] ] src/ray-input.js -o build/ray.js && uglify -s build/ray.js -o build/ray.min.js && browserify --standalone Example -vdt [ babelify --presets [ es2015 ] ] src/example/main.js -o build/example.js",
"start": "watchify -vdt [ babelify --presets [ es2015 ] ] src/example/main.js -o build/example.js",

@@ -17,3 +17,2 @@ "watch-simulator": "watchify -vdt [ babelify --presets [ es2015 ] ] src/simulator/main.js -o build/simulator.js"

"three": "^0.81.2",
"tween": "^0.9.0",
"webvr-boilerplate": "^0.4.6",

@@ -24,4 +23,5 @@ "webvr-polyfill": "^0.9.15"

"babel-preset-es2015": "^6.16.0",
"babelify": "^7.3.0"
"babelify": "^7.3.0",
"uglify-js": "^2.7.5"
}
}

@@ -46,4 +46,5 @@ Ray Input: default WebVR interaction

// Here, camera is an instance of THREE.Camera.
var input = new RayInput(camera);
// Here, camera is an instance of THREE.Camera,
// If second HTMLElement arg is provided, it will be addEventListener'ed.
var input = new RayInput(camera, renderer.domElement);

@@ -50,0 +51,0 @@ How to register objects that can be interacted with:

@@ -119,2 +119,5 @@ /*

opt_mesh.material.color = newColor;
if (!isActive) {
opt_mesh.material.wireframe = !opt_mesh.material.wireframe;
}
}

@@ -121,0 +124,0 @@ }

@@ -16,3 +16,5 @@ /*

const HEAD_ELBOW_OFFSET = new THREE.Vector3(0.155, -0.465, -0.15);
const HEAD_ELBOW_OFFSET_RIGHTHANDED = new THREE.Vector3(0.155, -0.465, -0.15);
const HEAD_ELBOW_OFFSET_LEFTHANDED = new THREE.Vector3(-0.155, -0.465, -0.15);
let headElbowOffset = HEAD_ELBOW_OFFSET_RIGHTHANDED;
const ELBOW_WRIST_OFFSET = new THREE.Vector3(0, 0, -0.25);

@@ -82,4 +84,8 @@ const WRIST_CONTROLLER_OFFSET = new THREE.Vector3(0, 0, 0.05);

setLeftHanded(isLeftHanded) {
// TODO(smus): Implement me!
this.isLeftHanded = isLeftHanded;
if (isLeftHanded) {
headElbowOffset = HEAD_ELBOW_OFFSET_LEFTHANDED;
}else{
headElbowOffset = HEAD_ELBOW_OFFSET_RIGHTHANDED;
}
}

@@ -120,3 +126,3 @@

let elbowPos = this.elbowPos;
elbowPos.copy(this.headPos).add(HEAD_ELBOW_OFFSET);
elbowPos.copy(this.headPos).add(headElbowOffset);
let elbowOffset = new THREE.Vector3().copy(ARM_EXTENSION_OFFSET);

@@ -123,0 +129,0 @@ elbowOffset.multiplyScalar(extensionRatio);

@@ -36,15 +36,13 @@ /*

export default class RayController extends EventEmitter {
constructor(renderer) {
constructor(opt_el) {
super();
this.renderer = renderer;
let el = opt_el || window;
this.availableInteractions = {};
// Handle interactions.
window.addEventListener('mousedown', this.onMouseDown_.bind(this));
window.addEventListener('mousemove', this.onMouseMove_.bind(this));
window.addEventListener('mouseup', this.onMouseUp_.bind(this));
window.addEventListener('touchstart', this.onTouchStart_.bind(this));
window.addEventListener('touchmove', this.onTouchMove_.bind(this));
window.addEventListener('touchend', this.onTouchEnd_.bind(this));
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));

@@ -63,3 +61,6 @@ // The position of the pointer.

this.isTouchActive = false;
// Is this a synthetic mouse event?
this.isSyntheticMouseEvent = false;
// Is lefthanded.
this.isLeftHanded = false;
// Gamepad events.

@@ -84,4 +85,15 @@ this.gamepad = null;

this.gamepad = gamepad;
if (gamepad) {
if(gamepad.hand) {
this.isLeftHanded = (gamepad.hand === 'left');
}
let pose = gamepad.pose;
if (!pose) {
// Cardboard touch emulation reports as a 0-DOF
// 1-button clicker gamepad.
return InteractionModes.VR_0DOF;
}
// If there's a gamepad connected, determine if it's Daydream or a Vive.

@@ -117,3 +129,3 @@ if (pose.hasPosition) {

var gamepad = this.getVRGamepad_();
return gamepad.pose;
return gamepad.pose || {};
}

@@ -129,2 +141,22 @@

/**
* Checks if this click is the cardboard-compatible fallback
* click on Daydream controllers so that we can deduplicate it.
* This happens on Chrome <=61 when a Daydream controller
* is active, it registers as a 3DOF device. Not applicable
* for Chrome >= 62 or other browsers which don't do this.
*
* Also need to handle Daydream View on Chrome 61 which in
* Cardboard mode exposes both the 0DOF clicker device and
* the compatibility click.
*/
isCardboardCompatClick(e) {
let mode = this.getInteractionMode();
if ((mode == InteractionModes.VR_0DOF || mode == InteractionModes.VR_3DOF) &&
e.screenX == 0 && e.screenY == 0) {
return true;
}
return false;
}
setSize(size) {

@@ -136,3 +168,5 @@ this.size = size;

let mode = this.getInteractionMode();
if (mode == InteractionModes.VR_3DOF || mode == InteractionModes.VR_6DOF) {
if (mode == InteractionModes.VR_0DOF ||
mode == InteractionModes.VR_3DOF ||
mode == InteractionModes.VR_6DOF) {
// If we're dealing with a gamepad, check every animation frame for a

@@ -167,2 +201,5 @@ // pressed action.

onMouseDown_(e) {
if (this.isSyntheticMouseEvent) return;
if (this.isCardboardCompatClick(e)) return;
this.startDragging_(e);

@@ -173,2 +210,4 @@ this.emit('raydown');

onMouseMove_(e) {
if (this.isSyntheticMouseEvent) return;
this.updatePointer_(e);

@@ -180,2 +219,7 @@ this.updateDragDistance_();

onMouseUp_(e) {
var isSynthetic = this.isSyntheticMouseEvent;
this.isSyntheticMouseEvent = false;
if (isSynthetic) return;
if (this.isCardboardCompatClick(e)) return;
this.endDragging_();

@@ -192,5 +236,2 @@ }

this.emit('raydown');
// Prevent synthetic mouse event from being created.
e.preventDefault();
}

@@ -201,5 +242,2 @@

this.updateDragDistance_();
// Prevent synthetic mouse event from being created.
e.preventDefault();
}

@@ -210,4 +248,4 @@

// Prevent synthetic mouse event from being created.
e.preventDefault();
// Suppress duplicate events from synthetic mouse events.
this.isSyntheticMouseEvent = true;
this.isTouchActive = false;

@@ -275,4 +313,5 @@ }

// The array may contain undefined gamepads, so check for that as well as
// a non-null pose.
if (gamepad && gamepad.pose) {
// a non-null pose. Clicker devices such as Cardboard button emulation
// have a displayId but no pose.
if (gamepad && (gamepad.pose || gamepad.displayId)) {
return gamepad;

@@ -279,0 +318,0 @@ }

@@ -26,3 +26,3 @@ /*

export default class RayInput extends EventEmitter {
constructor(camera) {
constructor(camera, opt_el) {
super();

@@ -32,3 +32,3 @@

this.renderer = new RayRenderer(camera);
this.controller = new RayController();
this.controller = new RayController(opt_el);

@@ -127,2 +127,3 @@ // Arm model needed to transform controller orientation into proper pose.

this.armModel.setControllerOrientation(controllerOrientation);
this.armModel.setLeftHanded(this.controller.isLeftHanded);
this.armModel.update();

@@ -129,0 +130,0 @@

@@ -87,3 +87,3 @@ /*

var id = object.id;
if (!this.meshes[id]) {
if (this.meshes[id]) {
// If there's no existing mesh, we can't remove it.

@@ -90,0 +90,0 @@ delete this.meshes[id];

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc