Transaction

f0b32ff6dfe09a1bb953b7b6c8620c14931e3f0f7f2611843f570f05e78e679b
( - )
255,268
2019-07-09 10:30:17
1
95,287 B

2 Outputs

Total Output:
  • j"1ChDHzdd1H4wSjgGMHyndZm6qxEDGjqpJLNsreviousHMDPosition,s=this.el.sceneEl;e=this.calculateHMDPosition(),t.copy(e).sub(n),s.is("vr-mode")&&!isNullVector(t)&&(n.copy(e),s.is("vr-mode")&&o.setAttribute("position",{x:i.x+t.x,y:i.y+t.y,z:i.z+t.z}))}}(),calculateHMDPosition:function(){var t=this.dolly,e=new THREE.Vector3;return t.updateMatrix(),e.setFromMatrixPosition(t.matrix),e},onMouseMove:function(t){var e=this.pitchObject,o=this.yawObject,i=this.previousMouseEvent;if(this.mouseDown&&this.data.enabled){var n=t.movementX||t.mozMovementX,s=t.movementY||t.mozMovementY;void 0!==n&&void 0!==s||(n=t.screenX-i.screenX,s=t.screenY-i.screenY),this.previousMouseEvent=t,o.rotation.y-=.002*n,e.rotation.x-=.002*s,e.rotation.x=Math.max(-PI_2,Math.min(PI_2,e.rotation.x))}},onMouseDown:function(t){this.mouseDown=!0,this.previousMouseEvent=t,document.body.classList.add("a-grabbing")},releaseMouse:function(){this.mouseDown=!1,document.body.classList.remove("a-grabbing")},onTouchStart:function(t){1===t.touches.length&&(this.touchStart={x:t.touches[0].pageX,y:t.touches[0].pageY},this.touchStarted=!0)},onTouchMove:function(t){var e,o=this.yawObject;this.touchStarted&&(e=2*Math.PI*(t.touches[0].pageX-this.touchStart.x)/this.el.sceneEl.canvas.clientWidth,o.rotation.y-=.5*e,this.touchStart={x:t.touches[0].pageX,y:t.touches[0].pageY})},onTouchEnd:function(){this.touchStarted=!1}}); },{"../core/component":100,"../lib/three":146,"../utils/":167,"../utils/bind":161}],66:[function(_dereq_,module,exports){ function parseSide(e){switch(e){case"back":return THREE.BackSide;case"double":return THREE.DoubleSide;default:return THREE.FrontSide}}function disposeMaterial(e,t){e.dispose(),t.unregisterMaterial(e)}var utils=_dereq_("../utils/"),component=_dereq_("../core/component"),THREE=_dereq_("../lib/three"),shader=_dereq_("../core/shader"),error=utils.debug("components:material:error"),registerComponent=component.registerComponent,shaders=shader.shaders,shaderNames=shader.shaderNames;module.exports.Component=registerComponent("material",{schema:{depthTest:{default:!0},flatShading:{default:!1},opacity:{default:1,min:0,max:1},shader:{default:"standard",oneOf:shaderNames},side:{default:"front",oneOf:["front","back","double"]},transparent:{default:!1},visible:{default:!0},offset:{type:"vec2",default:{x:0,y:0}},repeat:{type:"vec2",default:{x:1,y:1}},npot:{default:!1}},init:function(){this.material=null},update:function(e){var t=this.data;this.shader&&t.shader===e.shader||this.updateShader(t.shader),this.shader.update(this.data),this.updateMaterial()},updateSchema:function(e){var t=e.shader,a=this.data&&this.data.shader,i=t||a,s=shaders[i]&&shaders[i].schema;s||error("Unknown shader schema "+i),a&&t===a||(this.extendSchema(s),this.updateBehavior())},updateBehavior:function(){var e=this.schema,t=this,a=this.el.sceneEl,i={},s=function(e,a){function s(t){i[t]=e}var r=Object.keys(i);r.forEach(s),t.shader.update(i)},r=Object.keys(e);this.tick=void 0,r.forEach(function(a){"time"===e[a].type&&(t.tick=s,i[a]=!0)}),a&&(this.tick?a.addBehavior(this):a.removeBehavior(this))},updateShader:function(e){var t,a=this.data,i=shaders[e]&&shaders[e].Shader;if(!i)throw new Error("Unknown shader "+e);t=this.shader=new i,t.el=this.el,t.init(a),this.setMaterial(t.material),this.updateSchema(a)},updateMaterial:function(){var e=this.data,t=this.material;t.side=parseSide(e.side),t.opacity=e.opacity,t.transparent=e.transparent!==!1||e.opacity<1,t.depthTest=e.depthTest!==!1,t.shading=e.flatShading?THREE.FlatShading:THREE.SmoothShading,t.visible=e.visible},remove:function(){var e=new THREE.MeshBasicMaterial,t=this.material,a=this.el.getObject3D("mesh");a&&(a.material=e),disposeMaterial(t,this.system)},setMaterial:function(e){var t=this.el.getOrCreateObject3D("mesh",THREE.Mesh),a=this.system;this.material&&disposeMaterial(this.material,a),this.material=t.material=e,a.registerMaterial(e)}}); },{"../core/component":100,"../core/shader":109,"../lib/three":146,"../utils/":167}],67:[function(_dereq_,module,exports){ var debug=_dereq_("../utils/debug"),registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three"),warn=debug("components:obj-model:warn");module.exports.Component=registerComponent("obj-model",{dependencies:["material"],schema:{mtl:{type:"model"},obj:{type:"model"}},init:function(){this.model=null,this.objLoader=new THREE.OBJLoader,this.mtlLoader=new THREE.MTLLoader(this.objLoader.manager),this.mtlLoader.crossOrigin=""},update:function(){var e=this.data;e.obj&&(this.remove(),this.loadObj(e.obj,e.mtl))},remove:function(){this.model&&this.el.removeObject3D("mesh")},loadObj:function(e,o){var t=this,r=this.el,a=this.mtlLoader,i=this.objLoader;return o?(r.hasAttribute("material")&&warn("Material component properties are ignored when a .MTL is provided"),a.setTexturePath(o.substr(0,o.lastIndexOf("/")+1)),void a.load(o,function(o){o.preload(),i.setMaterials(o),i.load(e,function(e){t.model=e,r.setObject3D("mesh",e),r.emit("model-loaded",{format:"obj",model:e})})})):void i.load(e,function(e){var o=r.components.material;o&&e.traverse(function(e){e instanceof THREE.Mesh&&(e.material=o.material)}),t.model=e,r.setObject3D("mesh",e),r.emit("model-loaded",{format:"obj",model:e})})}}); },{"../core/component":100,"../lib/three":146,"../utils/debug":163}],68:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent,bind=_dereq_("../utils/bind"),isControllerPresent=_dereq_("../utils/tracked-controls").isControllerPresent,TOUCH_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/oculus/oculus-touch-controller-",TOUCH_CONTROLLER_MODEL_OBJ_URL_L=TOUCH_CONTROLLER_MODEL_BASE_URL+"left.obj",TOUCH_CONTROLLER_MODEL_OBJ_MTL_L=TOUCH_CONTROLLER_MODEL_BASE_URL+"left.mtl",TOUCH_CONTROLLER_MODEL_OBJ_URL_R=TOUCH_CONTROLLER_MODEL_BASE_URL+"right.obj",TOUCH_CONTROLLER_MODEL_OBJ_MTL_R=TOUCH_CONTROLLER_MODEL_BASE_URL+"right.mtl",GAMEPAD_ID_PREFIX="Oculus Touch",PIVOT_OFFSET={x:0,y:-.015,z:.04},EMULATED_TOUCH_THRESHOLD=.001;module.exports.Component=registerComponent("oculus-touch-controls",{schema:{hand:{default:"left"},buttonColor:{type:"color",default:"#999"},buttonTouchColor:{type:"color",default:"#8AB"},buttonHighlightColor:{type:"color",default:"#2DF"},model:{default:!0},rotationOffset:{default:0}},mapping:{left:{axis0:"thumbstick",axis1:"thumbstick",button0:"thumbstick",button1:"trigger",button2:"grip",button3:"X",button4:"Y",button5:"surface"},right:{axis0:"thumbstick",axis1:"thumbstick",button0:"thumbstick",button1:"trigger",button2:"grip",button3:"A",button4:"B",button5:"surface"}},bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this)},init:function(){var t=this;this.animationActive="pointing",this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){t.onButtonEvent(e.detail.id,"down")},this.onButtonUp=function(e){t.onButtonEvent(e.detail.id,"up")},this.onButtonTouchStart=function(e){t.onButtonEvent(e.detail.id,"touchstart")},this.onButtonTouchEnd=function(e){t.onButtonEvent(e.detail.id,"touchend")},this.controllerPresent=!1,this.everGotGamepadEvent=!1,this.lastControllerCheck=0,this.previousButtonValues={},this.bindMethods(),this.isControllerPresent=isControllerPresent},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("model-loaded",this.onModelLoaded),t.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1),window.addEventListener("gamepadconnected",this.checkIfControllerPresent,!1),window.addEventListener("gamepaddisconnected",this.checkIfControllerPresent,!1)},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("model-loaded",this.onModelLoaded),t.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1),window.removeEventListener("gamepadconnected",this.checkIfControllerPresent,!1),window.removeEventListener("gamepaddisconnected",this.checkIfControllerPresent,!1)},checkIfControllerPresent:function(){var t=this.data,e=this.isControllerPresent(this.el.sceneEl,GAMEPAD_ID_PREFIX,{hand:t.hand});e!==this.controllerPresent&&(this.controllerPresent=e,e&&this.injectTrackedControls())},play:function(){this.checkIfControllerPresent(),this.addEventListeners()},pause:function(){this.removeEventListeners()},updateControllerModel:function(){var t,e;this.data.model&&("right"===this.data.hand?(t="url("+TOUCH_CONTROLLER_MODEL_OBJ_URL_R+")",e="url("+TOUCH_CONTROLLER_MODEL_OBJ_MTL_R+")"):(t="url("+TOUCH_CONTROLLER_MODEL_OBJ_URL_L+")",e="url("+TOUCH_CONTROLLER_MODEL_OBJ_MTL_L+")"),this.el.setAttribute("obj-model",{obj:t,mtl:e}))},injectTrackedControls:function(){var t=this.el,e=this.data,o="right"===e.hand;t.setAttribute("tracked-controls",{id:o?"Oculus Touch (Right)":"Oculus Touch (Left)",controller:0,rotationOffset:e.rotationOffset!==-999?e.rotationOffset:o?-90:90}),this.updateControllerModel()},onControllersUpdate:function(){this.everGotGamepadEvent||this.checkIfControllerPresent()},isEmulatedTouchEvent:function(t){return t&&t>=EMULATED_TOUCH_THRESHOLD},onButtonChanged:function(t){var e,o,n,r=this.mapping[this.data.hand]["button"+t.detail.id],i=this.buttonMeshes;"trigger"!==r&&"grip"!==r||(o=t.detail.state.value,e=this.isEmulatedTouchEvent(this.previousButtonValues[r]),this.previousButtonValues[r]=o,n=this.isEmulatedTouchEvent(o),n!==e&&(n?this.onButtonTouchStart:this.onButtonTouchEnd)(t),i&&("trigger"===r&&i.trigger&&(i.trigger.rotation.x=-o*(Math.PI/24)),"grip"===r&&i.grip&&(i.grip.rotation.y=("left"===this.data.hand?-1:1)*o*(Math.PI/60))))},onModelLoaded:function(t){var e,o=t.detail.model;if(this.data.model){var n="left"===this.data.hand;e=this.buttonMeshes={},e.grip=o.getObjectByName(n?"buttonHand_oculus-touch-controller-left.004":"buttonHand_oculus-touch-controller-right.005"),e.thumbstick=o.getObjectByName(n?"stick_oculus-touch-controller-left.007":"stick_oculus-touch-controller-right.004"),e.trigger=o.getObjectByName(n?"buttonTrigger_oculus-touch-controller-left.005":"buttonTrigger_oculus-touch-controller-right.006"),e.X=o.getObjectByName("buttonX_oculus-touch-controller-left.002"),e.A=o.getObjectByName("buttonA_oculus-touch-controller-right.002"),e.Y=o.getObjectByName("buttonY_oculus-touch-controller-left.001"),e.B=o.getObjectByName("buttonB_oculus-touch-controller-right.003"),o.position=PIVOT_OFFSET}},onButtonEvent:function(t,e){var o,n=this.mapping[this.data.hand]["button"+t];if(Array.isArray(n))for(o=0;o<n.length;o++)this.el.emit(n[o]+e);else this.el.emit(n+e);this.updateModel(n,e)},updateModel:function(t,e){var o;if(Array.isArray(t))for(o=0;o<t.length;o++)this.updateButtonModel(t[o],e);else this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var o="up"===e||"touchend"===e?this.data.buttonColor:"touchstart"===e?this.data.buttonTouchColor:this.data.buttonHighlightColor,n=this.buttonMeshes;this.data.model&&n&&n[t]&&n[t].material.color.set(o)}}); },{"../core/component":100,"../utils/bind":161,"../utils/tracked-controls":171}],69:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent;module.exports.Component=registerComponent("position",{schema:{type:"vec3"},update:function(){var e=this.el.object3D,o=this.data;e.position.set(o.x,o.y,o.z)}}); },{"../core/component":100}],70:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three"),bind=_dereq_("../utils/").bind,scaleDummy=new THREE.Vector3;module.exports.Component=registerComponent("raycaster",{schema:{far:{default:1/0},interval:{default:100},near:{default:0},objects:{default:""},recursive:{default:!0}},init:function(){this.direction=new THREE.Vector3,this.intersectedEls=[],this.objects=null,this.prevCheckTime=void 0,this.raycaster=new THREE.Raycaster,this.updateOriginDirection(),this.refreshObjects=bind(this.refreshObjects,this)},play:function(){this.el.sceneEl.addEventListener("child-attached",this.refreshObjects),this.el.sceneEl.addEventListener("child-detached",this.refreshObjects)},pause:function(){this.el.sceneEl.removeEventListener("child-attached",this.refreshObjects),this.el.sceneEl.removeEventListener("child-detached",this.refreshObjects)},update:function(){var e=this.data,t=this.raycaster;t.far=e.far,t.near=e.near,this.refreshObjects()},refreshObjects:function(){var e,t,i=this.data;if(i.objects)for(t=this.el.sceneEl.querySelectorAll(i.objects),this.objects=[],e=0;e<t.length;e++)this.objects.push(t[e].object3D);else this.objects=this.el.sceneEl.object3D.children},tick:function(e){var t,i,r,s=this.el,c=this.data,n=this.prevCheckTime;n&&e-n<c.interval||(this.prevCheckTime=e,r=this.intersectedEls.slice(),this.updateOriginDirection(),i=this.raycaster.intersectObjects(this.objects,c.recursive),i=i.filter(function(e){return!!e.object.el}),t=this.intersectedEls=i.map(function(e){return e.object.el}),i.forEach(function(e){var t=e.object.el;t.emit("raycaster-intersected",{el:s,intersection:e})}),i.length&&s.emit("raycaster-intersection",{els:t.slice(),intersections:i}),r.forEach(function(e){t.indexOf(e)===-1&&(s.emit("raycaster-intersection-cleared",{el:e}),e.emit("raycaster-intersected-cleared",{el:s}))}))},updateOriginDirection:function(){var e=new THREE.Quaternion,t=new THREE.Vector3;return function(){var i=this.el,r=i.object3D;r.updateMatrixWorld(),r.matrixWorld.decompose(t,e,scaleDummy),this.direction.set(0,0,-1),this.direction.applyQuaternion(e),this.raycaster.set(t,this.direction)}}()}); },{"../core/component":100,"../lib/three":146,"../utils/":167}],71:[function(_dereq_,module,exports){ var degToRad=_dereq_("../lib/three").Math.degToRad,registerComponent=_dereq_("../core/component").registerComponent;module.exports.Component=registerComponent("rotation",{schema:{type:"vec3"},update:function(){var e=this.data,o=this.el.object3D;o.rotation.set(degToRad(e.x),degToRad(e.y),degToRad(e.z)),o.rotation.order="YXZ"}}); },{"../core/component":100,"../lib/three":146}],72:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent,zeroScale=1e-5;module.exports.Component=registerComponent("scale",{schema:{type:"vec3",default:{x:1,y:1,z:1}},update:function(){var e=this.data,o=this.el.object3D,t=0===e.x?zeroScale:e.x,r=0===e.y?zeroScale:e.y,a=0===e.z?zeroScale:e.z;o.scale.set(t,r,a)}}); },{"../core/component":100}],73:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../../core/component").registerComponent,utils=_dereq_("../../utils");module.exports.Component=registerComponent("auto-enter-vr",{schema:{display:{type:"string",default:"GearVR"},enabled:{type:"boolean",default:!0}},init:function(){var e=this.el,t=this;this.enterVR=e.enterVR.bind(e),this.exitVR=e.exitVR.bind(e),this.shouldAutoEnterVR=this.shouldAutoEnterVR.bind(this),"false"!==utils.getUrlParameter("auto-enter-vr")&&(window.addEventListener("vrdisplayactivate",function(){t.enterVR()},!1),window.addEventListener("vrdisplaydeactivate",function(){t.exitVR()},!1),setTimeout(function(){t.shouldAutoEnterVR()&&t.enterVR()},0))},update:function(){return this.shouldAutoEnterVR()?this.enterVR():this.exitVR()},shouldAutoEnterVR:function(){var e=this.el,t=this.data;if(!t.enabled)return!1;if(t.display&&"all"!==t.display){var i=e.effect&&e.effect.getVRDisplay&&e.effect.getVRDisplay();if(!i||!i.displayName||i.displayName.indexOf(t.display)<0)return!1}return!0}}); },{"../../core/component":100,"../../utils":167}],74:[function(_dereq_,module,exports){ var bind=_dereq_("../../utils/bind"),registerComponent=_dereq_("../../core/component").registerComponent;module.exports.Component=registerComponent("canvas",{init:function(){function e(){var e=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement;e||t.exitVR(),document.activeElement.blur(),document.body.focus()}var n,t=this.el;n=document.createElement("canvas"),n.classList.add("a-canvas"),n.dataset.aframeCanvas=!0,t.appendChild(n),document.addEventListener("fullscreenchange",e),document.addEventListener("mozfullscreenchange",e),document.addEventListener("webkitfullscreenchange",e),n.addEventListener("touchmove",function(e){e.preventDefault()}),t.canvas=n,t.emit("render-target-loaded",{target:n}),setTimeout(bind(t.resize,t),0)}}); },{"../../core/component":100,"../../utils/bind":161}],75:[function(_dereq_,module,exports){ var register=_dereq_("../../core/component").registerComponent;module.exports.Component=register("debug",{schema:{default:!0}}); },{"../../core/component":100}],76:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../../core/component").registerComponent;module.exports.Component=registerComponent("embedded",{dependencies:["vr-mode-ui"],schema:{default:!0},update:function(){var e=this.el,r=e.querySelector(".a-enter-vr");this.data===!0?(r&&r.classList.add("embedded"),e.removeFullScreenStyles()):(r&&r.classList.remove("embedded"),e.addFullScreenStyles())}}); },{"../../core/component":100}],77:[function(_dereq_,module,exports){ function getFog(e){var o;return o="exponential"===e.type?new THREE.FogExp2(e.color,e.density):new THREE.Fog(e.color,e.near,e.far),o.name=e.type,o}var register=_dereq_("../../core/component").registerComponent,THREE=_dereq_("../../lib/three"),debug=_dereq_("../../utils/debug"),warn=debug("components:fog:warn");module.exports.Component=register("fog",{schema:{color:{type:"color",default:"#000"},density:{default:25e-5},far:{default:1e3,min:0},near:{default:1,min:0},type:{default:"linear",oneOf:["linear","exponential"]}},update:function(){var e=this.data,o=this.el,t=this.el.object3D.fog;return o.isScene?t&&e.type===t.name?void Object.keys(this.schema).forEach(function(o){var n=e[o];"color"===o&&(n=new THREE.Color(n)),t[o]=n}):(o.object3D.fog=getFog(e),void o.systems.material.updateMaterials()):void warn("Fog component can only be applied to <a-scene>")},remove:function(){var e=this.el.object3D.fog;e&&(e.far=0,e.near=.1)}}); },{"../../core/component":100,"../../lib/three":146,"../../utils/debug":163}],78:[function(_dereq_,module,exports){ (function (process){ function getFuzzyPatchVersion(e){var n=e.split(".");return n[2]="x",n.join(".")}var AFRAME_INJECTED=_dereq_("../../constants").AFRAME_INJECTED,bind=_dereq_("../../utils/bind"),pkg=_dereq_("../../../package"),registerComponent=_dereq_("../../core/component").registerComponent,INSPECTOR_DEV_URL="https://aframe.io/aframe-inspector/dist/aframe-inspector.js",INSPECTOR_RELEASE_URL="https://unpkg.com/aframe-inspector@"+getFuzzyPatchVersion(pkg.version)+"/dist/aframe-inspector.min.js",INSPECTOR_URL="dev"===process.env.INSPECTOR_VERSION?INSPECTOR_DEV_URL:INSPECTOR_RELEASE_URL,LOADING_MESSAGE="Loading Inspector";module.exports.Component=registerComponent("inspector",{schema:{url:{default:INSPECTOR_URL}},init:function(){this.onKeydown=bind(this.onKeydown,this),this.onMessage=bind(this.onMessage,this),this.initOverlay(),window.addEventListener("keydown",this.onKeydown),window.addEventListener("message",this.onMessage)},initOverlay:function(){var e='<span class="dots"><span>.</span><span>.</span><span>.</span></span>';this.loadingMessageEl=document.createElement("div"),this.loadingMessageEl.classList.add("a-inspector-loader"),this.loadingMessageEl.innerHTML=LOADING_MESSAGE+e},remove:function(){this.removeEventListeners()},onKeydown:function(e){var n=73===e.keyCode&&e.ctrlKey&&e.altKey;this.data&&n&&this.injectInspector()},showLoader:function(){document.body.appendChild(this.loadingMessageEl)},hideLoader:function(){this.el.removeChild(this.loadingMessageEl)},onMessage:function(e){"INJECT_AFRAME_INSPECTOR"===e.data&&this.injectInspector()},injectInspector:function(){var e,n=this;AFRAME.INSPECTOR||AFRAME.inspectorInjected||(this.showLoader(),e=document.createElement("script"),e.src=this.data.url,e.setAttribute("data-name","aframe-inspector"),e.setAttribute(AFRAME_INJECTED,""),e.onload=function(){AFRAME.INSPECTOR.open(),n.hideLoader(),n.removeEventListeners()},document.head.appendChild(e),AFRAME.inspectorInjected=!0)},removeEventListeners:function(){window.removeEventListener("keydown",this.onKeydown),window.removeEventListener("message",this.onMessage)}}); }).call(this,_dereq_('_process')) },{"../../../package":55,"../../constants":91,"../../core/component":100,"../../utils/bind":161,"_process":9}],79:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../../core/component").registerComponent,shouldCaptureKeyEvent=_dereq_("../../utils/").shouldCaptureKeyEvent,THREE=_dereq_("../../lib/three"),controls=new THREE.VRControls(new THREE.Object3D);module.exports.Component=registerComponent("keyboard-shortcuts",{schema:{enterVR:{default:!0},exitVR:{default:!0},resetSensor:{default:!0}},init:function(){var e=this,t=this.el;this.listener=window.addEventListener("keyup",function(n){shouldCaptureKeyEvent(n)&&(e.enterVREnabled&&70===n.keyCode&&t.enterVR(),e.enterVREnabled&&27===n.keyCode&&t.exitVR(),e.resetSensorEnabled&&90===n.keyCode&&controls.resetSensor())},!1)},update:function(e){var t=this.data;this.enterVREnabled=t.enterVR,this.resetSensorEnabled=t.resetSensor},remove:function(){window.removeEventListener("keyup",this.listener)}}); },{"../../core/component":100,"../../lib/three":146,"../../utils/":167}],80:[function(_dereq_,module,exports){ var debug=_dereq_("../../utils/debug"),registerComponent=_dereq_("../../core/component").registerComponent,warn=debug("components:pool:warn");module.exports.Component=registerComponent("pool",{schema:{mixin:{default:""},size:{default:0},dynamic:{default:!1}},multiple:!0,init:function(){this.initPool()},initPool:function(){var t,i=this.data.mixin;if(i)for(this.availableEls=[],this.usedEls=[],t=0;t<this.data.size;++t)this.createEntity()},update:function(t){var i=this.data;t.mixin===i.mixin&&t.size===i.size||this.initPool()},createEntity:function(){var t=document.createElement("a-entity");t.play=this.wrapPlay(t.play),t.setAttribute("mixin",this.data.mixin),t.setAttribute("visible",!1),this.el.appendChild(t),this.availableEls.push(t)},wrapPlay:function(t){var i=this.usedEls;return function(){i.indexOf(this)!==-1&&t.call(this)}},requestEntity:function(){var t;if(0===this.availableEls.length){if(this.data.dynamic===!1)return void warn("Requested entity from empty pool "+this.name);warn("Requested entity from empty pool. This pool is dynamicand will resize automatically. You might want to increase its initial size"+this.name),this.createEntity()}return t=this.availableEls.shift(),this.usedEls.push(t),t.setAttribute("visible",!0),t},returnEntity:function(t){var i=this.usedEls.indexOf(t);return i===-1?void warn("The returned entity was not previously pooled from "+this.name):(this.usedEls.splice(i,1),this.availableEls.push(t),t.setAttribute("visible",!1),void t.pause())}}); },{"../../core/component":100,"../../utils/debug":163}],81:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../../core/component").registerComponent,THREE=_dereq_("../../lib/three"),VERTEX_SHADER=["attribute vec3 position;","attribute vec2 uv;","uniform mat4 projectionMatrix;","uniform mat4 modelViewMatrix;","varying vec2 vUv;","void main() {"," vUv = vec2( 1.- uv.x, uv.y );"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),FRAGMENT_SHADER=["precision mediump float;","uniform samplerCube map;","varying vec2 vUv;","#define M_PI 3.141592653589793238462643383279","void main() {"," vec2 uv = vUv;"," float longitude = uv.x * 2. * M_PI - M_PI + M_PI / 2.;"," float latitude = uv.y * M_PI;"," vec3 dir = vec3("," - sin( longitude ) * sin( latitude ),"," cos( latitude ),"," - cos( longitude ) * sin( latitude )"," );"," normalize( dir );"," gl_FragColor = vec4( textureCube( map, dir ).rgb, 1.0 );","}"].join("\n");module.exports.Component=registerComponent("screenshot",{schema:{width:{default:4096},height:{default:2048}},init:function(){function e(){var e=t.renderer.getContext();a.cubeMapSize=e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),a.material=new THREE.RawShaderMaterial({uniforms:{map:{type:"t",value:null}},vertexShader:VERTEX_SHADER,fragmentShader:FRAGMENT_SHADER,side:THREE.DoubleSide}),a.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(1,1),a.material),a.quad.visible=!1,a.camera=new THREE.OrthographicCamera(-.5,.5,.5,-.5,-1e4,1e4),a.canvas=document.createElement("canvas"),a.ctx=a.canvas.getContext("2d"),t.camera&&t.camera.add(a.quad),a.onKeyDown=a.onKeyDown.bind(a),a.onCameraActive=a.onCameraActive.bind(a),t.addEventListener("camera-set-active",a.onCameraActive)}var t=this.el,a=this;t.renderer?e():t.addEventListener("render-target-loaded",e)},getRenderTarget:function(e,t){return new THREE.WebGLRenderTarget(e,t,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,wrapS:THREE.ClampToEdgeWrapping,wrapT:THREE.ClampToEdgeWrapping,format:THREE.RGBAFormat,type:THREE.UnsignedByteType})},resize:function(e,t){this.quad.scale.set(e,t,1),this.camera.left=-1*e/2,this.camera.right=e/2,this.camera.top=t/2,this.camera.bottom=-1*t/2,this.camera.updateProjectionMatrix(),this.canvas.width=e,this.canvas.height=t},play:function(){window.addEventListener("keydown",this.onKeyDown)},onCameraActive:function(e){var t=this.quad.parent;t&&t.remove(this.quad),e.detail.cameraEl.getObject3D("camera").add(this.quad)},onKeyDown:function(e){var t=83===e.keyCode&&e.ctrlKey&&e.altKey;if(this.data&&t){var a=e.shiftKey?"equirectangular":"perspective";this.capture(a)}},setCapture:function(e){var t,a,i,r=this.el,n=r.renderer;return"perspective"===e?(this.quad.visible=!1,a=r.camera,t=n.getSize()):(a=this.camera,a.position.copy(r.camera.getWorldPosition()),a.rotation.copy(r.camera.getWorldRotation()),i=new THREE.CubeCamera(r.camera.near,r.camera.far,Math.min(this.cubeMapSize,2048)),i.position.copy(r.camera.getWorldPosition()),i.rotation.copy(r.camera.getWorldRotation()),i.updateCubeMap(r.renderer,r.object3D),this.quad.material.uniforms.map.value=i.renderTarget.texture,t={width:this.data.width,height:this.data.height},this.quad.visible=!0),{camera:a,size:t,projection:e}},capture:function(e){var t=this.setCapture(e);this.renderCapture(t.camera,t.size,t.projection),this.saveCapture()},getCanvas:function(e){var t=this.setCapture(e);return this.renderCapture(t.camera,t.size,t.projection),this.canvas},renderCapture:function(e,t,a){var i,r,n,o=this.el.renderer.autoClear,d=this.el,s=this.el.renderer;r=this.getRenderTarget(t.width,t.height),n=new Uint8Array(4*t.width*t.height),this.resize(t.width,t.height),s.autoClear=!0,s.render(d.object3D,e,r,!0),s.autoClear=o,s.readRenderTargetPixels(r,0,0,t.width,t.height,n),"perspective"===a&&(n=this.flipPixelsVertically(n,t.width,t.height)),i=new ImageData(new Uint8ClampedArray(n),t.width,t.height),this.quad.visible=!1,this.ctx.putImageData(i,0,0)},flipPixelsVertically:function(e,t,a){for(var i=e.slice(0),r=0;r<t;++r)for(var n=0;n<a;++n)i[4*r+n*t*4]=e[4*r+(a-n)*t*4],i[4*r+1+n*t*4]=e[4*r+1+(a-n)*t*4],i[4*r+2+n*t*4]=e[4*r+2+(a-n)*t*4],i[4*r+3+n*t*4]=e[4*r+3+(a-n)*t*4];return i},saveCapture:function(){this.canvas.toBlob(function(e){var t="screenshot-"+document.title.toLowerCase()+"-"+Date.now()+".png",a=document.createElement("a"),i=URL.createObjectURL(e);a.href=i,a.setAttribute("download",t),a.innerHTML="downloading...",a.style.display="none",document.body.appendChild(a),setTimeout(function(){a.click(),document.body.removeChild(a)},1)},"image/png")}}); },{"../../core/component":100,"../../lib/three":146}],82:[function(_dereq_,module,exports){ function createStats(t){var e=new ThreeStats(t.renderer),s=new AFrameStats(t),i=t.isMobile?[]:[e,s];return new RStats({css:[],values:{fps:{caption:"fps",below:30}},groups:[{caption:"Framerate",values:["fps","raf"]}],plugins:i})}var registerComponent=_dereq_("../../core/component").registerComponent,RStats=_dereq_("../../../vendor/rStats"),utils=_dereq_("../../utils");_dereq_("../../../vendor/rStats.extras"),_dereq_("../../lib/rStatsAframe");var AFrameStats=window.aframeStats,bind=utils.bind,HIDDEN_CLASS="a-hidden",ThreeStats=window.threeStats;module.exports.Component=registerComponent("stats",{schema:{default:!0},init:function(){var t=this.el;"false"!==utils.getUrlParameter("stats")&&(this.stats=createStats(t),this.statsEl=document.querySelector(".rs-base"),this.hideBound=bind(this.hide,this),this.showBound=bind(this.show,this),t.addEventListener("enter-vr",this.hideBound),t.addEventListener("exit-vr",this.showBound))},update:function(){if(this.stats)return this.data?this.show():this.hide()},remove:function(){this.el.removeEventListener("enter-vr",this.hideBound),this.el.removeEventListener("exit-vr",this.showBound),this.statsEl&&this.statsEl.parentNode.removeChild(this.statsEl)},tick:function(){var t=this.stats;t&&(t("rAF").tick(),t("FPS").frame(),t().update())},hide:function(){this.statsEl.classList.add(HIDDEN_CLASS)},show:function(){this.statsEl.classList.remove(HIDDEN_CLASS)}}); },{"../../../vendor/rStats":175,"../../../vendor/rStats.extras":174,"../../core/component":100,"../../lib/rStatsAframe":145,"../../utils":167}],83:[function(_dereq_,module,exports){ function createEnterVRButton(e){var t,n;return n=document.createElement("div"),n.classList.add(ENTER_VR_CLASS),n.setAttribute(constants.AFRAME_INJECTED,""),t=document.createElement("button"),t.className=ENTER_VR_BTN_CLASS,t.setAttribute(constants.AFRAME_INJECTED,""),n.appendChild(t),t.addEventListener("click",e),n}function createOrientationModal(e){var t=document.createElement("div");t.className=ORIENTATION_MODAL_CLASS,t.classList.add(HIDDEN_CLASS),t.setAttribute(constants.AFRAME_INJECTED,"");var n=document.createElement("button");return n.setAttribute(constants.AFRAME_INJECTED,""),n.innerHTML="Exit VR",n.addEventListener("click",e),t.appendChild(n),t}var registerComponent=_dereq_("../../core/component").registerComponent,constants=_dereq_("../../constants/"),utils=_dereq_("../../utils/"),bind=utils.bind,ENTER_VR_CLASS="a-enter-vr",ENTER_VR_BTN_CLASS="a-enter-vr-button",HIDDEN_CLASS="a-hidden",ORIENTATION_MODAL_CLASS="a-orientation-modal";module.exports.Component=registerComponent("vr-mode-ui",{dependencies:["canvas"],schema:{enabled:{default:!0}},init:function(){var e=this,t=this.el;"false"!==utils.getUrlParameter("ui")&&(this.enterVR=bind(t.enterVR,t),this.exitVR=bind(t.exitVR,t),this.insideLoader=!1,this.enterVREl=null,this.orientationModalEl=null,t.addEventListener("enter-vr",bind(this.updateEnterVRInterface,this)),t.addEventListener("exit-vr",bind(this.updateEnterVRInterface,this)),window.addEventListener("message",function(t){"loaderReady"===t.data.type&&(e.insideLoader=!0,e.remove())}),window.addEventListener("orientationchange",bind(this.toggleOrientationModalIfNeeded,this)))},update:function(){var e=this.el;return!this.data.enabled||this.insideLoader||"false"===utils.getUrlParameter("ui")?this.remove():void(this.enterVREl||this.orientationModalEl||(this.enterVREl=createEnterVRButton(this.enterVR),e.appendChild(this.enterVREl),this.orientationModalEl=createOrientationModal(this.exitVR),e.appendChild(this.orientationModalEl),this.updateEnterVRInterface()))},remove:function(){[this.enterVREl,this.orientationModalEl].forEach(function(e){e&&e.parentNode.removeChild(e)})},updateEnterVRInterface:function(){this.toggleEnterVRButtonIfNeeded(),this.toggleOrientationModalIfNeeded()},toggleEnterVRButtonIfNeeded:function(){var e=this.el;this.enterVREl&&(e.is("vr-mode")?this.enterVREl.classList.add(HIDDEN_CLASS):this.enterVREl.classList.remove(HIDDEN_CLASS))},toggleOrientationModalIfNeeded:function(){var e=this.el,t=this.orientationModalEl;t&&e.isMobile&&(!utils.device.isLandscape()&&e.is("vr-mode")?t.classList.remove(HIDDEN_CLASS):t.classList.add(HIDDEN_CLASS))}}); },{"../../constants/":91,"../../core/component":100,"../../utils/":167}],84:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent,debug=_dereq_("../utils/debug"),bind=_dereq_("../utils/bind"),THREE=_dereq_("../lib/three"),warn=debug("components:sound:warn");module.exports.Component=registerComponent("sound",{schema:{autoplay:{default:!1},loop:{default:!1},on:{default:""},poolSize:{default:1},src:{type:"audio"},volume:{default:1}},multiple:!0,init:function(){this.listener=null,this.audioLoader=new THREE.AudioLoader,this.pool=new THREE.Group,this.playSound=bind(this.playSound,this)},update:function(e){var o=this.data,t=o.src!==e.src;if(t){if(!o.src)return void warn("Audio source was not specified with `src`");this.setupSound()}if(this.pool.children.forEach(function(e){e.autoplay=o.autoplay,e.setLoop(o.loop),e.setVolume(o.volume)}),o.on!==e.on&&this.updateEventListener(e.on),t){var n=this;this.audioLoader.load(o.src,function(e){n.pool.children.forEach(function(o){o.setBuffer(e)}),THREE.Cache.remove(o.src)})}},pause:function(){this.pauseSound(),this.removeEventListener()},play:function(){this.data.autoplay&&this.playSound(),this.updateEventListener()},remove:function(){this.removeEventListener(),this.el.removeObject3D(this.attrName);try{this.pool.children.forEach(function(e){e.disconnect()})}catch(e){warn("Audio source not properly disconnected")}},updateEventListener:function(e){var o=this.el;e&&o.removeEventListener(e,this.playSound),o.addEventListener(this.data.on,this.playSound)},removeEventListener:function(){this.el.removeEventListener(this.data.on,this.playSound)},setupSound:function(){var e=this.el,o=e.sceneEl;this.pool.children.length>0&&(this.stopSound(),e.removeObject3D("sound"));var t=this.listener=o.audioListener||new THREE.AudioListener;o.audioListener=t,o.camera&&o.camera.add(t),o.addEventListener("camera-set-active",function(e){e.detail.cameraEl.getObject3D("camera").add(t)}),this.pool=new THREE.Group;for(var n=0;n<this.data.poolSize;n++){var i=new THREE.PositionalAudio(t);this.pool.add(i)}e.setObject3D(this.attrName,this.pool),this.pool.children.forEach(function(o){o.onEnded=function(){o.isPlaying=!1,e.emit("sound-ended",{index:n})}})},pauseSound:function(){this.pool.children.forEach(function(e){e.source&&e.source.buffer&&e.isPlaying&&e.pause&&e.pause()})},playSound:function(){var e=!1;this.pool.children.forEach(function(o){if(!o.isPlaying&&o.buffer&&!e)return o.play(),void(e=!0)}),e||warn("All the sounds are playing. If you need to play more sounds simultaneously consider increasing the size of pool with the `poolSize` attribute.")},stopSound:function(){this.pool.children.forEach(function(e){e.source&&e.source.buffer&&e.stop()})}}); },{"../core/component":100,"../lib/three":146,"../utils/bind":161,"../utils/debug":163}],85:[function(_dereq_,module,exports){ function parseSide(e){switch(e){case"back":return THREE.BackSide;case"double":return THREE.DoubleSide;default:return THREE.FrontSide}}function coerceData(e){return e=utils.clone(e),void 0!==e.lineHeight&&(e.lineHeight=parseFloat(e.lineHeight),isFinite(e.lineHeight)||(e.lineHeight=void 0)),void 0!==e.width&&(e.width=parseFloat(e.width),isFinite(e.width)||(e.width=void 0)),e}function loadFont(e,t){return new Promise(function(r,o){loadBMFont(e,function(n,i){return n?(error("Error loading font",e),void o(n)):(e.indexOf("/Roboto-msdf.json")>=0&&(t=30),t&&i.chars.map(function(e){e.yoffset+=t}),void r(i))})})}function loadTexture(e){return new Promise(function(t,r){(new THREE.ImageLoader).load(e,function(e){t(e)},void 0,function(){error("Error loading font image",e),r(null)})})}function createShader(e,t,r){var o,n;return n=new shaders[t].Shader,n.el=e,n.init(r),n.update(r),o=n.material,o.transparent=r.transparent,{material:o,shader:n}}function updateBaseMaterial(e,t){e.side=t.side}function updateGeometry(e,t,r){e.update(utils.extend({},t,{font:r,width:computeWidth(t.wrapPixels,t.wrapCount,r.widthFactor),text:t.value.replace(/\\n/g,"\n").replace(/\\t/g,"\t"),lineHeight:t.lineHeight||r.common.lineHeight}))}function computeWidth(e,t,r){return e||(.5+t)*r}function computeFontWidthFactor(e){var t=0,r=0,o=0;return e.chars.map(function(e){t+=e.xadvance,e.id>=48&&e.id<=57&&(o++,r+=e.xadvance)}),o?r/o:t/e.chars.length}function PromiseCache(){var e=this.cache={};this.get=function(t,r){return t in e?e[t]:(e[t]=r(),e[t])}}var createTextGeometry=_dereq_("three-bmfont-text"),loadBMFont=_dereq_("load-bmfont"),path=_dereq_("path"),registerComponent=_dereq_("../core/component").registerComponent,coreShader=_dereq_("../core/shader"),THREE=_dereq_("../lib/three"),utils=_dereq_("../utils/"),error=utils.debug("components:text:error"),shaders=coreShader.shaders,warn=utils.debug("components:text:warn"),DEFAULT_WIDTH=1,MAX_ANISOTROPY=16,FONT_BASE_URL="https://cdn.aframe.io/fonts/",FONTS={aileronsemibold:FONT_BASE_URL+"Aileron-Semibold.fnt",dejavu:FONT_BASE_URL+"DejaVu-sdf.fnt",exo2bold:FONT_BASE_URL+"Exo2Bold.fnt",exo2semibold:FONT_BASE_URL+"Exo2SemiBold.fnt",kelsonsans:FONT_BASE_URL+"KelsonSans.fnt",monoid:FONT_BASE_URL+"Monoid.fnt",mozillavr:FONT_BASE_URL+"mozillavr.fnt",roboto:FONT_BASE_URL+"Roboto-msdf.json",sourcecodepro:FONT_BASE_URL+"SourceCodePro.fnt"},MSDF_FONTS=["roboto"],DEFAULT_FONT="roboto";module.exports.FONTS=FONTS;var cache=new PromiseCache,fontWidthFactors={};module.exports.Component=registerComponent("text",{multiple:!0,schema:{align:{type:"string",default:"left",oneOf:["left","right","center"]},alphaTest:{default:.5},anchor:{default:"center",oneOf:["left","right","center","align"]},baseline:{default:"center",oneOf:["top","center","bottom"]},color:{type:"color",default:"#FFF"},font:{type:"string",default:DEFAULT_FONT},fontImage:{type:"string"},height:{type:"number"},letterSpacing:{type:"number",default:0},lineHeight:{type:"number"},opacity:{type:"number",default:"1.0"},shader:{default:"sdf",oneOf:shaders},side:{default:"front",oneOf:["front","back","double"]},tabSize:{default:4},transparent:{default:!0},value:{type:"string"},whiteSpace:{default:"normal",oneOf:["normal","pre","nowrap"]},width:{type:"number"},wrapCount:{type:"number",default:40},wrapPixels:{type:"number"},yOffset:{type:"number",default:0},zOffset:{type:"number",default:.001}},init:function(){this.texture=new THREE.Texture,this.texture.anisotropy=MAX_ANISOTROPY,this.geometry=createTextGeometry(),this.createOrUpdateMaterial(),this.mesh=new THREE.Mesh(this.geometry,this.material),this.el.setObject3D(this.attrName,this.mesh)},update:function(e){var t=coerceData(this.data),r=this.currentFont;return this.createOrUpdateMaterial(),e.font!==t.font?void this.updateFont():void(r&&(updateGeometry(this.geometry,t,r),this.updateLayout(t)))},remove:function(){this.geometry.dispose(),this.geometry=null,this.el.removeObject3D(this.attrName),this.material.dispose(),this.material=null,this.texture.dispose(),this.texture=null,this.shaderObject&&delete this.shaderObject},createOrUpdateMaterial:function(){var e,t,r,o,n=this.data,i=this.material;return o=n.shader,MSDF_FONTS.indexOf(n.font)!==-1||n.font.indexOf("-msdf.")>=0?o="msdf":n.font in FONTS&&MSDF_FONTS.indexOf(n.font)===-1&&(o="sdf"),e=(this.shaderObject&&this.shaderObject.name)!==o,r={alphaTest:n.alphaTest,color:n.color,map:this.texture,opacity:n.opacity,side:parseSide(n.side),transparent:n.transparent},e?(t=createShader(this.el,o,r),this.material=t.material,this.shaderObject=t.shader,updateBaseMaterial(this.material,r),void(this.mesh&&(this.mesh.material=this.material))):(this.shaderObject.update(r),i.transparent=r.transparent,void updateBaseMaterial(i,r))},updateFont:function(){var e,t=this.data,r=this.el,o=this.geometry,n=this;t.font||warn("No font specified. Using the default font."),this.mesh.visible=!1,e=this.lookupFont(t.font||DEFAULT_FONT)||t.font,cache.get(e,function(){return loadFont(e,t.yOffset)}).then(function(i){var a,s;if(1!==i.pages.length)throw new Error("Currently only single-page bitmap fonts are supported.");fontWidthFactors[e]||(i.widthFactor=fontWidthFactors[i]=computeFontWidthFactor(i)),a=coerceData(t),updateGeometry(o,t,i),n.currentFont=i,n.updateLayout(a),s=t.fontImage||e.replace(/(\.fnt)|(\.json)/,".png")||path.dirname(t.font)+"/"+i.pages[0],cache.get(s,function(){return loadTexture(s)}).then(function(e){n.mesh.visible=!0,n.texture.image=e,n.texture.needsUpdate=!0,r.emit("textfontset",{font:t.font,fontObj:i})}).catch(function(e){throw error(e),e})}).catch(function(e){throw error(e),e})},updateLayout:function(e){var t,r,o,n,i,a,s,h,d=this.el,u=this.geometry,l=d.getAttribute("geometry"),c=u.layout,f=this.mesh;if(l=d.getAttribute("geometry"),a=e.width||l&&l.width||DEFAULT_WIDTH,n=computeWidth(e.wrapPixels,e.wrapCount,this.currentFont.widthFactor),i=a/n,o=i*(c.height+c.descender),l&&(l.width||d.setAttribute("geometry","width",a),l.height||d.setAttribute("geometry","height",o)),t="align"===e.anchor?e.align:e.anchor,"left"===t)s=0;else if("right"===t)s=-1*c.width;else{if("center"!==t)throw new TypeError("Invalid text.anchor property value",t);s=-1*c.width/2}if(r=e.baseline,"bottom"===r)h=0;else if("top"===r)h=-1*c.height+c.ascender;else{if("center"!==r)throw new TypeError("Invalid text.baseline property value",r);h=-1*c.height/2}f.position.x=s*i,f.position.y=h*i,f.position.z=e.zOffset,f.scale.set(i,-1*i,i),this.geometry.computeBoundingSphere()},lookupFont:function(e){return FONTS[e]}}); },{"../core/component":100,"../core/shader":109,"../lib/three":146,"../utils/":167,"load-bmfont":26,"path":8,"three-bmfont-text":38}],86:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three");module.exports.Component=registerComponent("tracked-controls",{schema:{controller:{default:0},id:{type:"string",default:""},idPrefix:{type:"string",default:""},rotationOffset:{default:0}},init:function(){this.buttonStates={},this.previousAxis=[],this.previousControllerPosition=new THREE.Vector3},update:function(){function t(t){return i.idPrefix?0===t.id.indexOf(i.idPrefix):t.id===i.id}var e=this.system.controllers,i=this.data;e=e.filter(t),this.controller=e[i.controller]},tick:function(t,e){var i=this.el.getObject3D("mesh");i&&i.update&&i.update(e/1e3),this.updatePose(),this.updateButtons()},updatePose:function(){var t=new THREE.Euler,e=new THREE.Vector3,i=new THREE.Quaternion,r=new THREE.Vector3,o=new THREE.Object3D,s=new THREE.Matrix4;return t.order="YXZ",function(){var n,a,u,h,d=this.el,l=this.system.vrDisplay;if(this.update(),n=this.controller){a=n.pose,u=a.orientation||[0,0,0,1],h=a.position||[0,0,0],i.fromArray(u),o.quaternion.fromArray(u),o.position.fromArray(h),o.updateMatrix(),l&&l.stageParameters&&(s.fromArray(l.stageParameters.sittingToStandingTransform),o.applyMatrix(s)),t.setFromRotationMatrix(o.matrix),e.setFromMatrixPosition(o.matrix),d.setAttribute("rotation",{x:THREE.Math.radToDeg(t.x),y:THREE.Math.radToDeg(t.y),z:THREE.Math.radToDeg(t.z)+this.data.rotationOffset}),r.copy(e).sub(this.previousControllerPosition),this.previousControllerPosition.copy(e);var c=d.getAttribute("position");d.setAttribute("position",{x:c.x+r.x,y:c.y+r.y,z:c.z+r.z})}}}(),updateButtons:function(){var t,e,i=this.controller;if(this.controller){for(t=0;t<i.buttons.length;++t)e=i.buttons[t],this.handleButton(t,e);this.handleAxes(i.axes)}},handleAxes:function(t){var e,i=this.previousAxis,r=!1;for(e=0;e<t.length;++e)if(i[e]!==t[e]){r=!0;break}r&&(this.previousAxis=t.slice(),this.el.emit("axismove",{axis:this.previousAxis}))},handleButton:function(t,e){var i=!1;i=i||this.handlePress(t,e),i=i||this.handleTouch(t,e),i=i||this.handleValue(t,e),i&&this.el.emit("buttonchanged",{id:t,state:e})},handlePress:function(t,e){var i,r=this.buttonStates,o=r[t]=r[t]||{};return e.pressed!==o.pressed&&(i=e.pressed?"down":"up",this.el.emit("button"+i,{id:t}),o.pressed=e.pressed,!0)},handleTouch:function(t,e){var i,r=this.buttonStates,o=r[t]=r[t]||{};return e.touched!==o.touched&&(i=e.touched?"start":"end",o.touched=e.touched,this.el.emit("touch"+i,{id:t,state:o}),!0)},handleValue:function(t,e){var i=this.buttonStates,r=i[t]=i[t]||{};return e.value!==r.value&&(r.value=e.value,!0)}}); },{"../core/component":100,"../lib/three":146}],87:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent;module.exports.Component=registerComponent("visible",{schema:{default:!0},update:function(){this.el.object3D.visible=this.data}}); },{"../core/component":100}],88:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent,bind=_dereq_("../utils/bind"),isControllerPresent=_dereq_("../utils/tracked-controls").isControllerPresent,VIVE_CONTROLLER_MODEL_OBJ_URL="https://cdn.aframe.io/controllers/vive/vr_controller_vive.obj",VIVE_CONTROLLER_MODEL_OBJ_MTL="https://cdn.aframe.io/controllers/vive/vr_controller_vive.mtl",GAMEPAD_ID_PREFIX="OpenVR ";module.exports.Component=registerComponent("vive-controls",{schema:{hand:{default:"left"},buttonColor:{type:"color",default:"#FAFAFA"},buttonHighlightColor:{type:"color",default:"#22D1EE"},model:{default:!0},rotationOffset:{default:0}},mapping:{axis0:"trackpad",axis1:"trackpad",button0:"trackpad",button1:"trigger",button2:"grip",button3:"menu",button4:"system"},bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this),this.onGamepadConnected=bind(this.onGamepadConnected,this),this.onGamepadDisconnected=bind(this.onGamepadDisconnected,this)},init:function(){var t=this;this.animationActive="pointing",this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){t.onButtonEvent(e.detail.id,"down")},this.onButtonUp=function(e){t.onButtonEvent(e.detail.id,"up")},this.onButtonTouchStart=function(e){t.onButtonEvent(e.detail.id,"touchstart")},this.onButtonTouchEnd=function(e){t.onButtonEvent(e.detail.id,"touchend")},this.controllerPresent=!1,this.everGotGamepadEvent=!1,this.lastControllerCheck=0,this.bindMethods(),this.isControllerPresent=isControllerPresent},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("model-loaded",this.onModelLoaded)},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("model-loaded",this.onModelLoaded)},checkIfControllerPresent:function(){var t=this.data,e="right"===t.hand?0:"left"===t.hand?1:2,n=this.isControllerPresent(this.el.sceneEl,GAMEPAD_ID_PREFIX,{index:e});n!==this.controllerPresent&&(this.controllerPresent=n,n&&this.injectTrackedControls())},onGamepadConnected:function(t){this.checkIfControllerPresent()},onGamepadDisconnected:function(t){this.checkIfControllerPresent()},play:function(){this.checkIfControllerPresent(),window.addEventListener("gamepadconnected",this.onGamepadConnected,!1),window.addEventListener("gamepaddisconnected",this.onGamepadDisconnected,!1),this.addControllersUpdateListener(),this.addEventListeners()},pause:function(){window.removeEventListener("gamepadconnected",this.onGamepadConnected,!1),window.removeEventListener("gamepaddisconnected",this.onGamepadDisconnected,!1),this.removeControllersUpdateListener(),this.removeEventListeners()},injectTrackedControls:function(){var t=this.el,e=this.data,n="right"===e.hand?0:"left"===e.hand?1:2;t.setAttribute("tracked-controls",{idPrefix:GAMEPAD_ID_PREFIX,controller:n,rotationOffset:e.rotationOffset}),this.data.model&&this.el.setAttribute("obj-model",{obj:VIVE_CONTROLLER_MODEL_OBJ_URL,mtl:VIVE_CONTROLLER_MODEL_OBJ_MTL})},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.everGotGamepadEvent||this.checkIfControllerPresent()},onButtonChanged:function(t){var e,n=this.mapping["button"+t.detail.id],o=this.buttonMeshes;n&&o&&"trigger"===n&&(e=t.detail.state.value,o.trigger.rotation.x=-e*(Math.PI/12))},onModelLoaded:function(t){var e,n=t.detail.model;this.data.model&&(e=this.buttonMeshes={},e.grip={left:n.getObjectByName("leftgrip"),right:n.getObjectByName("rightgrip")},e.menu=n.getObjectByName("menubutton"),e.system=n.getObjectByName("systembutton"),e.trackpad=n.getObjectByName("touchpad"),e.trigger=n.getObjectByName("trigger"),n.position.set(0,-.015,.04))},onButtonEvent:function(t,e){var n,o=this.mapping["button"+t];if(Array.isArray(o))for(n=0;n<o.length;n++)this.el.emit(o[n]+e);else this.el.emit(o+e);this.updateModel(o,e)},updateModel:function(t,e){var n;if(this.data.model)if(Array.isArray(t))for(n=0;n<t.length;n++)this.updateButtonModel(t[n],e);else this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var n="up"===e?this.data.buttonColor:this.data.buttonHighlightColor,o=this.buttonMeshes;if(o)return"grip"===t?(o.grip.left.material.color.set(n),void o.grip.right.material.color.set(n)):void o[t].material.color.set(n)}}); },{"../core/component":100,"../utils/bind":161,"../utils/tracked-controls":171}],89:[func
    https://whatsonchain.com/tx/f0b32ff6dfe09a1bb953b7b6c8620c14931e3f0f7f2611843f570f05e78e679b
    Partial data displayed. To get full data click on Download.