YGG.UserControls=function(e,t,n){var o,a;this.MIN_DRAG_DISTANCE=2e-4,this.MIN_DRAG_DISTANCE_TOUCH=.005,this.onMouseUpCallback=function(e){},this.onTouchStartCallback=function(e){},this.onTouchEndCallback=function(e){},this.summaryDistance=0,this.object=e,this.domElement=void 0!==t?t:document,this.isDrag=!1,this.enabled=!0,this.target=new THREE.Vector3,this.minDistance=.43,this.maxDistance=1,this.minPolarAngle=-Math.PI/2,this.maxPolarAngle=Math.PI/2,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=.3,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={LEFT:THREE.MOUSE.LEFT,MIDDLE:THREE.MOUSE.MIDDLE,RIGHT:THREE.MOUSE.RIGHT},this.euler=new THREE.Euler(0,0,0,"YXZ"),this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.default_fov=n,null!=n&&null!=n||(this.default_fov=e.fov),this.fakeZoom=1,this.fakeZoomChanged=!1,this.setOnMouseUpCallback=function(e){i.onMouseUpCallback=e},this.setOnTouchStartCallback=function(e){i.onTouchStartCallback=e},this.setOnTouchEndCallback=function(e){i.onTouchEndCallback=e},this.setEuler=function(e){i.euler.x=e.x,i.euler.y=e.y},this.getEulerX=function(){return i.euler.x},this.setEulerX=function(e){i.euler.x=e},this.getEulerY=function(){return i.euler.y},this.setEulerY=function(e){i.euler.y=e},this.refresh=function(){let e=new THREE.Vector3(0,0,-1);e.applyQuaternion(i.object.quaternion);let t=new THREE.Vector2;t.x=Math.acos(e.y),t.y=Math.atan2(e.z,e.x),i.euler.x=-t.x+Math.PI/2,i.euler.y=-t.y-Math.PI/2},this.getState=function(){return l},this.isDraging=function(){return i.isDrag},this.getPolarAngle=function(){return m.phi},this.getAzimuthalAngle=function(){return m.theta},this.saveState=function(){i.target0.copy(i.target),i.position0.copy(i.object.position),i.zoom0=i.object.zoom},this.reset=function(){i.target.copy(i.target0),i.object.position.copy(i.position0),i.object.zoom=i.zoom0,i.object.updateProjectionMatrix(),i.dispatchEvent(s),i.update(),l=u.NONE},this.update=(o=new THREE.Vector3,a=new THREE.Quaternion,function(){return i.euler.x-=E.phi,i.euler.x=Math.max(i.minPolarAngle,Math.min(i.maxPolarAngle,i.euler.x)),i.euler.y-=E.theta,i.euler.y=Math.max(i.minAzimuthAngle,Math.min(i.maxAzimuthAngle,i.euler.y)),i.object.setRotationFromEuler(i.euler),E.set(0,0,0),i.fakeZoomChanged&&(i.fakeZoom=Math.max(i.minDistance,Math.min(i.maxDistance,i.fakeZoom)),i.object.fov=i.default_fov*i.fakeZoom,i.object.updateProjectionMatrix()),!!(i.fakeZoomChanged||p||o.distanceToSquared(i.object.position)>h||8*(1-a.dot(i.object.quaternion))>h)&&(i.dispatchEvent(s),o.copy(i.object.position),a.copy(i.object.quaternion),p=!1,i.fakeZoomChanged=!1,!0)}),this.dispose=function(){i.domElement.removeEventListener("contextmenu",G,!1),i.domElement.removeEventListener("mousedown",N,!1),i.domElement.removeEventListener("wheel",Z,!1),i.domElement.removeEventListener("touchstart",_,!1),i.domElement.removeEventListener("touchend",U,!1),i.domElement.removeEventListener("touchmove",V,!1),document.removeEventListener("mousemove",Y,!1),document.removeEventListener("mouseup",I,!1)};var i=this,s={type:"change"},c={type:"start"},r={type:"end"},u={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY_PAN:4},l=u.NONE,h=1e-6,m=new THREE.Spherical,E=new THREE.Spherical,d=new THREE.Vector3,p=!1,b=new THREE.Vector2,f=new THREE.Vector2,g=new THREE.Vector2,v=new THREE.Vector2,y=new THREE.Vector2,T=new THREE.Vector2,D=new THREE.Vector2,R=new THREE.Vector2,P=new THREE.Vector2;function k(){return Math.pow(.95,i.zoomSpeed)}function M(e){E.theta-=e}function C(e){E.phi-=e}var H,O,L=(H=new THREE.Vector3,function(e,t){H.setFromMatrixColumn(t,0),H.multiplyScalar(-e),d.add(H)}),S=function(){var e=new THREE.Vector3;return function(t,n){!0===i.screenSpacePanning?e.setFromMatrixColumn(n,1):(e.setFromMatrixColumn(n,0),e.crossVectors(i.object.up,e)),e.multiplyScalar(t),d.add(e)}}(),A=(O=new THREE.Vector3,function(e,t){var n=i.domElement===document?i.domElement.body:i.domElement;if(i.object.isPerspectiveCamera){var o=i.object.position;O.copy(o).sub(i.target);var a=O.length();a*=Math.tan(i.object.fov/2*Math.PI/180),L(2*e*a/n.clientHeight,i.object.matrix),S(2*t*a/n.clientHeight,i.object.matrix)}else i.object.isOrthographicCamera?(L(e*(i.object.right-i.object.left)/i.object.zoom/n.clientWidth,i.object.matrix),S(t*(i.object.top-i.object.bottom)/i.object.zoom/n.clientHeight,i.object.matrix)):i.enablePan=!1});function j(e){i.object.isPerspectiveCamera?(i.fakeZoom/=e,i.fakeZoomChanged=!0):i.enableZoom=!1}function w(e){i.object.isPerspectiveCamera?(i.fakeZoom*=e,i.fakeZoomChanged=!0):i.enableZoom=!1}function x(e){v.set(e.clientX,e.clientY)}function N(e){if(!1!==i.enabled){switch(e.preventDefault(),i.domElement.focus?i.domElement.focus():window.focus(),e.button){case i.mouseButtons.LEFT:if(e.ctrlKey||e.metaKey||e.shiftKey){if(!1===i.enablePan)return;x(e),l=u.PAN}else{if(!1===i.enableRotate)return;!function(e){b.set(e.clientX,e.clientY)}(e),l=u.ROTATE}break;case i.mouseButtons.MIDDLE:if(!1===i.enableZoom)return;!function(e){D.set(e.clientX,e.clientY)}(e),l=u.DOLLY;break;case i.mouseButtons.RIGHT:if(!1===i.enablePan)return;x(e),l=u.PAN;break}l!==u.NONE&&(document.addEventListener("mousemove",Y,!1),document.addEventListener("mouseup",I,!1),i.dispatchEvent(c))}}function Y(e){if(!1!==i.enabled)switch(e.preventDefault(),l){case u.ROTATE:if(!1===i.enableRotate)return;!function(e){f.set(e.clientX,e.clientY),g.subVectors(f,b).multiplyScalar(i.rotateSpeed);var t=i.domElement===document?i.domElement.body:i.domElement;let n=g.x/t.clientWidth,o=g.y/t.clientHeight;M(2*Math.PI*n),C(2*Math.PI*o),!i.isDrag&&(Math.abs(n)>i.MIN_DRAG_DISTANCE||Math.abs(o)>i.MIN_DRAG_DISTANCE)&&(i.isDrag=!0),b.copy(f),i.update()}(e);break;case u.DOLLY:if(!1===i.enableZoom)return;!function(e){R.set(e.clientX,e.clientY),P.subVectors(R,D),P.y>0?j(k()):P.y<0&&w(k()),D.copy(R),i.update()}(e);break;case u.PAN:if(!1===i.enablePan)return;!function(e){y.set(e.clientX,e.clientY),T.subVectors(y,v).multiplyScalar(i.panSpeed),A(T.x,T.y),v.copy(y),i.update()}(e);break}}function I(e){!1!==i.enabled&&(document.removeEventListener("mousemove",Y,!1),document.removeEventListener("mouseup",I,!1),i.dispatchEvent(r),l=u.NONE,e.button==i.mouseButtons.LEFT&&(i.onMouseUpCallback(e),i.isDrag=!1))}function Z(e){!1===i.enabled||!1===i.enableZoom||l!==u.NONE&&l!==u.ROTATE||(e.preventDefault(),e.stopPropagation(),i.dispatchEvent(c),function(e){e.deltaY<0?w(k()):e.deltaY>0&&j(k()),i.update()}(e),i.dispatchEvent(r))}function _(e){if(!1!==i.enabled){switch(i.isDrag||(i.summaryDistance=0),e.preventDefault(),e.touches.length){case 1:if(!1===i.enableRotate)return;!function(e){b.set(e.touches[0].pageX,e.touches[0].pageY)}(e),l=u.TOUCH_ROTATE,i.onTouchStartCallback(e);break;case 2:if(i.isDrag||(i.isDrag=!0),!1===i.enableZoom&&!1===i.enablePan)return;!function(e){if(i.enableZoom){var t=e.touches[0].pageX-e.touches[1].pageX,n=e.touches[0].pageY-e.touches[1].pageY,o=Math.sqrt(t*t+n*n);D.set(0,o)}if(i.enablePan){var a=.5*(e.touches[0].pageX+e.touches[1].pageX),s=.5*(e.touches[0].pageY+e.touches[1].pageY);v.set(a,s)}}(e),l=u.TOUCH_DOLLY_PAN;break;default:l=u.NONE}l!==u.NONE&&i.dispatchEvent(c)}}function V(e){if(!1!==i.enabled)switch(e.preventDefault(),e.stopPropagation(),e.touches.length){case 1:if(!1===i.enableRotate)return;if(l!==u.TOUCH_ROTATE)return;!function(e){f.set(e.touches[0].pageX,e.touches[0].pageY),g.subVectors(f,b).multiplyScalar(i.rotateSpeed);var t=i.domElement===document?i.domElement.body:i.domElement;M(2*Math.PI*g.x/t.clientWidth),C(2*Math.PI*g.y/t.clientHeight),i.isDrag||(i.summaryDistance+=Math.max(Math.abs(g.x),Math.abs(g.y))/t.clientHeight,i.summaryDistance>i.MIN_DRAG_DISTANCE_TOUCH&&(i.isDrag=!0)),b.copy(f),i.update()}(e);break;case 2:if(i.isDrag||(i.isDrag=!0),!1===i.enableZoom&&!1===i.enablePan)return;if(l!==u.TOUCH_DOLLY_PAN)return;!function(e){if(i.enableZoom){var t=e.touches[0].pageX-e.touches[1].pageX,n=e.touches[0].pageY-e.touches[1].pageY,o=Math.sqrt(t*t+n*n);R.set(0,o),P.set(0,Math.pow(R.y/D.y,i.zoomSpeed)),j(P.y),D.copy(R)}if(i.enablePan){var a=.5*(e.touches[0].pageX+e.touches[1].pageX),s=.5*(e.touches[0].pageY+e.touches[1].pageY);y.set(a,s),T.subVectors(y,v).multiplyScalar(i.panSpeed),A(T.x,T.y),v.copy(y)}i.update()}(e);break;default:l=u.NONE}}function U(e){!1!==i.enabled&&(i.dispatchEvent(r),l=u.NONE,0==e.touches.length&&(i.onTouchEndCallback(e),i.isDrag=!1))}function G(e){!1!==i.enabled&&e.preventDefault()}i.domElement.addEventListener("contextmenu",G,!1),i.domElement.addEventListener("mousedown",N,!1),i.domElement.addEventListener("wheel",Z,!1),i.domElement.addEventListener("touchstart",_,!1),i.domElement.addEventListener("touchend",U,!1),i.domElement.addEventListener("touchmove",V,!1),window.addEventListener("keydown",(function(e){!1!==i.enabled&&!1!==i.enableKeys&&!1!==i.enablePan&&function(e){var t=!1;switch(e.keyCode){case i.keys.UP:A(0,i.keyPanSpeed),t=!0;break;case i.keys.BOTTOM:A(0,-i.keyPanSpeed),t=!0;break;case i.keys.LEFT:A(i.keyPanSpeed,0),t=!0;break;case i.keys.RIGHT:A(-i.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),i.update())}(e)}),!1),this.refresh(),this.update()},YGG.UserControls.prototype=Object.create(THREE.EventDispatcher.prototype),YGG.UserControls.prototype.constructor=YGG.UserControls,Object.defineProperties(YGG.UserControls.prototype,{center:{get:function(){return this.target}},noZoom:{get:function(){return!this.enableZoom},set:function(e){this.enableZoom=!e}},noRotate:{get:function(){return!this.enableRotate},set:function(e){this.enableRotate=!e}},noPan:{get:function(){return!this.enablePan},set:function(e){this.enablePan=!e}},noKeys:{get:function(){return!this.enableKeys},set:function(e){this.enableKeys=!e}},staticMoving:{get:function(){return!this.enableDamping},set:function(e){this.enableDamping=!e}},dynamicDampingFactor:{get:function(){return this.dampingFactor},set:function(e){this.dampingFactor=e}}});