diff --git a/components/orbit-controls/dist/aframe-orbit-controls.js b/components/orbit-controls/dist/aframe-orbit-controls.js index 3c520303..07926548 100644 --- a/components/orbit-controls/dist/aframe-orbit-controls.js +++ b/components/orbit-controls/dist/aframe-orbit-controls.js @@ -1573,6 +1573,12 @@ AFRAME.registerComponent('orbit-controls', { this.target = new THREE.Vector3(); this.cursor = new THREE.Vector3(); el.getObject3D('camera').position.copy(this.data.initialPosition); + if (el.hasAttribute('look-controls')) { + el.setAttribute('look-controls', 'enabled', false); + } + if (el.hasAttribute('wasd-controls')) { + el.setAttribute('wasd-controls', 'enabled', false); + } }, pause: function () { @@ -1662,6 +1668,12 @@ AFRAME.registerComponent('orbit-controls', { remove: function() { this.controls.reset(); this.controls.dispose(); + if (this.el.hasAttribute('look-controls')) { + this.el.setAttribute('look-controls', 'enabled', true); + } + if (this.el.hasAttribute('wasd-controls')) { + this.el.setAttribute('wasd-controls', 'enabled', true); + } this.el.sceneEl.removeEventListener('enter-vr', this.onEnterVR); this.el.sceneEl.removeEventListener('exit-vr', this.onExitVR); diff --git a/components/orbit-controls/dist/aframe-orbit-controls.min.js b/components/orbit-controls/dist/aframe-orbit-controls.min.js index e80d476a..44062af0 100644 --- a/components/orbit-controls/dist/aframe-orbit-controls.min.js +++ b/components/orbit-controls/dist/aframe-orbit-controls.min.js @@ -1 +1 @@ -(function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId]){return installedModules[moduleId].exports}var module=installedModules[moduleId]={i:moduleId,l:false,exports:{}};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.l=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.i=function(value){return value};__webpack_require__.d=function(exports,name,getter){if(!__webpack_require__.o(exports,name)){Object.defineProperty(exports,name,{configurable:false,enumerable:true,get:getter})}};__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module["default"]}:function getModuleExports(){return module};__webpack_require__.d(getter,"a",getter);return getter};__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)};__webpack_require__.p="";return __webpack_require__(__webpack_require__.s=1)})([function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",function(){return OrbitControls});const{EventDispatcher:EventDispatcher,MOUSE:MOUSE,Quaternion:Quaternion,Spherical:Spherical,TOUCH:TOUCH,Vector2:Vector2,Vector3:Vector3,Plane:Plane,Ray:Ray,MathUtils:MathUtils}=THREE;const _changeEvent={type:"change"};const _startEvent={type:"start"};const _endEvent={type:"end"};const _ray=new Ray;const _plane=new Plane;const TILT_LIMIT=Math.cos(70*MathUtils.DEG2RAD);class OrbitControls extends EventDispatcher{constructor(object,domElement){super();this.object=object;this.domElement=domElement;this.domElement.style.touchAction="none";this.enabled=true;this.target=new Vector3;this.cursor=new Vector3;this.minDistance=0;this.maxDistance=Infinity;this.minZoom=0;this.maxZoom=Infinity;this.minTargetRadius=0;this.maxTargetRadius=Infinity;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minAzimuthAngle=-Infinity;this.maxAzimuthAngle=Infinity;this.enableDamping=false;this.dampingFactor=.05;this.enableZoom=true;this.zoomSpeed=1;this.enableRotate=true;this.rotateSpeed=1;this.enablePan=true;this.panSpeed=1;this.screenSpacePanning=true;this.keyPanSpeed=7;this.zoomToCursor=false;this.autoRotate=false;this.autoRotateSpeed=2;this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"};this.mouseButtons={LEFT:MOUSE.ROTATE,MIDDLE:MOUSE.DOLLY,RIGHT:MOUSE.PAN};this.touches={ONE:TOUCH.ROTATE,TWO:TOUCH.DOLLY_PAN};this.target0=this.target.clone();this.position0=this.object.position.clone();this.zoom0=this.object.zoom;this._domElementKeyEvents=null;this.getPolarAngle=function(){return spherical.phi};this.getAzimuthalAngle=function(){return spherical.theta};this.getDistance=function(){return this.object.position.distanceTo(this.target)};this.listenToKeyEvents=function(domElement){domElement.addEventListener("keydown",onKeyDown);this._domElementKeyEvents=domElement};this.stopListenToKeyEvents=function(){this._domElementKeyEvents.removeEventListener("keydown",onKeyDown);this._domElementKeyEvents=null};this.saveState=function(){scope.target0.copy(scope.target);scope.position0.copy(scope.object.position);scope.zoom0=scope.object.zoom};this.reset=function(){scope.target.copy(scope.target0);scope.object.position.copy(scope.position0);scope.object.zoom=scope.zoom0;scope.object.updateProjectionMatrix();scope.dispatchEvent(_changeEvent);scope.update();state=STATE.NONE};this.update=function(){const offset=new Vector3;const quat=(new Quaternion).setFromUnitVectors(object.up,new Vector3(0,1,0));const quatInverse=quat.clone().invert();const lastPosition=new Vector3;const lastQuaternion=new Quaternion;const lastTargetPosition=new Vector3;const twoPI=2*Math.PI;return function update(deltaTime=null){const position=scope.object.position;offset.copy(position).sub(scope.target);offset.applyQuaternion(quat);spherical.setFromVector3(offset);if(scope.autoRotate&&state===STATE.NONE){rotateLeft(getAutoRotationAngle(deltaTime))}if(scope.enableDamping){spherical.theta+=sphericalDelta.theta*scope.dampingFactor;spherical.phi+=sphericalDelta.phi*scope.dampingFactor}else{spherical.theta+=sphericalDelta.theta;spherical.phi+=sphericalDelta.phi}let min=scope.minAzimuthAngle;let max=scope.maxAzimuthAngle;if(isFinite(min)&&isFinite(max)){if(min<-Math.PI)min+=twoPI;else if(min>Math.PI)min-=twoPI;if(max<-Math.PI)max+=twoPI;else if(max>Math.PI)max-=twoPI;if(min<=max){spherical.theta=Math.max(min,Math.min(max,spherical.theta))}else{spherical.theta=spherical.theta>(min+max)/2?Math.max(min,spherical.theta):Math.min(max,spherical.theta)}}spherical.phi=Math.max(scope.minPolarAngle,Math.min(scope.maxPolarAngle,spherical.phi));spherical.makeSafe();if(scope.enableDamping===true){scope.target.addScaledVector(panOffset,scope.dampingFactor)}else{scope.target.add(panOffset)}scope.target.sub(scope.cursor);scope.target.clampLength(scope.minTargetRadius,scope.maxTargetRadius);scope.target.add(scope.cursor);if(scope.zoomToCursor&&performCursorZoom||scope.object.isOrthographicCamera){spherical.radius=clampDistance(spherical.radius)}else{spherical.radius=clampDistance(spherical.radius*scale)}offset.setFromSpherical(spherical);offset.applyQuaternion(quatInverse);position.copy(scope.target).add(offset);scope.object.lookAt(scope.target);if(scope.enableDamping===true){sphericalDelta.theta*=1-scope.dampingFactor;sphericalDelta.phi*=1-scope.dampingFactor;panOffset.multiplyScalar(1-scope.dampingFactor)}else{sphericalDelta.set(0,0,0);panOffset.set(0,0,0)}let zoomChanged=false;if(scope.zoomToCursor&&performCursorZoom){let newRadius=null;if(scope.object.isPerspectiveCamera){const prevRadius=offset.length();newRadius=clampDistance(prevRadius*scale);const radiusDelta=prevRadius-newRadius;scope.object.position.addScaledVector(dollyDirection,radiusDelta);scope.object.updateMatrixWorld()}else if(scope.object.isOrthographicCamera){const mouseBefore=new Vector3(mouse.x,mouse.y,0);mouseBefore.unproject(scope.object);scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom/scale));scope.object.updateProjectionMatrix();zoomChanged=true;const mouseAfter=new Vector3(mouse.x,mouse.y,0);mouseAfter.unproject(scope.object);scope.object.position.sub(mouseAfter).add(mouseBefore);scope.object.updateMatrixWorld();newRadius=offset.length()}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.");scope.zoomToCursor=false}if(newRadius!==null){if(this.screenSpacePanning){scope.target.set(0,0,-1).transformDirection(scope.object.matrix).multiplyScalar(newRadius).add(scope.object.position)}else{_ray.origin.copy(scope.object.position);_ray.direction.set(0,0,-1).transformDirection(scope.object.matrix);if(Math.abs(scope.object.up.dot(_ray.direction))EPS||8*(1-lastQuaternion.dot(scope.object.quaternion))>EPS||lastTargetPosition.distanceToSquared(scope.target)>0){scope.dispatchEvent(_changeEvent);lastPosition.copy(scope.object.position);lastQuaternion.copy(scope.object.quaternion);lastTargetPosition.copy(scope.target);zoomChanged=false;return true}return false}}();this.dispose=function(){scope.domElement.removeEventListener("contextmenu",onContextMenu);scope.domElement.removeEventListener("pointerdown",onPointerDown);scope.domElement.removeEventListener("pointercancel",onPointerUp);scope.domElement.removeEventListener("wheel",onMouseWheel);scope.domElement.removeEventListener("pointermove",onPointerMove);scope.domElement.removeEventListener("pointerup",onPointerUp);if(scope._domElementKeyEvents!==null){scope._domElementKeyEvents.removeEventListener("keydown",onKeyDown);scope._domElementKeyEvents=null}};const scope=this;const STATE={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let state=STATE.NONE;const EPS=1e-6;const spherical=new Spherical;const sphericalDelta=new Spherical;let scale=1;const panOffset=new Vector3;const rotateStart=new Vector2;const rotateEnd=new Vector2;const rotateDelta=new Vector2;const panStart=new Vector2;const panEnd=new Vector2;const panDelta=new Vector2;const dollyStart=new Vector2;const dollyEnd=new Vector2;const dollyDelta=new Vector2;const dollyDirection=new Vector3;const mouse=new Vector2;let performCursorZoom=false;const pointers=[];const pointerPositions={};function getAutoRotationAngle(deltaTime){if(deltaTime!==null){return 2*Math.PI/60*scope.autoRotateSpeed*deltaTime}else{return 2*Math.PI/60/60*scope.autoRotateSpeed}}function getZoomScale(){return Math.pow(.95,scope.zoomSpeed)}function rotateLeft(angle){sphericalDelta.theta-=angle}function rotateUp(angle){sphericalDelta.phi-=angle}const panLeft=function(){const v=new Vector3;return function panLeft(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,0);v.multiplyScalar(-distance);panOffset.add(v)}}();const panUp=function(){const v=new Vector3;return function panUp(distance,objectMatrix){if(scope.screenSpacePanning===true){v.setFromMatrixColumn(objectMatrix,1)}else{v.setFromMatrixColumn(objectMatrix,0);v.crossVectors(scope.object.up,v)}v.multiplyScalar(distance);panOffset.add(v)}}();const pan=function(){const offset=new Vector3;return function pan(deltaX,deltaY){const element=scope.domElement;if(scope.object.isPerspectiveCamera){const position=scope.object.position;offset.copy(position).sub(scope.target);let targetDistance=offset.length();targetDistance*=Math.tan(scope.object.fov/2*Math.PI/180);panLeft(2*deltaX*targetDistance/element.clientHeight,scope.object.matrix);panUp(2*deltaY*targetDistance/element.clientHeight,scope.object.matrix)}else if(scope.object.isOrthographicCamera){panLeft(deltaX*(scope.object.right-scope.object.left)/scope.object.zoom/element.clientWidth,scope.object.matrix);panUp(deltaY*(scope.object.top-scope.object.bottom)/scope.object.zoom/element.clientHeight,scope.object.matrix)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.");scope.enablePan=false}}}();function dollyOut(dollyScale){if(scope.object.isPerspectiveCamera||scope.object.isOrthographicCamera){scale/=dollyScale}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function dollyIn(dollyScale){if(scope.object.isPerspectiveCamera||scope.object.isOrthographicCamera){scale*=dollyScale}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function updateMouseParameters(event){if(!scope.zoomToCursor){return}performCursorZoom=true;const rect=scope.domElement.getBoundingClientRect();const x=event.clientX-rect.left;const y=event.clientY-rect.top;const w=rect.width;const h=rect.height;mouse.x=x/w*2-1;mouse.y=-(y/h)*2+1;dollyDirection.set(mouse.x,mouse.y,1).unproject(scope.object).sub(scope.object.position).normalize()}function clampDistance(dist){return Math.max(scope.minDistance,Math.min(scope.maxDistance,dist))}function handleMouseDownRotate(event){rotateStart.set(event.clientX,event.clientY)}function handleMouseDownDolly(event){updateMouseParameters(event);dollyStart.set(event.clientX,event.clientY)}function handleMouseDownPan(event){panStart.set(event.clientX,event.clientY)}function handleMouseMoveRotate(event){rotateEnd.set(event.clientX,event.clientY);rotateDelta.subVectors(rotateEnd,rotateStart).multiplyScalar(scope.rotateSpeed);const element=scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientHeight);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight);rotateStart.copy(rotateEnd);scope.update()}function handleMouseMoveDolly(event){dollyEnd.set(event.clientX,event.clientY);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyOut(getZoomScale())}else if(dollyDelta.y<0){dollyIn(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleMouseMovePan(event){panEnd.set(event.clientX,event.clientY);panDelta.subVectors(panEnd,panStart).multiplyScalar(scope.panSpeed);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleMouseWheel(event){updateMouseParameters(event);if(event.deltaY<0){dollyIn(getZoomScale())}else if(event.deltaY>0){dollyOut(getZoomScale())}scope.update()}function handleKeyDown(event){let needsUpdate=false;switch(event.code){case scope.keys.UP:if(event.ctrlKey||event.metaKey||event.shiftKey){rotateUp(2*Math.PI*scope.rotateSpeed/scope.domElement.clientHeight)}else{pan(0,scope.keyPanSpeed)}needsUpdate=true;break;case scope.keys.BOTTOM:if(event.ctrlKey||event.metaKey||event.shiftKey){rotateUp(-2*Math.PI*scope.rotateSpeed/scope.domElement.clientHeight)}else{pan(0,-scope.keyPanSpeed)}needsUpdate=true;break;case scope.keys.LEFT:if(event.ctrlKey||event.metaKey||event.shiftKey){rotateLeft(2*Math.PI*scope.rotateSpeed/scope.domElement.clientHeight)}else{pan(scope.keyPanSpeed,0)}needsUpdate=true;break;case scope.keys.RIGHT:if(event.ctrlKey||event.metaKey||event.shiftKey){rotateLeft(-2*Math.PI*scope.rotateSpeed/scope.domElement.clientHeight)}else{pan(-scope.keyPanSpeed,0)}needsUpdate=true;break}if(needsUpdate){event.preventDefault();scope.update()}}function handleTouchStartRotate(){if(pointers.length===1){rotateStart.set(pointers[0].pageX,pointers[0].pageY)}else{const x=.5*(pointers[0].pageX+pointers[1].pageX);const y=.5*(pointers[0].pageY+pointers[1].pageY);rotateStart.set(x,y)}}function handleTouchStartPan(){if(pointers.length===1){panStart.set(pointers[0].pageX,pointers[0].pageY)}else{const x=.5*(pointers[0].pageX+pointers[1].pageX);const y=.5*(pointers[0].pageY+pointers[1].pageY);panStart.set(x,y)}}function handleTouchStartDolly(){const dx=pointers[0].pageX-pointers[1].pageX;const dy=pointers[0].pageY-pointers[1].pageY;const distance=Math.sqrt(dx*dx+dy*dy);dollyStart.set(0,distance)}function handleTouchStartDollyPan(){if(scope.enableZoom)handleTouchStartDolly();if(scope.enablePan)handleTouchStartPan()}function handleTouchStartDollyRotate(){if(scope.enableZoom)handleTouchStartDolly();if(scope.enableRotate)handleTouchStartRotate()}function handleTouchMoveRotate(event){if(pointers.length==1){rotateEnd.set(event.pageX,event.pageY)}else{const position=getSecondPointerPosition(event);const x=.5*(event.pageX+position.x);const y=.5*(event.pageY+position.y);rotateEnd.set(x,y)}rotateDelta.subVectors(rotateEnd,rotateStart).multiplyScalar(scope.rotateSpeed);const element=scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientHeight);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight);rotateStart.copy(rotateEnd)}function handleTouchMovePan(event){if(pointers.length===1){panEnd.set(event.pageX,event.pageY)}else{const position=getSecondPointerPosition(event);const x=.5*(event.pageX+position.x);const y=.5*(event.pageY+position.y);panEnd.set(x,y)}panDelta.subVectors(panEnd,panStart).multiplyScalar(scope.panSpeed);pan(panDelta.x,panDelta.y);panStart.copy(panEnd)}function handleTouchMoveDolly(event){const position=getSecondPointerPosition(event);const dx=event.pageX-position.x;const dy=event.pageY-position.y;const distance=Math.sqrt(dx*dx+dy*dy);dollyEnd.set(0,distance);dollyDelta.set(0,Math.pow(dollyEnd.y/dollyStart.y,scope.zoomSpeed));dollyOut(dollyDelta.y);dollyStart.copy(dollyEnd)}function handleTouchMoveDollyPan(event){if(scope.enableZoom)handleTouchMoveDolly(event);if(scope.enablePan)handleTouchMovePan(event)}function handleTouchMoveDollyRotate(event){if(scope.enableZoom)handleTouchMoveDolly(event);if(scope.enableRotate)handleTouchMoveRotate(event)}function onPointerDown(event){if(scope.enabled===false)return;if(pointers.length===0){scope.domElement.setPointerCapture(event.pointerId);scope.domElement.addEventListener("pointermove",onPointerMove);scope.domElement.addEventListener("pointerup",onPointerUp)}addPointer(event);if(event.pointerType==="touch"){onTouchStart(event)}else{onMouseDown(event)}}function onPointerMove(event){if(scope.enabled===false)return;if(event.pointerType==="touch"){onTouchMove(event)}else{onMouseMove(event)}}function onPointerUp(event){removePointer(event);if(pointers.length===0){scope.domElement.releasePointerCapture(event.pointerId);scope.domElement.removeEventListener("pointermove",onPointerMove);scope.domElement.removeEventListener("pointerup",onPointerUp)}scope.dispatchEvent(_endEvent);state=STATE.NONE}function onMouseDown(event){let mouseAction;switch(event.button){case 0:mouseAction=scope.mouseButtons.LEFT;break;case 1:mouseAction=scope.mouseButtons.MIDDLE;break;case 2:mouseAction=scope.mouseButtons.RIGHT;break;default:mouseAction=-1}switch(mouseAction){case MOUSE.DOLLY:if(scope.enableZoom===false)return;handleMouseDownDolly(event);state=STATE.DOLLY;break;case MOUSE.ROTATE:if(event.ctrlKey||event.metaKey||event.shiftKey){if(scope.enablePan===false)return;handleMouseDownPan(event);state=STATE.PAN}else{if(scope.enableRotate===false)return;handleMouseDownRotate(event);state=STATE.ROTATE}break;case MOUSE.PAN:if(event.ctrlKey||event.metaKey||event.shiftKey){if(scope.enableRotate===false)return;handleMouseDownRotate(event);state=STATE.ROTATE}else{if(scope.enablePan===false)return;handleMouseDownPan(event);state=STATE.PAN}break;default:state=STATE.NONE}if(state!==STATE.NONE){scope.dispatchEvent(_startEvent)}}function onMouseMove(event){switch(state){case STATE.ROTATE:if(scope.enableRotate===false)return;handleMouseMoveRotate(event);break;case STATE.DOLLY:if(scope.enableZoom===false)return;handleMouseMoveDolly(event);break;case STATE.PAN:if(scope.enablePan===false)return;handleMouseMovePan(event);break}}function onMouseWheel(event){if(scope.enabled===false||scope.enableZoom===false||state!==STATE.NONE)return;event.preventDefault();scope.dispatchEvent(_startEvent);handleMouseWheel(event);scope.dispatchEvent(_endEvent)}function onKeyDown(event){if(scope.enabled===false||scope.enablePan===false)return;handleKeyDown(event)}function onTouchStart(event){trackPointer(event);switch(pointers.length){case 1:switch(scope.touches.ONE){case TOUCH.ROTATE:if(scope.enableRotate===false)return;handleTouchStartRotate();state=STATE.TOUCH_ROTATE;break;case TOUCH.PAN:if(scope.enablePan===false)return;handleTouchStartPan();state=STATE.TOUCH_PAN;break;default:state=STATE.NONE}break;case 2:switch(scope.touches.TWO){case TOUCH.DOLLY_PAN:if(scope.enableZoom===false&&scope.enablePan===false)return;handleTouchStartDollyPan();state=STATE.TOUCH_DOLLY_PAN;break;case TOUCH.DOLLY_ROTATE:if(scope.enableZoom===false&&scope.enableRotate===false)return;handleTouchStartDollyRotate();state=STATE.TOUCH_DOLLY_ROTATE;break;default:state=STATE.NONE}break;default:state=STATE.NONE}if(state!==STATE.NONE){scope.dispatchEvent(_startEvent)}}function onTouchMove(event){trackPointer(event);switch(state){case STATE.TOUCH_ROTATE:if(scope.enableRotate===false)return;handleTouchMoveRotate(event);scope.update();break;case STATE.TOUCH_PAN:if(scope.enablePan===false)return;handleTouchMovePan(event);scope.update();break;case STATE.TOUCH_DOLLY_PAN:if(scope.enableZoom===false&&scope.enablePan===false)return;handleTouchMoveDollyPan(event);scope.update();break;case STATE.TOUCH_DOLLY_ROTATE:if(scope.enableZoom===false&&scope.enableRotate===false)return;handleTouchMoveDollyRotate(event);scope.update();break;default:state=STATE.NONE}}function onContextMenu(event){if(scope.enabled===false)return;event.preventDefault()}function addPointer(event){pointers.push(event)}function removePointer(event){delete pointerPositions[event.pointerId];for(let i=0;i{document.body.style.cursor="grabbing"});document.addEventListener("mouseup",()=>{document.body.style.cursor="grab"});this.target=new THREE.Vector3;this.cursor=new THREE.Vector3;el.getObject3D("camera").position.copy(this.data.initialPosition)},pause:function(){this.controls.dispose()},play:function(){const el=this.el;this.controls=new THREE.OrbitControls(el.getObject3D("camera"),el.sceneEl.renderer.domElement);this.update();this.controls.saveState()},onEnterVR:function(){var el=this.el;if(!AFRAME.utils.device.checkHeadsetConnected()&&!AFRAME.utils.device.isMobile()){return}this.controls.enabled=false;if(el.hasAttribute("look-controls")){el.setAttribute("look-controls","enabled",true);this.oldPosition.copy(el.getObject3D("camera").position);el.getObject3D("camera").position.set(0,0,0)}},onExitVR:function(){var el=this.el;if(!AFRAME.utils.device.checkHeadsetConnected()&&!AFRAME.utils.device.isMobile()){return}this.controls.enabled=true;el.getObject3D("camera").position.copy(this.oldPosition);if(el.hasAttribute("look-controls")){el.setAttribute("look-controls","enabled",false)}},bindMethods:function(){this.onEnterVR=bind(this.onEnterVR,this);this.onExitVR=bind(this.onExitVR,this)},update:function(oldData){var controls=this.controls;var data=this.data;if(!controls){return}controls.target=this.target.copy(data.target);controls.cursor=this.cursor.copy(data.cursor);controls.autoRotate=data.autoRotate;controls.autoRotateSpeed=data.autoRotateSpeed;controls.dampingFactor=data.dampingFactor;controls.enabled=data.enabled;controls.enableDamping=data.enableDamping;controls.enablePan=data.enablePan;controls.enableRotate=data.enableRotate;controls.enableZoom=data.enableZoom;controls.keyPanSpeed=data.keyPanSpeed;controls.maxPolarAngle=THREE.MathUtils.degToRad(data.maxPolarAngle);controls.maxAzimuthAngle=THREE.MathUtils.degToRad(data.maxAzimuthAngle);controls.maxDistance=data.maxDistance;controls.minDistance=data.minDistance;controls.minPolarAngle=THREE.MathUtils.degToRad(data.minPolarAngle);controls.minTargetRadius=data.minTargetRadius;controls.maxTargetRadius=data.maxTargetRadius;controls.minAzimuthAngle=THREE.MathUtils.degToRad(data.minAzimuthAngle);controls.minZoom=data.minZoom;controls.maxZoom=data.maxZoom;controls.panSpeed=data.panSpeed;controls.rotateSpeed=data.rotateSpeed;controls.screenSpacePanning=data.screenSpacePanning;controls.zoomSpeed=data.zoomSpeed;controls.zoomToCursor=data.zoomToCursor},tick:function(t,dt){var controls=this.controls;var data=this.data;if(!data.enabled){return}if(controls.enabled&&(controls.enableDamping||controls.autoRotate)){this.controls.update(dt/1e3)}},remove:function(){this.controls.reset();this.controls.dispose();this.el.sceneEl.removeEventListener("enter-vr",this.onEnterVR);this.el.sceneEl.removeEventListener("exit-vr",this.onExitVR)}})}]); +(function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId]){return installedModules[moduleId].exports}var module=installedModules[moduleId]={i:moduleId,l:false,exports:{}};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.l=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.i=function(value){return value};__webpack_require__.d=function(exports,name,getter){if(!__webpack_require__.o(exports,name)){Object.defineProperty(exports,name,{configurable:false,enumerable:true,get:getter})}};__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module["default"]}:function getModuleExports(){return module};__webpack_require__.d(getter,"a",getter);return getter};__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)};__webpack_require__.p="";return __webpack_require__(__webpack_require__.s=1)})([function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",function(){return OrbitControls});const{EventDispatcher:EventDispatcher,MOUSE:MOUSE,Quaternion:Quaternion,Spherical:Spherical,TOUCH:TOUCH,Vector2:Vector2,Vector3:Vector3,Plane:Plane,Ray:Ray,MathUtils:MathUtils}=THREE;const _changeEvent={type:"change"};const _startEvent={type:"start"};const _endEvent={type:"end"};const _ray=new Ray;const _plane=new Plane;const TILT_LIMIT=Math.cos(70*MathUtils.DEG2RAD);class OrbitControls extends EventDispatcher{constructor(object,domElement){super();this.object=object;this.domElement=domElement;this.domElement.style.touchAction="none";this.enabled=true;this.target=new Vector3;this.cursor=new Vector3;this.minDistance=0;this.maxDistance=Infinity;this.minZoom=0;this.maxZoom=Infinity;this.minTargetRadius=0;this.maxTargetRadius=Infinity;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minAzimuthAngle=-Infinity;this.maxAzimuthAngle=Infinity;this.enableDamping=false;this.dampingFactor=.05;this.enableZoom=true;this.zoomSpeed=1;this.enableRotate=true;this.rotateSpeed=1;this.enablePan=true;this.panSpeed=1;this.screenSpacePanning=true;this.keyPanSpeed=7;this.zoomToCursor=false;this.autoRotate=false;this.autoRotateSpeed=2;this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"};this.mouseButtons={LEFT:MOUSE.ROTATE,MIDDLE:MOUSE.DOLLY,RIGHT:MOUSE.PAN};this.touches={ONE:TOUCH.ROTATE,TWO:TOUCH.DOLLY_PAN};this.target0=this.target.clone();this.position0=this.object.position.clone();this.zoom0=this.object.zoom;this._domElementKeyEvents=null;this.getPolarAngle=function(){return spherical.phi};this.getAzimuthalAngle=function(){return spherical.theta};this.getDistance=function(){return this.object.position.distanceTo(this.target)};this.listenToKeyEvents=function(domElement){domElement.addEventListener("keydown",onKeyDown);this._domElementKeyEvents=domElement};this.stopListenToKeyEvents=function(){this._domElementKeyEvents.removeEventListener("keydown",onKeyDown);this._domElementKeyEvents=null};this.saveState=function(){scope.target0.copy(scope.target);scope.position0.copy(scope.object.position);scope.zoom0=scope.object.zoom};this.reset=function(){scope.target.copy(scope.target0);scope.object.position.copy(scope.position0);scope.object.zoom=scope.zoom0;scope.object.updateProjectionMatrix();scope.dispatchEvent(_changeEvent);scope.update();state=STATE.NONE};this.update=function(){const offset=new Vector3;const quat=(new Quaternion).setFromUnitVectors(object.up,new Vector3(0,1,0));const quatInverse=quat.clone().invert();const lastPosition=new Vector3;const lastQuaternion=new Quaternion;const lastTargetPosition=new Vector3;const twoPI=2*Math.PI;return function update(deltaTime=null){const position=scope.object.position;offset.copy(position).sub(scope.target);offset.applyQuaternion(quat);spherical.setFromVector3(offset);if(scope.autoRotate&&state===STATE.NONE){rotateLeft(getAutoRotationAngle(deltaTime))}if(scope.enableDamping){spherical.theta+=sphericalDelta.theta*scope.dampingFactor;spherical.phi+=sphericalDelta.phi*scope.dampingFactor}else{spherical.theta+=sphericalDelta.theta;spherical.phi+=sphericalDelta.phi}let min=scope.minAzimuthAngle;let max=scope.maxAzimuthAngle;if(isFinite(min)&&isFinite(max)){if(min<-Math.PI)min+=twoPI;else if(min>Math.PI)min-=twoPI;if(max<-Math.PI)max+=twoPI;else if(max>Math.PI)max-=twoPI;if(min<=max){spherical.theta=Math.max(min,Math.min(max,spherical.theta))}else{spherical.theta=spherical.theta>(min+max)/2?Math.max(min,spherical.theta):Math.min(max,spherical.theta)}}spherical.phi=Math.max(scope.minPolarAngle,Math.min(scope.maxPolarAngle,spherical.phi));spherical.makeSafe();if(scope.enableDamping===true){scope.target.addScaledVector(panOffset,scope.dampingFactor)}else{scope.target.add(panOffset)}scope.target.sub(scope.cursor);scope.target.clampLength(scope.minTargetRadius,scope.maxTargetRadius);scope.target.add(scope.cursor);if(scope.zoomToCursor&&performCursorZoom||scope.object.isOrthographicCamera){spherical.radius=clampDistance(spherical.radius)}else{spherical.radius=clampDistance(spherical.radius*scale)}offset.setFromSpherical(spherical);offset.applyQuaternion(quatInverse);position.copy(scope.target).add(offset);scope.object.lookAt(scope.target);if(scope.enableDamping===true){sphericalDelta.theta*=1-scope.dampingFactor;sphericalDelta.phi*=1-scope.dampingFactor;panOffset.multiplyScalar(1-scope.dampingFactor)}else{sphericalDelta.set(0,0,0);panOffset.set(0,0,0)}let zoomChanged=false;if(scope.zoomToCursor&&performCursorZoom){let newRadius=null;if(scope.object.isPerspectiveCamera){const prevRadius=offset.length();newRadius=clampDistance(prevRadius*scale);const radiusDelta=prevRadius-newRadius;scope.object.position.addScaledVector(dollyDirection,radiusDelta);scope.object.updateMatrixWorld()}else if(scope.object.isOrthographicCamera){const mouseBefore=new Vector3(mouse.x,mouse.y,0);mouseBefore.unproject(scope.object);scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom/scale));scope.object.updateProjectionMatrix();zoomChanged=true;const mouseAfter=new Vector3(mouse.x,mouse.y,0);mouseAfter.unproject(scope.object);scope.object.position.sub(mouseAfter).add(mouseBefore);scope.object.updateMatrixWorld();newRadius=offset.length()}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.");scope.zoomToCursor=false}if(newRadius!==null){if(this.screenSpacePanning){scope.target.set(0,0,-1).transformDirection(scope.object.matrix).multiplyScalar(newRadius).add(scope.object.position)}else{_ray.origin.copy(scope.object.position);_ray.direction.set(0,0,-1).transformDirection(scope.object.matrix);if(Math.abs(scope.object.up.dot(_ray.direction))EPS||8*(1-lastQuaternion.dot(scope.object.quaternion))>EPS||lastTargetPosition.distanceToSquared(scope.target)>0){scope.dispatchEvent(_changeEvent);lastPosition.copy(scope.object.position);lastQuaternion.copy(scope.object.quaternion);lastTargetPosition.copy(scope.target);zoomChanged=false;return true}return false}}();this.dispose=function(){scope.domElement.removeEventListener("contextmenu",onContextMenu);scope.domElement.removeEventListener("pointerdown",onPointerDown);scope.domElement.removeEventListener("pointercancel",onPointerUp);scope.domElement.removeEventListener("wheel",onMouseWheel);scope.domElement.removeEventListener("pointermove",onPointerMove);scope.domElement.removeEventListener("pointerup",onPointerUp);if(scope._domElementKeyEvents!==null){scope._domElementKeyEvents.removeEventListener("keydown",onKeyDown);scope._domElementKeyEvents=null}};const scope=this;const STATE={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let state=STATE.NONE;const EPS=1e-6;const spherical=new Spherical;const sphericalDelta=new Spherical;let scale=1;const panOffset=new Vector3;const rotateStart=new Vector2;const rotateEnd=new Vector2;const rotateDelta=new Vector2;const panStart=new Vector2;const panEnd=new Vector2;const panDelta=new Vector2;const dollyStart=new Vector2;const dollyEnd=new Vector2;const dollyDelta=new Vector2;const dollyDirection=new Vector3;const mouse=new Vector2;let performCursorZoom=false;const pointers=[];const pointerPositions={};function getAutoRotationAngle(deltaTime){if(deltaTime!==null){return 2*Math.PI/60*scope.autoRotateSpeed*deltaTime}else{return 2*Math.PI/60/60*scope.autoRotateSpeed}}function getZoomScale(){return Math.pow(.95,scope.zoomSpeed)}function rotateLeft(angle){sphericalDelta.theta-=angle}function rotateUp(angle){sphericalDelta.phi-=angle}const panLeft=function(){const v=new Vector3;return function panLeft(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,0);v.multiplyScalar(-distance);panOffset.add(v)}}();const panUp=function(){const v=new Vector3;return function panUp(distance,objectMatrix){if(scope.screenSpacePanning===true){v.setFromMatrixColumn(objectMatrix,1)}else{v.setFromMatrixColumn(objectMatrix,0);v.crossVectors(scope.object.up,v)}v.multiplyScalar(distance);panOffset.add(v)}}();const pan=function(){const offset=new Vector3;return function pan(deltaX,deltaY){const element=scope.domElement;if(scope.object.isPerspectiveCamera){const position=scope.object.position;offset.copy(position).sub(scope.target);let targetDistance=offset.length();targetDistance*=Math.tan(scope.object.fov/2*Math.PI/180);panLeft(2*deltaX*targetDistance/element.clientHeight,scope.object.matrix);panUp(2*deltaY*targetDistance/element.clientHeight,scope.object.matrix)}else if(scope.object.isOrthographicCamera){panLeft(deltaX*(scope.object.right-scope.object.left)/scope.object.zoom/element.clientWidth,scope.object.matrix);panUp(deltaY*(scope.object.top-scope.object.bottom)/scope.object.zoom/element.clientHeight,scope.object.matrix)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.");scope.enablePan=false}}}();function dollyOut(dollyScale){if(scope.object.isPerspectiveCamera||scope.object.isOrthographicCamera){scale/=dollyScale}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function dollyIn(dollyScale){if(scope.object.isPerspectiveCamera||scope.object.isOrthographicCamera){scale*=dollyScale}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function updateMouseParameters(event){if(!scope.zoomToCursor){return}performCursorZoom=true;const rect=scope.domElement.getBoundingClientRect();const x=event.clientX-rect.left;const y=event.clientY-rect.top;const w=rect.width;const h=rect.height;mouse.x=x/w*2-1;mouse.y=-(y/h)*2+1;dollyDirection.set(mouse.x,mouse.y,1).unproject(scope.object).sub(scope.object.position).normalize()}function clampDistance(dist){return Math.max(scope.minDistance,Math.min(scope.maxDistance,dist))}function handleMouseDownRotate(event){rotateStart.set(event.clientX,event.clientY)}function handleMouseDownDolly(event){updateMouseParameters(event);dollyStart.set(event.clientX,event.clientY)}function handleMouseDownPan(event){panStart.set(event.clientX,event.clientY)}function handleMouseMoveRotate(event){rotateEnd.set(event.clientX,event.clientY);rotateDelta.subVectors(rotateEnd,rotateStart).multiplyScalar(scope.rotateSpeed);const element=scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientHeight);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight);rotateStart.copy(rotateEnd);scope.update()}function handleMouseMoveDolly(event){dollyEnd.set(event.clientX,event.clientY);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyOut(getZoomScale())}else if(dollyDelta.y<0){dollyIn(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleMouseMovePan(event){panEnd.set(event.clientX,event.clientY);panDelta.subVectors(panEnd,panStart).multiplyScalar(scope.panSpeed);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleMouseWheel(event){updateMouseParameters(event);if(event.deltaY<0){dollyIn(getZoomScale())}else if(event.deltaY>0){dollyOut(getZoomScale())}scope.update()}function handleKeyDown(event){let needsUpdate=false;switch(event.code){case scope.keys.UP:if(event.ctrlKey||event.metaKey||event.shiftKey){rotateUp(2*Math.PI*scope.rotateSpeed/scope.domElement.clientHeight)}else{pan(0,scope.keyPanSpeed)}needsUpdate=true;break;case scope.keys.BOTTOM:if(event.ctrlKey||event.metaKey||event.shiftKey){rotateUp(-2*Math.PI*scope.rotateSpeed/scope.domElement.clientHeight)}else{pan(0,-scope.keyPanSpeed)}needsUpdate=true;break;case scope.keys.LEFT:if(event.ctrlKey||event.metaKey||event.shiftKey){rotateLeft(2*Math.PI*scope.rotateSpeed/scope.domElement.clientHeight)}else{pan(scope.keyPanSpeed,0)}needsUpdate=true;break;case scope.keys.RIGHT:if(event.ctrlKey||event.metaKey||event.shiftKey){rotateLeft(-2*Math.PI*scope.rotateSpeed/scope.domElement.clientHeight)}else{pan(-scope.keyPanSpeed,0)}needsUpdate=true;break}if(needsUpdate){event.preventDefault();scope.update()}}function handleTouchStartRotate(){if(pointers.length===1){rotateStart.set(pointers[0].pageX,pointers[0].pageY)}else{const x=.5*(pointers[0].pageX+pointers[1].pageX);const y=.5*(pointers[0].pageY+pointers[1].pageY);rotateStart.set(x,y)}}function handleTouchStartPan(){if(pointers.length===1){panStart.set(pointers[0].pageX,pointers[0].pageY)}else{const x=.5*(pointers[0].pageX+pointers[1].pageX);const y=.5*(pointers[0].pageY+pointers[1].pageY);panStart.set(x,y)}}function handleTouchStartDolly(){const dx=pointers[0].pageX-pointers[1].pageX;const dy=pointers[0].pageY-pointers[1].pageY;const distance=Math.sqrt(dx*dx+dy*dy);dollyStart.set(0,distance)}function handleTouchStartDollyPan(){if(scope.enableZoom)handleTouchStartDolly();if(scope.enablePan)handleTouchStartPan()}function handleTouchStartDollyRotate(){if(scope.enableZoom)handleTouchStartDolly();if(scope.enableRotate)handleTouchStartRotate()}function handleTouchMoveRotate(event){if(pointers.length==1){rotateEnd.set(event.pageX,event.pageY)}else{const position=getSecondPointerPosition(event);const x=.5*(event.pageX+position.x);const y=.5*(event.pageY+position.y);rotateEnd.set(x,y)}rotateDelta.subVectors(rotateEnd,rotateStart).multiplyScalar(scope.rotateSpeed);const element=scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientHeight);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight);rotateStart.copy(rotateEnd)}function handleTouchMovePan(event){if(pointers.length===1){panEnd.set(event.pageX,event.pageY)}else{const position=getSecondPointerPosition(event);const x=.5*(event.pageX+position.x);const y=.5*(event.pageY+position.y);panEnd.set(x,y)}panDelta.subVectors(panEnd,panStart).multiplyScalar(scope.panSpeed);pan(panDelta.x,panDelta.y);panStart.copy(panEnd)}function handleTouchMoveDolly(event){const position=getSecondPointerPosition(event);const dx=event.pageX-position.x;const dy=event.pageY-position.y;const distance=Math.sqrt(dx*dx+dy*dy);dollyEnd.set(0,distance);dollyDelta.set(0,Math.pow(dollyEnd.y/dollyStart.y,scope.zoomSpeed));dollyOut(dollyDelta.y);dollyStart.copy(dollyEnd)}function handleTouchMoveDollyPan(event){if(scope.enableZoom)handleTouchMoveDolly(event);if(scope.enablePan)handleTouchMovePan(event)}function handleTouchMoveDollyRotate(event){if(scope.enableZoom)handleTouchMoveDolly(event);if(scope.enableRotate)handleTouchMoveRotate(event)}function onPointerDown(event){if(scope.enabled===false)return;if(pointers.length===0){scope.domElement.setPointerCapture(event.pointerId);scope.domElement.addEventListener("pointermove",onPointerMove);scope.domElement.addEventListener("pointerup",onPointerUp)}addPointer(event);if(event.pointerType==="touch"){onTouchStart(event)}else{onMouseDown(event)}}function onPointerMove(event){if(scope.enabled===false)return;if(event.pointerType==="touch"){onTouchMove(event)}else{onMouseMove(event)}}function onPointerUp(event){removePointer(event);if(pointers.length===0){scope.domElement.releasePointerCapture(event.pointerId);scope.domElement.removeEventListener("pointermove",onPointerMove);scope.domElement.removeEventListener("pointerup",onPointerUp)}scope.dispatchEvent(_endEvent);state=STATE.NONE}function onMouseDown(event){let mouseAction;switch(event.button){case 0:mouseAction=scope.mouseButtons.LEFT;break;case 1:mouseAction=scope.mouseButtons.MIDDLE;break;case 2:mouseAction=scope.mouseButtons.RIGHT;break;default:mouseAction=-1}switch(mouseAction){case MOUSE.DOLLY:if(scope.enableZoom===false)return;handleMouseDownDolly(event);state=STATE.DOLLY;break;case MOUSE.ROTATE:if(event.ctrlKey||event.metaKey||event.shiftKey){if(scope.enablePan===false)return;handleMouseDownPan(event);state=STATE.PAN}else{if(scope.enableRotate===false)return;handleMouseDownRotate(event);state=STATE.ROTATE}break;case MOUSE.PAN:if(event.ctrlKey||event.metaKey||event.shiftKey){if(scope.enableRotate===false)return;handleMouseDownRotate(event);state=STATE.ROTATE}else{if(scope.enablePan===false)return;handleMouseDownPan(event);state=STATE.PAN}break;default:state=STATE.NONE}if(state!==STATE.NONE){scope.dispatchEvent(_startEvent)}}function onMouseMove(event){switch(state){case STATE.ROTATE:if(scope.enableRotate===false)return;handleMouseMoveRotate(event);break;case STATE.DOLLY:if(scope.enableZoom===false)return;handleMouseMoveDolly(event);break;case STATE.PAN:if(scope.enablePan===false)return;handleMouseMovePan(event);break}}function onMouseWheel(event){if(scope.enabled===false||scope.enableZoom===false||state!==STATE.NONE)return;event.preventDefault();scope.dispatchEvent(_startEvent);handleMouseWheel(event);scope.dispatchEvent(_endEvent)}function onKeyDown(event){if(scope.enabled===false||scope.enablePan===false)return;handleKeyDown(event)}function onTouchStart(event){trackPointer(event);switch(pointers.length){case 1:switch(scope.touches.ONE){case TOUCH.ROTATE:if(scope.enableRotate===false)return;handleTouchStartRotate();state=STATE.TOUCH_ROTATE;break;case TOUCH.PAN:if(scope.enablePan===false)return;handleTouchStartPan();state=STATE.TOUCH_PAN;break;default:state=STATE.NONE}break;case 2:switch(scope.touches.TWO){case TOUCH.DOLLY_PAN:if(scope.enableZoom===false&&scope.enablePan===false)return;handleTouchStartDollyPan();state=STATE.TOUCH_DOLLY_PAN;break;case TOUCH.DOLLY_ROTATE:if(scope.enableZoom===false&&scope.enableRotate===false)return;handleTouchStartDollyRotate();state=STATE.TOUCH_DOLLY_ROTATE;break;default:state=STATE.NONE}break;default:state=STATE.NONE}if(state!==STATE.NONE){scope.dispatchEvent(_startEvent)}}function onTouchMove(event){trackPointer(event);switch(state){case STATE.TOUCH_ROTATE:if(scope.enableRotate===false)return;handleTouchMoveRotate(event);scope.update();break;case STATE.TOUCH_PAN:if(scope.enablePan===false)return;handleTouchMovePan(event);scope.update();break;case STATE.TOUCH_DOLLY_PAN:if(scope.enableZoom===false&&scope.enablePan===false)return;handleTouchMoveDollyPan(event);scope.update();break;case STATE.TOUCH_DOLLY_ROTATE:if(scope.enableZoom===false&&scope.enableRotate===false)return;handleTouchMoveDollyRotate(event);scope.update();break;default:state=STATE.NONE}}function onContextMenu(event){if(scope.enabled===false)return;event.preventDefault()}function addPointer(event){pointers.push(event)}function removePointer(event){delete pointerPositions[event.pointerId];for(let i=0;i{document.body.style.cursor="grabbing"});document.addEventListener("mouseup",()=>{document.body.style.cursor="grab"});this.target=new THREE.Vector3;this.cursor=new THREE.Vector3;el.getObject3D("camera").position.copy(this.data.initialPosition);if(el.hasAttribute("look-controls")){el.setAttribute("look-controls","enabled",false)}if(el.hasAttribute("wasd-controls")){el.setAttribute("wasd-controls","enabled",false)}},pause:function(){this.controls.dispose()},play:function(){const el=this.el;this.controls=new THREE.OrbitControls(el.getObject3D("camera"),el.sceneEl.renderer.domElement);this.update();this.controls.saveState()},onEnterVR:function(){var el=this.el;if(!AFRAME.utils.device.checkHeadsetConnected()&&!AFRAME.utils.device.isMobile()){return}this.controls.enabled=false;if(el.hasAttribute("look-controls")){el.setAttribute("look-controls","enabled",true);this.oldPosition.copy(el.getObject3D("camera").position);el.getObject3D("camera").position.set(0,0,0)}},onExitVR:function(){var el=this.el;if(!AFRAME.utils.device.checkHeadsetConnected()&&!AFRAME.utils.device.isMobile()){return}this.controls.enabled=true;el.getObject3D("camera").position.copy(this.oldPosition);if(el.hasAttribute("look-controls")){el.setAttribute("look-controls","enabled",false)}},bindMethods:function(){this.onEnterVR=bind(this.onEnterVR,this);this.onExitVR=bind(this.onExitVR,this)},update:function(oldData){var controls=this.controls;var data=this.data;if(!controls){return}controls.target=this.target.copy(data.target);controls.cursor=this.cursor.copy(data.cursor);controls.autoRotate=data.autoRotate;controls.autoRotateSpeed=data.autoRotateSpeed;controls.dampingFactor=data.dampingFactor;controls.enabled=data.enabled;controls.enableDamping=data.enableDamping;controls.enablePan=data.enablePan;controls.enableRotate=data.enableRotate;controls.enableZoom=data.enableZoom;controls.keyPanSpeed=data.keyPanSpeed;controls.maxPolarAngle=THREE.MathUtils.degToRad(data.maxPolarAngle);controls.maxAzimuthAngle=THREE.MathUtils.degToRad(data.maxAzimuthAngle);controls.maxDistance=data.maxDistance;controls.minDistance=data.minDistance;controls.minPolarAngle=THREE.MathUtils.degToRad(data.minPolarAngle);controls.minTargetRadius=data.minTargetRadius;controls.maxTargetRadius=data.maxTargetRadius;controls.minAzimuthAngle=THREE.MathUtils.degToRad(data.minAzimuthAngle);controls.minZoom=data.minZoom;controls.maxZoom=data.maxZoom;controls.panSpeed=data.panSpeed;controls.rotateSpeed=data.rotateSpeed;controls.screenSpacePanning=data.screenSpacePanning;controls.zoomSpeed=data.zoomSpeed;controls.zoomToCursor=data.zoomToCursor},tick:function(t,dt){var controls=this.controls;var data=this.data;if(!data.enabled){return}if(controls.enabled&&(controls.enableDamping||controls.autoRotate)){this.controls.update(dt/1e3)}},remove:function(){this.controls.reset();this.controls.dispose();if(this.el.hasAttribute("look-controls")){this.el.setAttribute("look-controls","enabled",true)}if(this.el.hasAttribute("wasd-controls")){this.el.setAttribute("wasd-controls","enabled",true)}this.el.sceneEl.removeEventListener("enter-vr",this.onEnterVR);this.el.sceneEl.removeEventListener("exit-vr",this.onExitVR)}})}]); diff --git a/components/orbit-controls/index.js b/components/orbit-controls/index.js index 1b287c70..0b1ee944 100644 --- a/components/orbit-controls/index.js +++ b/components/orbit-controls/index.js @@ -55,6 +55,12 @@ AFRAME.registerComponent('orbit-controls', { this.target = new THREE.Vector3(); this.cursor = new THREE.Vector3(); el.getObject3D('camera').position.copy(this.data.initialPosition); + if (el.hasAttribute('look-controls')) { + el.setAttribute('look-controls', 'enabled', false); + } + if (el.hasAttribute('wasd-controls')) { + el.setAttribute('wasd-controls', 'enabled', false); + } }, pause: function () { @@ -144,6 +150,12 @@ AFRAME.registerComponent('orbit-controls', { remove: function() { this.controls.reset(); this.controls.dispose(); + if (this.el.hasAttribute('look-controls')) { + this.el.setAttribute('look-controls', 'enabled', true); + } + if (this.el.hasAttribute('wasd-controls')) { + this.el.setAttribute('wasd-controls', 'enabled', true); + } this.el.sceneEl.removeEventListener('enter-vr', this.onEnterVR); this.el.sceneEl.removeEventListener('exit-vr', this.onExitVR);