From 40e653b05634abba11b56a1c6fa6256e9e8c67e6 Mon Sep 17 00:00:00 2001 From: Aldan Creo <20495460+ACMCMC@users.noreply.github.com> Date: Tue, 8 Sep 2020 22:50:18 +0200 Subject: [PATCH 1/2] Added an error message if the user hasn't run install() --- dist/camera-controls.js | 4 ++++ dist/camera-controls.min.js | 3 ++- dist/camera-controls.module.js | 4 ++++ src/CameraControls.ts | 5 +++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dist/camera-controls.js b/dist/camera-controls.js index 8c7ca26..4c6865e 100644 --- a/dist/camera-controls.js +++ b/dist/camera-controls.js @@ -206,6 +206,10 @@ _this._boundaryEnclosesCamera = false; _this._needsUpdate = true; _this._updatedLastTime = false; + if (typeof THREE === 'undefined') { + console.error("Three.js is undefined. You must first run CameraControls.install({ THREE: THREE }). Check the docs for further information."); + return _this; + } _this._camera = camera; _this._yAxisUpSpace = new THREE.Quaternion().setFromUnitVectors(_this._camera.up, _AXIS_Y); _this._yAxisUpSpaceInverse = _this._yAxisUpSpace.clone().inverse(); diff --git a/dist/camera-controls.min.js b/dist/camera-controls.min.js index 0315021..6268aac 100644 --- a/dist/camera-controls.min.js +++ b/dist/camera-controls.min.js @@ -18,4 +18,5 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(Object.prototype.hasOwnProperty.call(b,p))d[p]=b[p]};return extendStatics(d,b)};function __extends(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}var ACTION;(function(ACTION){ACTION[ACTION["NONE"]=0]="NONE";ACTION[ACTION["ROTATE"]=1]="ROTATE";ACTION[ACTION["TRUCK"]=2]="TRUCK";ACTION[ACTION["DOLLY"]=3]="DOLLY";ACTION[ACTION["ZOOM"]=4]="ZOOM";ACTION[ACTION["TOUCH_ROTATE"]=5]="TOUCH_ROTATE";ACTION[ACTION["TOUCH_TRUCK"]=6]="TOUCH_TRUCK";ACTION[ACTION["TOUCH_DOLLY"]=7]="TOUCH_DOLLY";ACTION[ACTION["TOUCH_ZOOM"]=8]="TOUCH_ZOOM";ACTION[ACTION["TOUCH_DOLLY_TRUCK"]=9]="TOUCH_DOLLY_TRUCK";ACTION[ACTION["TOUCH_ZOOM_TRUCK"]=10]="TOUCH_ZOOM_TRUCK"})(ACTION||(ACTION={}));var PI_2=Math.PI*2;var PI_HALF=Math.PI/2;var FPS_60=1/.016;var EPSILON=1e-5;function approxZero(number){return Math.abs(number)=2;if(isMultiTouch){var touchEvent=event;var dx=_v2.x-touchEvent.touches[1].clientX;var dy=_v2.y-touchEvent.touches[1].clientY;var distance=Math.sqrt(dx*dx+dy*dy);dollyStart_1.set(0,distance);var x=(touchEvent.touches[0].clientX+touchEvent.touches[1].clientX)*.5;var y=(touchEvent.touches[0].clientY+touchEvent.touches[1].clientY)*.5;lastDragPosition_1.set(x,y)}document.addEventListener("mousemove",dragging_1);document.addEventListener("touchmove",dragging_1,{passive:false});document.addEventListener("mouseup",endDragging_1);document.addEventListener("touchend",endDragging_1);_this.dispatchEvent({type:"controlstart",originalEvent:event})};var dragging_1=function(event){if(!_this.enabled)return;event.preventDefault();extractClientCoordFromEvent(event,_v2);var deltaX=lastDragPosition_1.x-_v2.x;var deltaY=lastDragPosition_1.y-_v2.y;lastDragPosition_1.copy(_v2);switch(_this._state){case ACTION.ROTATE:case ACTION.TOUCH_ROTATE:{rotateInternal_1(deltaX,deltaY);break}case ACTION.DOLLY:case ACTION.ZOOM:{var dollyX=_this.dollyToCursor?(dragStartPosition_1.x-elementRect_1.x)/elementRect_1.z*2-1:0;var dollyY=_this.dollyToCursor?(dragStartPosition_1.y-elementRect_1.y)/elementRect_1.w*-2+1:0;_this._state===ACTION.DOLLY?dollyInternal_1(deltaY*TOUCH_DOLLY_FACTOR,dollyX,dollyY):zoomInternal_1(deltaY*TOUCH_DOLLY_FACTOR);break}case ACTION.TOUCH_DOLLY:case ACTION.TOUCH_ZOOM:case ACTION.TOUCH_DOLLY_TRUCK:case ACTION.TOUCH_ZOOM_TRUCK:{var touchEvent=event;var dx=_v2.x-touchEvent.touches[1].clientX;var dy=_v2.y-touchEvent.touches[1].clientY;var distance=Math.sqrt(dx*dx+dy*dy);var dollyDelta=dollyStart_1.y-distance;dollyStart_1.set(0,distance);var dollyX=_this.dollyToCursor?(lastDragPosition_1.x-elementRect_1.x)/elementRect_1.z*2-1:0;var dollyY=_this.dollyToCursor?(lastDragPosition_1.y-elementRect_1.y)/elementRect_1.w*-2+1:0;_this._state===ACTION.TOUCH_DOLLY||_this._state===ACTION.TOUCH_DOLLY_TRUCK?dollyInternal_1(dollyDelta*TOUCH_DOLLY_FACTOR,dollyX,dollyY):zoomInternal_1(dollyDelta*TOUCH_DOLLY_FACTOR);if(_this._state===ACTION.TOUCH_DOLLY_TRUCK||_this._state===ACTION.TOUCH_ZOOM_TRUCK){truckInternal_1(deltaX,deltaY)}break}case ACTION.TRUCK:case ACTION.TOUCH_TRUCK:{truckInternal_1(deltaX,deltaY);break}}_this.dispatchEvent({type:"control",originalEvent:event})};var endDragging_1=function(event){if(!_this.enabled)return;_this._state=ACTION.NONE;document.removeEventListener("mousemove",dragging_1);document.removeEventListener("touchmove",dragging_1,{passive:false});document.removeEventListener("mouseup",endDragging_1);document.removeEventListener("touchend",endDragging_1);_this.dispatchEvent({type:"controlend",originalEvent:event})};_this._domElement.addEventListener("mousedown",onMouseDown_1);_this._domElement.addEventListener("touchstart",onTouchStart_1);_this._domElement.addEventListener("wheel",onMouseWheel_1);_this._domElement.addEventListener("contextmenu",onContextMenu_1);_this._removeAllEventListeners=function(){_this._domElement.removeEventListener("mousedown",onMouseDown_1);_this._domElement.removeEventListener("touchstart",onTouchStart_1);_this._domElement.removeEventListener("wheel",onMouseWheel_1);_this._domElement.removeEventListener("contextmenu",onContextMenu_1);document.removeEventListener("mousemove",dragging_1);document.removeEventListener("touchmove",dragging_1,{passive:false});document.removeEventListener("mouseup",endDragging_1);document.removeEventListener("touchend",endDragging_1)}}_this.update(0);return _this}CameraControls.install=function(libs){THREE=libs.THREE;_ORIGIN=Object.freeze(new THREE.Vector3(0,0,0));_AXIS_Y=Object.freeze(new THREE.Vector3(0,1,0));_AXIS_Z=Object.freeze(new THREE.Vector3(0,0,1));_v2=new THREE.Vector2;_v3A=new THREE.Vector3;_v3B=new THREE.Vector3;_v3C=new THREE.Vector3;_xColumn=new THREE.Vector3;_yColumn=new THREE.Vector3;_sphericalA=new THREE.Spherical;_sphericalB=new THREE.Spherical;_box3A=new THREE.Box3;_box3B=new THREE.Box3;_quaternionA=new THREE.Quaternion;_quaternionB=new THREE.Quaternion;_rotationMatrix=new THREE.Matrix4;_raycaster=new THREE.Raycaster};Object.defineProperty(CameraControls,"ACTION",{get:function(){return readonlyACTION},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"currentAction",{get:function(){return this._state},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"distance",{get:function(){return this._spherical.radius},set:function(distance){if(this._spherical.radius===distance&&this._sphericalEnd.radius===distance)return;this._spherical.radius=distance;this._sphericalEnd.radius=distance;this._needsUpdate=true},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"azimuthAngle",{get:function(){return this._spherical.theta},set:function(azimuthAngle){if(this._spherical.theta===azimuthAngle&&this._sphericalEnd.theta===azimuthAngle)return;this._spherical.theta=azimuthAngle;this._sphericalEnd.theta=azimuthAngle;this._needsUpdate=true},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"polarAngle",{get:function(){return this._spherical.phi},set:function(polarAngle){if(this._spherical.phi===polarAngle&&this._sphericalEnd.phi===polarAngle)return;this._spherical.phi=polarAngle;this._sphericalEnd.phi=polarAngle;this._needsUpdate=true},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"phiSpeed",{set:function(speed){console.warn("phiSpeed was renamed. use azimuthRotateSpeed instead");this.azimuthRotateSpeed=speed},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"thetaSpeed",{set:function(speed){console.warn("thetaSpeed was renamed. use polarRotateSpeed instead");this.polarRotateSpeed=speed},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"boundaryEnclosesCamera",{get:function(){return this._boundaryEnclosesCamera},set:function(boundaryEnclosesCamera){this._boundaryEnclosesCamera=boundaryEnclosesCamera;this._needsUpdate=true},enumerable:false,configurable:true});CameraControls.prototype.addEventListener=function(type,listener){_super.prototype.addEventListener.call(this,type,listener)};CameraControls.prototype.removeEventListener=function(type,listener){_super.prototype.removeEventListener.call(this,type,listener)};CameraControls.prototype.rotate=function(azimuthAngle,polarAngle,enableTransition){if(enableTransition===void 0){enableTransition=false}this.rotateTo(this._sphericalEnd.theta+azimuthAngle,this._sphericalEnd.phi+polarAngle,enableTransition)};CameraControls.prototype.rotateTo=function(azimuthAngle,polarAngle,enableTransition){if(enableTransition===void 0){enableTransition=false}var theta=THREE.MathUtils.clamp(azimuthAngle,this.minAzimuthAngle,this.maxAzimuthAngle);var phi=THREE.MathUtils.clamp(polarAngle,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=theta;this._sphericalEnd.phi=phi;this._sphericalEnd.makeSafe();if(!enableTransition){this._spherical.theta=this._sphericalEnd.theta;this._spherical.phi=this._sphericalEnd.phi}this._needsUpdate=true};CameraControls.prototype.dolly=function(distance,enableTransition){if(enableTransition===void 0){enableTransition=false}this.dollyTo(this._sphericalEnd.radius-distance,enableTransition)};CameraControls.prototype.dollyTo=function(distance,enableTransition){if(enableTransition===void 0){enableTransition=false}if(notSupportedInOrthographicCamera(this._camera,"dolly"))return;this._sphericalEnd.radius=THREE.MathUtils.clamp(distance,this.minDistance,this.maxDistance);if(!enableTransition){this._spherical.radius=this._sphericalEnd.radius}this._needsUpdate=true};CameraControls.prototype.zoom=function(zoomStep,enableTransition){if(enableTransition===void 0){enableTransition=false}this.zoomTo(this._zoomEnd+zoomStep,enableTransition)};CameraControls.prototype.zoomTo=function(zoom,enableTransition){if(enableTransition===void 0){enableTransition=false}this._zoomEnd=THREE.MathUtils.clamp(zoom,this.minZoom,this.maxZoom);if(!enableTransition){this._zoom=this._zoomEnd}this._needsUpdate=true};CameraControls.prototype.pan=function(x,y,enableTransition){if(enableTransition===void 0){enableTransition=false}console.log("`pan` has been renamed to `truck`");this.truck(x,y,enableTransition)};CameraControls.prototype.truck=function(x,y,enableTransition){if(enableTransition===void 0){enableTransition=false}this._camera.updateMatrix();_xColumn.setFromMatrixColumn(this._camera.matrix,0);_yColumn.setFromMatrixColumn(this._camera.matrix,1);_xColumn.multiplyScalar(x);_yColumn.multiplyScalar(-y);var offset=_v3A.copy(_xColumn).add(_yColumn);this._encloseToBoundary(this._targetEnd,offset,this.boundaryFriction);if(!enableTransition){this._target.copy(this._targetEnd)}this._needsUpdate=true};CameraControls.prototype.forward=function(distance,enableTransition){if(enableTransition===void 0){enableTransition=false}_v3A.setFromMatrixColumn(this._camera.matrix,0);_v3A.crossVectors(this._camera.up,_v3A);_v3A.multiplyScalar(distance);this._encloseToBoundary(this._targetEnd,_v3A,this.boundaryFriction);if(!enableTransition){this._target.copy(this._targetEnd)}this._needsUpdate=true};CameraControls.prototype.moveTo=function(x,y,z,enableTransition){if(enableTransition===void 0){enableTransition=false}this._targetEnd.set(x,y,z);if(!enableTransition){this._target.copy(this._targetEnd)}this._needsUpdate=true};CameraControls.prototype.fitTo=function(box3OrObject,enableTransition,_a){var _b=_a===void 0?{}:_a,_c=_b.paddingLeft,paddingLeft=_c===void 0?0:_c,_d=_b.paddingRight,paddingRight=_d===void 0?0:_d,_e=_b.paddingBottom,paddingBottom=_e===void 0?0:_e,_f=_b.paddingTop,paddingTop=_f===void 0?0:_f;var aabb=box3OrObject.isBox3?_box3A.copy(box3OrObject):_box3A.setFromObject(box3OrObject);var theta=roundToStep(this._sphericalEnd.theta,PI_HALF);var phi=roundToStep(this._sphericalEnd.phi,PI_HALF);this.rotateTo(theta,phi,enableTransition);var normal=_v3A.setFromSpherical(this._sphericalEnd).normalize();var rotation=_quaternionA.setFromUnitVectors(normal,_AXIS_Z);var viewFromPolar=approxEquals(Math.abs(normal.y),1);if(viewFromPolar){rotation.multiply(_quaternionB.setFromAxisAngle(_AXIS_Y,theta))}var bb=_box3B.makeEmpty();_v3B.copy(aabb.min).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.min).setX(aabb.max.x).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.min).setY(aabb.max.y).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.max).setZ(aabb.min.z).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.min).setZ(aabb.max.z).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.max).setY(aabb.min.y).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.max).setX(aabb.min.x).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.max).applyQuaternion(rotation);bb.expandByPoint(_v3B);rotation.setFromUnitVectors(_AXIS_Z,normal);bb.min.x-=paddingLeft;bb.min.y-=paddingBottom;bb.max.x+=paddingRight;bb.max.y+=paddingTop;var bbSize=bb.getSize(_v3A);var center=bb.getCenter(_v3B).applyQuaternion(rotation);var isPerspectiveCamera=this._camera.isPerspectiveCamera;var isOrthographicCamera=this._camera.isOrthographicCamera;if(isPerspectiveCamera){var distance=this.getDistanceToFit(bbSize.x,bbSize.y,bbSize.z);this.moveTo(center.x,center.y,center.z,enableTransition);this.dollyTo(distance,enableTransition);return}else if(isOrthographicCamera){var camera=this._camera;var width=camera.right-camera.left;var height=camera.top-camera.bottom;var zoom=Math.min(width/bbSize.x,height/bbSize.y);this.moveTo(center.x,center.y,center.z,enableTransition);this.zoomTo(zoom,enableTransition);return}};CameraControls.prototype.setLookAt=function(positionX,positionY,positionZ,targetX,targetY,targetZ,enableTransition){if(enableTransition===void 0){enableTransition=false}var position=_v3A.set(positionX,positionY,positionZ);var target=_v3B.set(targetX,targetY,targetZ);this._targetEnd.copy(target);this._sphericalEnd.setFromVector3(position.sub(target).applyQuaternion(this._yAxisUpSpace));this.normalizeRotations();if(!enableTransition){this._target.copy(this._targetEnd);this._spherical.copy(this._sphericalEnd)}this._needsUpdate=true};CameraControls.prototype.lerpLookAt=function(positionAX,positionAY,positionAZ,targetAX,targetAY,targetAZ,positionBX,positionBY,positionBZ,targetBX,targetBY,targetBZ,t,enableTransition){if(enableTransition===void 0){enableTransition=false}var positionA=_v3A.set(positionAX,positionAY,positionAZ);var targetA=_v3B.set(targetAX,targetAY,targetAZ);_sphericalA.setFromVector3(positionA.sub(targetA).applyQuaternion(this._yAxisUpSpace));var targetB=_v3A.set(targetBX,targetBY,targetBZ);this._targetEnd.copy(targetA).lerp(targetB,t);var positionB=_v3B.set(positionBX,positionBY,positionBZ);_sphericalB.setFromVector3(positionB.sub(targetB).applyQuaternion(this._yAxisUpSpace));var deltaTheta=_sphericalB.theta-_sphericalA.theta;var deltaPhi=_sphericalB.phi-_sphericalA.phi;var deltaRadius=_sphericalB.radius-_sphericalA.radius;this._sphericalEnd.set(_sphericalA.radius+deltaRadius*t,_sphericalA.phi+deltaPhi*t,_sphericalA.theta+deltaTheta*t);this.normalizeRotations();if(!enableTransition){this._target.copy(this._targetEnd);this._spherical.copy(this._sphericalEnd)}this._needsUpdate=true};CameraControls.prototype.setPosition=function(positionX,positionY,positionZ,enableTransition){if(enableTransition===void 0){enableTransition=false}this.setLookAt(positionX,positionY,positionZ,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,enableTransition)};CameraControls.prototype.setTarget=function(targetX,targetY,targetZ,enableTransition){if(enableTransition===void 0){enableTransition=false}var pos=this.getPosition(_v3A);this.setLookAt(pos.x,pos.y,pos.z,targetX,targetY,targetZ,enableTransition)};CameraControls.prototype.setBoundary=function(box3){if(!box3){this._boundary.min.set(-Infinity,-Infinity,-Infinity);this._boundary.max.set(Infinity,Infinity,Infinity);this._needsUpdate=true;return}this._boundary.copy(box3);this._boundary.clampPoint(this._targetEnd,this._targetEnd);this._needsUpdate=true};CameraControls.prototype.setViewport=function(viewportOrX,y,width,height){if(viewportOrX===null){this._viewport=null;return}this._viewport=this._viewport||new THREE.Vector4;if(typeof viewportOrX==="number"){this._viewport.set(viewportOrX,y,width,height)}else{this._viewport.copy(viewportOrX)}};CameraControls.prototype.getDistanceToFit=function(width,height,depth){if(notSupportedInOrthographicCamera(this._camera,"getDistanceToFit"))return this._spherical.radius;var camera=this._camera;var boundingRectAspect=width/height;var fov=camera.getEffectiveFOV()*THREE.MathUtils.DEG2RAD;var aspect=camera.aspect;var heightToFit=boundingRectAspect=1;if(!hasCollider)return distance;if(notSupportedInOrthographicCamera(this._camera,"_collisionTest"))return distance;distance=this._spherical.radius;var direction=_v3A.setFromSpherical(this._spherical).divideScalar(distance);_rotationMatrix.lookAt(_ORIGIN,direction,this._camera.up);for(var i=0;i<4;i++){var nearPlaneCorner=_v3B.copy(this._nearPlaneCorners[i]);nearPlaneCorner.applyMatrix4(_rotationMatrix);var origin_1=_v3C.addVectors(this._target,nearPlaneCorner);_raycaster.set(origin_1,direction);_raycaster.far=distance;var intersects=_raycaster.intersectObjects(this.colliderMeshes);if(intersects.length!==0&&intersects[0].distance=2;if(isMultiTouch){var touchEvent=event;var dx=_v2.x-touchEvent.touches[1].clientX;var dy=_v2.y-touchEvent.touches[1].clientY;var distance=Math.sqrt(dx*dx+dy*dy);dollyStart_1.set(0,distance);var x=(touchEvent.touches[0].clientX+touchEvent.touches[1].clientX)*.5;var y=(touchEvent.touches[0].clientY+touchEvent.touches[1].clientY)*.5;lastDragPosition_1.set(x,y)}document.addEventListener("mousemove",dragging_1);document.addEventListener("touchmove",dragging_1,{passive:false});document.addEventListener("mouseup",endDragging_1);document.addEventListener("touchend",endDragging_1);_this.dispatchEvent({type:"controlstart",originalEvent:event})};var dragging_1=function(event){if(!_this.enabled)return;event.preventDefault();extractClientCoordFromEvent(event,_v2);var deltaX=lastDragPosition_1.x-_v2.x;var deltaY=lastDragPosition_1.y-_v2.y;lastDragPosition_1.copy(_v2);switch(_this._state){case ACTION.ROTATE:case ACTION.TOUCH_ROTATE:{rotateInternal_1(deltaX,deltaY);break}case ACTION.DOLLY:case ACTION.ZOOM:{var dollyX=_this.dollyToCursor?(dragStartPosition_1.x-elementRect_1.x)/elementRect_1.z*2-1:0;var dollyY=_this.dollyToCursor?(dragStartPosition_1.y-elementRect_1.y)/elementRect_1.w*-2+1:0;_this._state===ACTION.DOLLY?dollyInternal_1(deltaY*TOUCH_DOLLY_FACTOR,dollyX,dollyY):zoomInternal_1(deltaY*TOUCH_DOLLY_FACTOR);break}case ACTION.TOUCH_DOLLY:case ACTION.TOUCH_ZOOM:case ACTION.TOUCH_DOLLY_TRUCK:case ACTION.TOUCH_ZOOM_TRUCK:{var touchEvent=event;var dx=_v2.x-touchEvent.touches[1].clientX;var dy=_v2.y-touchEvent.touches[1].clientY;var distance=Math.sqrt(dx*dx+dy*dy);var dollyDelta=dollyStart_1.y-distance;dollyStart_1.set(0,distance);var dollyX=_this.dollyToCursor?(lastDragPosition_1.x-elementRect_1.x)/elementRect_1.z*2-1:0;var dollyY=_this.dollyToCursor?(lastDragPosition_1.y-elementRect_1.y)/elementRect_1.w*-2+1:0;_this._state===ACTION.TOUCH_DOLLY||_this._state===ACTION.TOUCH_DOLLY_TRUCK?dollyInternal_1(dollyDelta*TOUCH_DOLLY_FACTOR,dollyX,dollyY):zoomInternal_1(dollyDelta*TOUCH_DOLLY_FACTOR);if(_this._state===ACTION.TOUCH_DOLLY_TRUCK||_this._state===ACTION.TOUCH_ZOOM_TRUCK){truckInternal_1(deltaX,deltaY)}break}case ACTION.TRUCK:case ACTION.TOUCH_TRUCK:{truckInternal_1(deltaX,deltaY);break}}_this.dispatchEvent({type:"control",originalEvent:event})};var endDragging_1=function(event){if(!_this.enabled)return;_this._state=ACTION.NONE;document.removeEventListener("mousemove",dragging_1);document.removeEventListener("touchmove",dragging_1,{passive:false});document.removeEventListener("mouseup",endDragging_1);document.removeEventListener("touchend",endDragging_1);_this.dispatchEvent({type:"controlend",originalEvent:event})};_this._domElement.addEventListener("mousedown",onMouseDown_1);_this._domElement.addEventListener("touchstart",onTouchStart_1);_this._domElement.addEventListener("wheel",onMouseWheel_1);_this._domElement.addEventListener("contextmenu",onContextMenu_1);_this._removeAllEventListeners=function(){_this._domElement.removeEventListener("mousedown",onMouseDown_1);_this._domElement.removeEventListener("touchstart",onTouchStart_1);_this._domElement.removeEventListener("wheel",onMouseWheel_1);_this._domElement.removeEventListener("contextmenu",onContextMenu_1);document.removeEventListener("mousemove",dragging_1);document.removeEventListener("touchmove",dragging_1,{passive:false});document.removeEventListener("mouseup",endDragging_1);document.removeEventListener("touchend",endDragging_1)}}_this.update(0);return _this}CameraControls.install=function(libs){THREE=libs.THREE;_ORIGIN=Object.freeze(new THREE.Vector3(0,0,0));_AXIS_Y=Object.freeze(new THREE.Vector3(0,1,0));_AXIS_Z=Object.freeze(new THREE.Vector3(0,0,1));_v2=new THREE.Vector2;_v3A=new THREE.Vector3;_v3B=new THREE.Vector3;_v3C=new THREE.Vector3;_xColumn=new THREE.Vector3;_yColumn=new THREE.Vector3;_sphericalA=new THREE.Spherical;_sphericalB=new THREE.Spherical;_box3A=new THREE.Box3;_box3B=new THREE.Box3;_quaternionA=new THREE.Quaternion;_quaternionB=new THREE.Quaternion;_rotationMatrix=new THREE.Matrix4;_raycaster=new THREE.Raycaster};Object.defineProperty(CameraControls,"ACTION",{get:function(){return readonlyACTION},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"currentAction",{get:function(){return this._state},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"distance",{get:function(){return this._spherical.radius},set:function(distance){if(this._spherical.radius===distance&&this._sphericalEnd.radius===distance)return;this._spherical.radius=distance;this._sphericalEnd.radius=distance;this._needsUpdate=true},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"azimuthAngle",{get:function(){return this._spherical.theta},set:function(azimuthAngle){if(this._spherical.theta===azimuthAngle&&this._sphericalEnd.theta===azimuthAngle)return;this._spherical.theta=azimuthAngle;this._sphericalEnd.theta=azimuthAngle;this._needsUpdate=true},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"polarAngle",{get:function(){return this._spherical.phi},set:function(polarAngle){if(this._spherical.phi===polarAngle&&this._sphericalEnd.phi===polarAngle)return;this._spherical.phi=polarAngle;this._sphericalEnd.phi=polarAngle;this._needsUpdate=true},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"phiSpeed",{set:function(speed){console.warn("phiSpeed was renamed. use azimuthRotateSpeed instead");this.azimuthRotateSpeed=speed},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"thetaSpeed",{set:function(speed){console.warn("thetaSpeed was renamed. use polarRotateSpeed instead");this.polarRotateSpeed=speed},enumerable:false,configurable:true});Object.defineProperty(CameraControls.prototype,"boundaryEnclosesCamera",{get:function(){return this._boundaryEnclosesCamera},set:function(boundaryEnclosesCamera){this._boundaryEnclosesCamera=boundaryEnclosesCamera;this._needsUpdate=true},enumerable:false,configurable:true});CameraControls.prototype.addEventListener=function(type,listener){_super.prototype.addEventListener.call(this,type,listener)};CameraControls.prototype.removeEventListener=function(type,listener){_super.prototype.removeEventListener.call(this,type,listener)};CameraControls.prototype.rotate=function(azimuthAngle,polarAngle,enableTransition){if(enableTransition===void 0){enableTransition=false}this.rotateTo(this._sphericalEnd.theta+azimuthAngle,this._sphericalEnd.phi+polarAngle,enableTransition)};CameraControls.prototype.rotateTo=function(azimuthAngle,polarAngle,enableTransition){if(enableTransition===void 0){enableTransition=false}var theta=THREE.MathUtils.clamp(azimuthAngle,this.minAzimuthAngle,this.maxAzimuthAngle);var phi=THREE.MathUtils.clamp(polarAngle,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=theta;this._sphericalEnd.phi=phi;this._sphericalEnd.makeSafe();if(!enableTransition){this._spherical.theta=this._sphericalEnd.theta;this._spherical.phi=this._sphericalEnd.phi}this._needsUpdate=true};CameraControls.prototype.dolly=function(distance,enableTransition){if(enableTransition===void 0){enableTransition=false}this.dollyTo(this._sphericalEnd.radius-distance,enableTransition)};CameraControls.prototype.dollyTo=function(distance,enableTransition){if(enableTransition===void 0){enableTransition=false}if(notSupportedInOrthographicCamera(this._camera,"dolly"))return;this._sphericalEnd.radius=THREE.MathUtils.clamp(distance,this.minDistance,this.maxDistance);if(!enableTransition){this._spherical.radius=this._sphericalEnd.radius}this._needsUpdate=true};CameraControls.prototype.zoom=function(zoomStep,enableTransition){if(enableTransition===void 0){enableTransition=false}this.zoomTo(this._zoomEnd+zoomStep,enableTransition)};CameraControls.prototype.zoomTo=function(zoom,enableTransition){if(enableTransition===void 0){enableTransition=false}this._zoomEnd=THREE.MathUtils.clamp(zoom,this.minZoom,this.maxZoom);if(!enableTransition){this._zoom=this._zoomEnd}this._needsUpdate=true};CameraControls.prototype.pan=function(x,y,enableTransition){if(enableTransition===void 0){enableTransition=false}console.log("`pan` has been renamed to `truck`");this.truck(x,y,enableTransition)};CameraControls.prototype.truck=function(x,y,enableTransition){if(enableTransition===void 0){enableTransition=false}this._camera.updateMatrix();_xColumn.setFromMatrixColumn(this._camera.matrix,0);_yColumn.setFromMatrixColumn(this._camera.matrix,1);_xColumn.multiplyScalar(x);_yColumn.multiplyScalar(-y);var offset=_v3A.copy(_xColumn).add(_yColumn);this._encloseToBoundary(this._targetEnd,offset,this.boundaryFriction);if(!enableTransition){this._target.copy(this._targetEnd)}this._needsUpdate=true};CameraControls.prototype.forward=function(distance,enableTransition){if(enableTransition===void 0){enableTransition=false}_v3A.setFromMatrixColumn(this._camera.matrix,0);_v3A.crossVectors(this._camera.up,_v3A);_v3A.multiplyScalar(distance);this._encloseToBoundary(this._targetEnd,_v3A,this.boundaryFriction);if(!enableTransition){this._target.copy(this._targetEnd)}this._needsUpdate=true};CameraControls.prototype.moveTo=function(x,y,z,enableTransition){if(enableTransition===void 0){enableTransition=false}this._targetEnd.set(x,y,z);if(!enableTransition){this._target.copy(this._targetEnd)}this._needsUpdate=true};CameraControls.prototype.fitTo=function(box3OrObject,enableTransition,_a){var _b=_a===void 0?{}:_a,_c=_b.paddingLeft,paddingLeft=_c===void 0?0:_c,_d=_b.paddingRight,paddingRight=_d===void 0?0:_d,_e=_b.paddingBottom,paddingBottom=_e===void 0?0:_e,_f=_b.paddingTop,paddingTop=_f===void 0?0:_f;var aabb=box3OrObject.isBox3?_box3A.copy(box3OrObject):_box3A.setFromObject(box3OrObject);var theta=roundToStep(this._sphericalEnd.theta,PI_HALF);var phi=roundToStep(this._sphericalEnd.phi,PI_HALF);this.rotateTo(theta,phi,enableTransition);var normal=_v3A.setFromSpherical(this._sphericalEnd).normalize();var rotation=_quaternionA.setFromUnitVectors(normal,_AXIS_Z);var viewFromPolar=approxEquals(Math.abs(normal.y),1);if(viewFromPolar){rotation.multiply(_quaternionB.setFromAxisAngle(_AXIS_Y,theta))}var bb=_box3B.makeEmpty();_v3B.copy(aabb.min).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.min).setX(aabb.max.x).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.min).setY(aabb.max.y).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.max).setZ(aabb.min.z).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.min).setZ(aabb.max.z).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.max).setY(aabb.min.y).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.max).setX(aabb.min.x).applyQuaternion(rotation);bb.expandByPoint(_v3B);_v3B.copy(aabb.max).applyQuaternion(rotation);bb.expandByPoint(_v3B);rotation.setFromUnitVectors(_AXIS_Z,normal);bb.min.x-=paddingLeft;bb.min.y-=paddingBottom;bb.max.x+=paddingRight;bb.max.y+=paddingTop;var bbSize=bb.getSize(_v3A);var center=bb.getCenter(_v3B).applyQuaternion(rotation);var isPerspectiveCamera=this._camera.isPerspectiveCamera;var isOrthographicCamera=this._camera.isOrthographicCamera;if(isPerspectiveCamera){var distance=this.getDistanceToFit(bbSize.x,bbSize.y,bbSize.z);this.moveTo(center.x,center.y,center.z,enableTransition);this.dollyTo(distance,enableTransition);return}else if(isOrthographicCamera){var camera=this._camera;var width=camera.right-camera.left;var height=camera.top-camera.bottom;var zoom=Math.min(width/bbSize.x,height/bbSize.y);this.moveTo(center.x,center.y,center.z,enableTransition);this.zoomTo(zoom,enableTransition);return}};CameraControls.prototype.setLookAt=function(positionX,positionY,positionZ,targetX,targetY,targetZ,enableTransition){if(enableTransition===void 0){enableTransition=false}var position=_v3A.set(positionX,positionY,positionZ);var target=_v3B.set(targetX,targetY,targetZ);this._targetEnd.copy(target);this._sphericalEnd.setFromVector3(position.sub(target).applyQuaternion(this._yAxisUpSpace));this.normalizeRotations();if(!enableTransition){this._target.copy(this._targetEnd);this._spherical.copy(this._sphericalEnd)}this._needsUpdate=true};CameraControls.prototype.lerpLookAt=function(positionAX,positionAY,positionAZ,targetAX,targetAY,targetAZ,positionBX,positionBY,positionBZ,targetBX,targetBY,targetBZ,t,enableTransition){if(enableTransition===void 0){enableTransition=false}var positionA=_v3A.set(positionAX,positionAY,positionAZ);var targetA=_v3B.set(targetAX,targetAY,targetAZ);_sphericalA.setFromVector3(positionA.sub(targetA).applyQuaternion(this._yAxisUpSpace));var targetB=_v3A.set(targetBX,targetBY,targetBZ);this._targetEnd.copy(targetA).lerp(targetB,t);var positionB=_v3B.set(positionBX,positionBY,positionBZ);_sphericalB.setFromVector3(positionB.sub(targetB).applyQuaternion(this._yAxisUpSpace));var deltaTheta=_sphericalB.theta-_sphericalA.theta;var deltaPhi=_sphericalB.phi-_sphericalA.phi;var deltaRadius=_sphericalB.radius-_sphericalA.radius;this._sphericalEnd.set(_sphericalA.radius+deltaRadius*t,_sphericalA.phi+deltaPhi*t,_sphericalA.theta+deltaTheta*t);this.normalizeRotations();if(!enableTransition){this._target.copy(this._targetEnd);this._spherical.copy(this._sphericalEnd)}this._needsUpdate=true};CameraControls.prototype.setPosition=function(positionX,positionY,positionZ,enableTransition){if(enableTransition===void 0){enableTransition=false}this.setLookAt(positionX,positionY,positionZ,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,enableTransition)};CameraControls.prototype.setTarget=function(targetX,targetY,targetZ,enableTransition){if(enableTransition===void 0){enableTransition=false}var pos=this.getPosition(_v3A);this.setLookAt(pos.x,pos.y,pos.z,targetX,targetY,targetZ,enableTransition)};CameraControls.prototype.setBoundary=function(box3){if(!box3){this._boundary.min.set(-Infinity,-Infinity,-Infinity);this._boundary.max.set(Infinity,Infinity,Infinity);this._needsUpdate=true;return}this._boundary.copy(box3);this._boundary.clampPoint(this._targetEnd,this._targetEnd);this._needsUpdate=true};CameraControls.prototype.setViewport=function(viewportOrX,y,width,height){if(viewportOrX===null){this._viewport=null;return}this._viewport=this._viewport||new THREE.Vector4;if(typeof viewportOrX==="number"){this._viewport.set(viewportOrX,y,width,height)}else{this._viewport.copy(viewportOrX)}};CameraControls.prototype.getDistanceToFit=function(width,height,depth){if(notSupportedInOrthographicCamera(this._camera,"getDistanceToFit"))return this._spherical.radius;var camera=this._camera;var boundingRectAspect=width/height;var fov=camera.getEffectiveFOV()*THREE.MathUtils.DEG2RAD;var aspect=camera.aspect;var heightToFit=boundingRectAspect=1;if(!hasCollider)return distance;if(notSupportedInOrthographicCamera(this._camera,"_collisionTest"))return distance;distance=this._spherical.radius;var direction=_v3A.setFromSpherical(this._spherical).divideScalar(distance);_rotationMatrix.lookAt(_ORIGIN,direction,this._camera.up);for(var i=0;i<4;i++){var nearPlaneCorner=_v3B.copy(this._nearPlaneCorners[i]);nearPlaneCorner.applyMatrix4(_rotationMatrix);var origin_1=_v3C.addVectors(this._target,nearPlaneCorner);_raycaster.set(origin_1,direction);_raycaster.far=distance;var intersects=_raycaster.intersectObjects(this.colliderMeshes);if(intersects.length!==0&&intersects[0].distance Date: Wed, 9 Sep 2020 10:36:57 +0200 Subject: [PATCH 2/2] Omitted `return` in constructor if user has not run `install()` Co-authored-by: Akihiro Oyamada --- src/CameraControls.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CameraControls.ts b/src/CameraControls.ts index bc63083..d58d978 100755 --- a/src/CameraControls.ts +++ b/src/CameraControls.ts @@ -155,7 +155,6 @@ export class CameraControls extends EventDispatcher { if (typeof THREE === 'undefined') { //Chech if the user has installed THREE console.error("Three.js is undefined. You must first run CameraControls.install({ THREE: THREE }). Check the docs for further information.") - return; //Stop the execution as there will be errors } this._camera = camera;