Download assets/arcRotateCamera-BmL2RkdB.js from Sky-06/huggingface-static-99f708: direct link, hf CLI and curl.
- Browser
- Download file 48.6 kB
-
https://huggingface.co/spaces/Sky-06/huggingface-static-99f708/resolve/main/assets/arcRotateCamera-BmL2RkdB.js
- Command line
-
hf download hf://spaces/Sky-06/huggingface-static-99f708/assets/arcRotateCamera-BmL2RkdB.js
-
curl -L -o arcRotateCamera-BmL2RkdB.js https://huggingface.co/spaces/Sky-06/huggingface-static-99f708/resolve/main/assets/arcRotateCamera-BmL2RkdB.js
48.6 kB
| import{_ as r,s as h,a as U,b as H,c as K}from"./bufferUtils-DTRdUD8L.js";import{O as X,V as l,M as w,T as v,a as L,Q as F}from"./math.vector-C1xyPDEl.js";import{E as I,C as N,R as G}from"./math.scalar.functions-DkeaWAWz.js";import{N as q}from"./node-C-Iu0ALa.js";import{M as V,C as b}from"./mesh-BPwLonvs.js";import{P as m,K as Q,E as j}from"./deviceInputEvents-BTza-zoR.js";import{P as x}from"./decorators.serialization-C7d7ykGG.js";import{B as J,E as Z,a as $}from"./easing-Wc0jPSIm.js";import{A as T}from"./animation-IftAdLIx.js";import{C as z,a as tt,T as it}from"./cameraInputsManager-BKG-Rtee.js";import{T as B}from"./tools-D01N7ptR.js";import{P as et}from"./math.plane-Ce_75-g5.js";import"./mesh.vertexData-Cr3zcPIw.js";import"./buffer-DqKlo1ts.js";import"./dataBuffer-CgoqiUzT.js";import"./math.color-CzLaKyb6.js";import"./subMesh-UWDo5wjI.js";import"./drawWrapper-CZVk0xN-.js";import"./smartArray-CO6iJ0u5.js";import"./math.viewport-CgkTt1RS.js";import"./sceneComponent-Dflhczui.js";import"./lightConstants-B1TSTh-k.js";import"./sceneLoaderFlags-wywyb9ml.js";import"./index-BoUtOhbH.js";import"./math.axis-Ck7JfPPj.js";import"./material-CrEsrP1R.js";import"./texture-BEqhDl5Y.js";import"./baseTexture-CgAggsey.js";import"./drawWrapper.functions-Dzz0ghog.js";import"./math.path-DFucxaHn.js";class st{constructor(){this._zoomStopsAnimation=!1,this._idleRotationSpeed=.05,this._idleRotationWaitTime=2e3,this._idleRotationSpinupTime=2e3,this.targetAlpha=null,this._attachedCamera=null,this._isPointerDown=!1,this._lastFrameTime=null,this._lastInteractionTime=-1/0,this._cameraRotationSpeed=0,this._lastFrameRadius=0}get name(){return"AutoRotation"}set zoomStopsAnimation(t){this._zoomStopsAnimation=t}get zoomStopsAnimation(){return this._zoomStopsAnimation}set idleRotationSpeed(t){this._idleRotationSpeed=t}get idleRotationSpeed(){return this._idleRotationSpeed}set idleRotationWaitTime(t){this._idleRotationWaitTime=t}get idleRotationWaitTime(){return this._idleRotationWaitTime}set idleRotationSpinupTime(t){this._idleRotationSpinupTime=t}get idleRotationSpinupTime(){return this._idleRotationSpinupTime}get rotationInProgress(){return Math.abs(this._cameraRotationSpeed)>0}get attachedNode(){return this._attachedCamera}init(){}attach(t){this._attachedCamera=t;const i=this._attachedCamera.getScene();this._onPrePointerObservableObserver=i.onPrePointerObservable.add(e=>{if(e.type===m.POINTERDOWN){this._isPointerDown=!0;return}e.type===m.POINTERUP&&(this._isPointerDown=!1)}),this._onAfterCheckInputsObserver=t.onAfterCheckInputsObservable.add(()=>{if(this._reachTargetAlpha())return;const e=x.Now;let s=0;this._lastFrameTime!=null&&(s=e-this._lastFrameTime),this._lastFrameTime=e,this._applyUserInteraction();const n=e-this._lastInteractionTime-this._idleRotationWaitTime,o=Math.max(Math.min(n/this._idleRotationSpinupTime,1),0);this._cameraRotationSpeed=this._idleRotationSpeed*o,this._attachedCamera&&(this._attachedCamera.alpha-=this._cameraRotationSpeed*(s/1e3))})}detach(){if(!this._attachedCamera)return;const t=this._attachedCamera.getScene();this._onPrePointerObservableObserver&&t.onPrePointerObservable.remove(this._onPrePointerObservableObserver),this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._attachedCamera=null,this._lastFrameTime=null}resetLastInteractionTime(t){this._lastInteractionTime=t??x.Now}_reachTargetAlpha(){return this._attachedCamera&&this.targetAlpha?Math.abs(this._attachedCamera.alpha-this.targetAlpha)<I:!1}_userIsZooming(){return this._attachedCamera?this._attachedCamera.inertialRadiusOffset!==0:!1}_shouldAnimationStopForInteraction(){if(!this._attachedCamera)return!1;let t=!1;return this._lastFrameRadius===this._attachedCamera.radius&&this._attachedCamera.inertialRadiusOffset!==0&&(t=!0),this._lastFrameRadius=this._attachedCamera.radius,this._zoomStopsAnimation?t:this._userIsZooming()}_applyUserInteraction(){this._userIsMoving()&&!this._shouldAnimationStopForInteraction()&&(this._lastInteractionTime=x.Now)}_userIsMoving(){return this._attachedCamera?this._attachedCamera.inertialAlphaOffset!==0||this._attachedCamera.inertialBetaOffset!==0||this._attachedCamera.inertialRadiusOffset!==0||this._attachedCamera.inertialPanningX!==0||this._attachedCamera.inertialPanningY!==0||this._isPointerDown:!1}}class S{constructor(){this.transitionDuration=450,this.lowerRadiusTransitionRange=2,this.upperRadiusTransitionRange=-2,this._autoTransitionRange=!1,this._attachedCamera=null,this._radiusIsAnimating=!1,this._radiusBounceTransition=null,this._animatables=new Array}get name(){return"Bouncing"}get autoTransitionRange(){return this._autoTransitionRange}set autoTransitionRange(t){if(this._autoTransitionRange===t)return;this._autoTransitionRange=t;const i=this._attachedCamera;i&&(t?this._onMeshTargetChangedObserver=i.onMeshTargetChangedObservable.add(e=>{if(e&&(e.computeWorldMatrix(!0),e.getBoundingInfo)){const s=e.getBoundingInfo().diagonalLength;this.lowerRadiusTransitionRange=s*.05,this.upperRadiusTransitionRange=s*.05}}):this._onMeshTargetChangedObserver&&i.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver))}get attachedNode(){return this._attachedCamera}init(){}attach(t){this._attachedCamera=t,this._onAfterCheckInputsObserver=t.onAfterCheckInputsObservable.add(()=>{this._attachedCamera&&(this._isRadiusAtLimit(this._attachedCamera.lowerRadiusLimit)&&this._applyBoundRadiusAnimation(this.lowerRadiusTransitionRange),this._isRadiusAtLimit(this._attachedCamera.upperRadiusLimit)&&this._applyBoundRadiusAnimation(this.upperRadiusTransitionRange))})}detach(){this._attachedCamera&&(this._onAfterCheckInputsObserver&&this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._onMeshTargetChangedObserver&&this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver),this._attachedCamera=null)}_isRadiusAtLimit(t){return this._attachedCamera?this._attachedCamera.radius===t&&!this._radiusIsAnimating:!1}_applyBoundRadiusAnimation(t){if(!this._attachedCamera)return;this._radiusBounceTransition||(S.EasingFunction.setEasingMode(S.EasingMode),this._radiusBounceTransition=T.CreateAnimation("radius",T.ANIMATIONTYPE_FLOAT,60,S.EasingFunction)),this._cachedWheelPrecision=this._attachedCamera.wheelPrecision,this._attachedCamera.wheelPrecision=1/0,this._attachedCamera.inertialRadiusOffset=0,this.stopAllAnimations(),this._radiusIsAnimating=!0;const i=T.TransitionTo("radius",this._attachedCamera.radius+t,this._attachedCamera,this._attachedCamera.getScene(),60,this._radiusBounceTransition,this.transitionDuration,()=>this._clearAnimationLocks());i&&this._animatables.push(i)}_clearAnimationLocks(){this._radiusIsAnimating=!1,this._attachedCamera&&(this._attachedCamera.wheelPrecision=this._cachedWheelPrecision)}stopAllAnimations(){for(this._attachedCamera&&(this._attachedCamera.animations=[]);this._animatables.length;)this._animatables[0].onAnimationEnd=null,this._animatables[0].stop(),this._animatables.shift()}}S.EasingFunction=new J(.3);S.EasingMode=Z.EASINGMODE_EASEOUT;class f{constructor(){this.onTargetFramingAnimationEndObservable=new X,this._mode=f.FitFrustumSidesMode,this._radiusScale=1,this._positionScale=.5,this._defaultElevation=.3,this._elevationReturnTime=1500,this._elevationReturnWaitTime=1e3,this._zoomStopsAnimation=!1,this._framingTime=1500,this.autoCorrectCameraLimitsAndSensibility=!0,this._attachedCamera=null,this._isPointerDown=!1,this._lastInteractionTime=-1/0,this._animatables=new Array,this._betaIsAnimating=!1}get name(){return"Framing"}set mode(t){this._mode=t}get mode(){return this._mode}set radiusScale(t){this._radiusScale=t}get radiusScale(){return this._radiusScale}set positionScale(t){this._positionScale=t}get positionScale(){return this._positionScale}set defaultElevation(t){this._defaultElevation=t}get defaultElevation(){return this._defaultElevation}set elevationReturnTime(t){this._elevationReturnTime=t}get elevationReturnTime(){return this._elevationReturnTime}set elevationReturnWaitTime(t){this._elevationReturnWaitTime=t}get elevationReturnWaitTime(){return this._elevationReturnWaitTime}set zoomStopsAnimation(t){this._zoomStopsAnimation=t}get zoomStopsAnimation(){return this._zoomStopsAnimation}set framingTime(t){this._framingTime=t}get framingTime(){return this._framingTime}get attachedNode(){return this._attachedCamera}init(){}attach(t){this._attachedCamera=t;const i=this._attachedCamera.getScene();f.EasingFunction.setEasingMode(f.EasingMode),this._onPrePointerObservableObserver=i.onPrePointerObservable.add(e=>{if(e.type===m.POINTERDOWN){this._isPointerDown=!0;return}e.type===m.POINTERUP&&(this._isPointerDown=!1)}),this._onMeshTargetChangedObserver=t.onMeshTargetChangedObservable.add(e=>{e&&e.getBoundingInfo&&this.zoomOnMesh(e,void 0,()=>{this.onTargetFramingAnimationEndObservable.notifyObservers()})}),this._onAfterCheckInputsObserver=t.onAfterCheckInputsObservable.add(()=>{this._applyUserInteraction(),this._maintainCameraAboveGround()})}detach(){if(!this._attachedCamera)return;const t=this._attachedCamera.getScene();this._onPrePointerObservableObserver&&t.onPrePointerObservable.remove(this._onPrePointerObservableObserver),this._onAfterCheckInputsObserver&&this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._onMeshTargetChangedObserver&&this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver),this._attachedCamera=null}zoomOnMesh(t,i=!1,e=null){t.computeWorldMatrix(!0);const s=t.getBoundingInfo().boundingBox;this.zoomOnBoundingInfo(s.minimumWorld,s.maximumWorld,i,e)}zoomOnMeshHierarchy(t,i=!1,e=null){t.computeWorldMatrix(!0);const s=t.getHierarchyBoundingVectors(!0);this.zoomOnBoundingInfo(s.min,s.max,i,e)}zoomOnMeshesHierarchy(t,i=!1,e=null){const s=new l(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),n=new l(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);for(let o=0;o<t.length;o++){const c=t[o].getHierarchyBoundingVectors(!0);l.CheckExtends(c.min,s,n),l.CheckExtends(c.max,s,n)}this.zoomOnBoundingInfo(s,n,i,e)}zoomOnBoundingInfo(t,i,e=!1,s=null){let n;if(!this._attachedCamera)return!1;const o=t.y,c=i.y,a=o+(c-o)*this._positionScale,_=i.subtract(t).scale(.5);if(!isFinite(a))return!1;if(e)n=new l(0,a,0);else{const y=t.add(_);n=new l(y.x,a,y.z)}this._vectorTransition||(this._vectorTransition=T.CreateAnimation("target",T.ANIMATIONTYPE_VECTOR3,60,f.EasingFunction)),this._betaIsAnimating=!0;let p=T.TransitionTo("target",n,this._attachedCamera,this._attachedCamera.getScene(),60,this._vectorTransition,this._framingTime);p&&this._animatables.push(p);let O=0;if(this._mode===f.FitFrustumSidesMode){const y=this._calculateLowerRadiusFromModelBoundingSphere(t,i);this.autoCorrectCameraLimitsAndSensibility&&(this._attachedCamera.lowerRadiusLimit=_.length()+this._attachedCamera.minZ),O=y}else this._mode===f.IgnoreBoundsSizeMode&&(O=this._calculateLowerRadiusFromModelBoundingSphere(t,i),this.autoCorrectCameraLimitsAndSensibility&&this._attachedCamera.lowerRadiusLimit===null&&(this._attachedCamera.lowerRadiusLimit=this._attachedCamera.minZ));if(this.autoCorrectCameraLimitsAndSensibility){const y=i.subtract(t).length();this._attachedCamera.panningSensibility=5e3/y,this._attachedCamera.wheelPrecision=100/O}return this._radiusTransition||(this._radiusTransition=T.CreateAnimation("radius",T.ANIMATIONTYPE_FLOAT,60,f.EasingFunction)),p=T.TransitionTo("radius",O,this._attachedCamera,this._attachedCamera.getScene(),60,this._radiusTransition,this._framingTime,()=>{this.stopAllAnimations(),s&&s(),this._attachedCamera&&this._attachedCamera.useInputToRestoreState&&this._attachedCamera.storeState()}),p&&this._animatables.push(p),!0}_calculateLowerRadiusFromModelBoundingSphere(t,i){const e=this._attachedCamera;if(!e)return 0;let s=e._calculateLowerRadiusFromModelBoundingSphere(t,i,this._radiusScale);return e.lowerRadiusLimit&&this._mode===f.IgnoreBoundsSizeMode&&(s=s<e.lowerRadiusLimit?e.lowerRadiusLimit:s),e.upperRadiusLimit&&(s=s>e.upperRadiusLimit?e.upperRadiusLimit:s),s}_maintainCameraAboveGround(){if(this._elevationReturnTime<0)return;const t=x.Now-this._lastInteractionTime,i=Math.PI*.5-this._defaultElevation,e=Math.PI*.5;if(this._attachedCamera&&!this._betaIsAnimating&&this._attachedCamera.beta>e&&t>=this._elevationReturnWaitTime){this._betaIsAnimating=!0,this.stopAllAnimations(),this._betaTransition||(this._betaTransition=T.CreateAnimation("beta",T.ANIMATIONTYPE_FLOAT,60,f.EasingFunction));const s=T.TransitionTo("beta",i,this._attachedCamera,this._attachedCamera.getScene(),60,this._betaTransition,this._elevationReturnTime,()=>{this._clearAnimationLocks(),this.stopAllAnimations()});s&&this._animatables.push(s)}}_clearAnimationLocks(){this._betaIsAnimating=!1}_applyUserInteraction(){this.isUserIsMoving&&(this._lastInteractionTime=x.Now,this.stopAllAnimations(),this._clearAnimationLocks())}stopAllAnimations(){for(this._attachedCamera&&(this._attachedCamera.animations=[]);this._animatables.length;)this._animatables[0]&&(this._animatables[0].onAnimationEnd=null,this._animatables[0].stop()),this._animatables.shift()}get isUserIsMoving(){return this._attachedCamera?this._attachedCamera.inertialAlphaOffset!==0||this._attachedCamera.inertialBetaOffset!==0||this._attachedCamera.inertialRadiusOffset!==0||this._attachedCamera.inertialPanningX!==0||this._attachedCamera.inertialPanningY!==0||this._isPointerDown:!1}}f.EasingFunction=new $;f.EasingMode=Z.EASINGMODE_EASEINOUT;f.IgnoreBoundsSizeMode=0;f.FitFrustumSidesMode=1;class W{constructor(){this._currentMousePointerIdDown=-1,this.buttons=[0,1,2]}attachControl(t){t=B.BackCompatCameraNoPreventDefault(arguments);const i=this.camera.getEngine(),e=i.getInputElement();let s=0,n=null;this._pointA=null,this._pointB=null,this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._buttonsPressed=0,this._pointerInput=c=>{var O,y;const a=c.event,_=a.pointerType==="touch";if(c.type!==m.POINTERMOVE&&this.buttons.indexOf(a.button)===-1)return;const p=a.target;if(this._altKey=a.altKey,this._ctrlKey=a.ctrlKey,this._metaKey=a.metaKey,this._shiftKey=a.shiftKey,this._buttonsPressed=a.buttons,i.isPointerLock){const A=a.movementX,C=a.movementY;this.onTouch(null,A,C),this._pointA=null,this._pointB=null}else{if(c.type!==m.POINTERDOWN&&c.type!==m.POINTERDOUBLETAP&&_&&((O=this._pointA)==null?void 0:O.pointerId)!==a.pointerId&&((y=this._pointB)==null?void 0:y.pointerId)!==a.pointerId)return;if(c.type===m.POINTERDOWN&&(this._currentMousePointerIdDown===-1||_)){try{p==null||p.setPointerCapture(a.pointerId)}catch{}if(this._pointA===null)this._pointA={x:a.clientX,y:a.clientY,pointerId:a.pointerId,type:a.pointerType,button:a.button};else if(this._pointB===null)this._pointB={x:a.clientX,y:a.clientY,pointerId:a.pointerId,type:a.pointerType,button:a.button};else return;this._currentMousePointerIdDown===-1&&!_&&(this._currentMousePointerIdDown=a.pointerId),this.onButtonDown(a),t||(a.preventDefault(),e&&e.focus())}else if(c.type===m.POINTERDOUBLETAP)this.onDoubleTap(a.pointerType);else if(c.type===m.POINTERUP&&(this._currentMousePointerIdDown===a.pointerId||_)){try{p==null||p.releasePointerCapture(a.pointerId)}catch{}_||(this._pointB=null),i._badOS?this._pointA=this._pointB=null:this._pointB&&this._pointA&&this._pointA.pointerId==a.pointerId?(this._pointA=this._pointB,this._pointB=null):this._pointA&&this._pointB&&this._pointB.pointerId==a.pointerId?this._pointB=null:this._pointA=this._pointB=null,(s!==0||n)&&(this.onMultiTouch(this._pointA,this._pointB,s,0,n,null),s=0,n=null),this._currentMousePointerIdDown=-1,this.onButtonUp(a),t||a.preventDefault()}else if(c.type===m.POINTERMOVE){if(t||a.preventDefault(),this._pointA&&this._pointB===null){const A=a.clientX-this._pointA.x,C=a.clientY-this._pointA.y;this._pointA.x=a.clientX,this._pointA.y=a.clientY,this.onTouch(this._pointA,A,C)}else if(this._pointA&&this._pointB){const A=this._pointA.pointerId===a.pointerId?this._pointA:this._pointB;A.x=a.clientX,A.y=a.clientY;const C=this._pointA.x-this._pointB.x,E=this._pointA.y-this._pointB.y,M=C*C+E*E,Y={x:(this._pointA.x+this._pointB.x)/2,y:(this._pointA.y+this._pointB.y)/2,pointerId:a.pointerId,type:c.type};this.onMultiTouch(this._pointA,this._pointB,s,M,n,Y),n=Y,s=M}}}},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._pointerInput,m.POINTERDOWN|m.POINTERUP|m.POINTERMOVE|m.POINTERDOUBLETAP),this._onLostFocus=()=>{this._pointA=this._pointB=null,s=0,n=null,this.onLostFocus()},this._contextMenuBind=c=>this.onContextMenu(c),e&&e.addEventListener("contextmenu",this._contextMenuBind,!1);const o=this.camera.getScene().getEngine().getHostWindow();o&&B.RegisterTopRootEvents(o,[{name:"blur",handler:this._onLostFocus}])}detachControl(){if(this._onLostFocus){const t=this.camera.getScene().getEngine().getHostWindow();t&&B.UnregisterTopRootEvents(t,[{name:"blur",handler:this._onLostFocus}])}if(this._observer){if(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null,this._contextMenuBind){const t=this.camera.getScene().getEngine().getInputElement();t&&t.removeEventListener("contextmenu",this._contextMenuBind)}this._onLostFocus=null}this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._buttonsPressed=0,this._currentMousePointerIdDown=-1}getClassName(){return"BaseCameraPointersInput"}getSimpleName(){return"pointers"}onDoubleTap(t){}onTouch(t,i,e){}onMultiTouch(t,i,e,s,n,o){}onContextMenu(t){t.preventDefault()}onButtonDown(t){}onButtonUp(t){}onLostFocus(){}}r([h()],W.prototype,"buttons",void 0);class k extends W{constructor(){super(...arguments),this.pinchZoom=!0,this.multiTouchPanning=!0,this.multiTouchPanAndZoom=!0,this._isPinching=!1,this._twoFingerActivityCount=0,this._shouldStartPinchZoom=!1}_computePinchZoom(t,i){}_computeMultiTouchPanning(t,i){}onMultiTouch(t,i,e,s,n,o){e===0&&n===null||s===0&&o===null||(this.multiTouchPanAndZoom?(this._computePinchZoom(e,s),this._computeMultiTouchPanning(n,o)):this.multiTouchPanning&&this.pinchZoom?(this._twoFingerActivityCount++,this._isPinching||this._shouldStartPinchZoom?(this._computePinchZoom(e,s),this._isPinching=!0):this._computeMultiTouchPanning(n,o)):this.multiTouchPanning?this._computeMultiTouchPanning(n,o):this.pinchZoom&&this._computePinchZoom(e,s))}onButtonUp(t){this._twoFingerActivityCount=0,this._isPinching=!1}onLostFocus(){this._twoFingerActivityCount=0,this._isPinching=!1}}r([h()],k.prototype,"pinchZoom",void 0);r([h()],k.prototype,"multiTouchPanning",void 0);r([h()],k.prototype,"multiTouchPanAndZoom",void 0);class R extends k{constructor(){super(...arguments),this.buttons=[0,1,2],this.angularSensibilityX=1e3,this.angularSensibilityY=1e3,this.pinchPrecision=12,this.pinchDeltaPercentage=0,this.useNaturalPinchZoom=!1,this.panningSensibility=1e3,this.pinchInwards=!0,this._isPanClick=!1}getClassName(){return"ArcRotateCameraPointersInput"}_computeMultiTouchPanning(t,i){if(this.panningSensibility!==0&&t&&i){const e=i.x-t.x,s=i.y-t.y;this.camera.inertialPanningX+=-e/this.panningSensibility,this.camera.inertialPanningY+=s/this.panningSensibility}}_computePinchZoom(t,i){const e=this.camera.radius||R.MinimumRadiusForPinch;this.useNaturalPinchZoom?this.camera.radius=e*Math.sqrt(t)/Math.sqrt(i):this.pinchDeltaPercentage?this.camera.inertialRadiusOffset+=(i-t)*.001*e*this.pinchDeltaPercentage:this.camera.inertialRadiusOffset+=(i-t)/(this.pinchPrecision*(this.pinchInwards?1:-1)*(this.angularSensibilityX+this.angularSensibilityY)/2)}onTouch(t,i,e){this.panningSensibility!==0&&(this._ctrlKey&&this.camera._useCtrlForPanning||this._isPanClick)?(this.camera.inertialPanningX+=-i/this.panningSensibility,this.camera.inertialPanningY+=e/this.panningSensibility):(this.camera.inertialAlphaOffset-=i/this.angularSensibilityX,this.camera.inertialBetaOffset-=e/this.angularSensibilityY)}onDoubleTap(){this.camera.useInputToRestoreState&&this.camera.restoreState()}onMultiTouch(t,i,e,s,n,o){this._shouldStartPinchZoom=this._twoFingerActivityCount<20&&Math.abs(Math.sqrt(s)-Math.sqrt(e))>this.camera.pinchToPanMaxDistance,super.onMultiTouch(t,i,e,s,n,o)}onButtonDown(t){this._isPanClick=t.button===this.camera._panningMouseButton,super.onButtonDown(t)}onButtonUp(t){super.onButtonUp(t)}onLostFocus(){this._isPanClick=!1,super.onLostFocus()}}R.MinimumRadiusForPinch=.001;r([h()],R.prototype,"buttons",void 0);r([h()],R.prototype,"angularSensibilityX",void 0);r([h()],R.prototype,"angularSensibilityY",void 0);r([h()],R.prototype,"pinchPrecision",void 0);r([h()],R.prototype,"pinchDeltaPercentage",void 0);r([h()],R.prototype,"useNaturalPinchZoom",void 0);r([h()],R.prototype,"panningSensibility",void 0);z.ArcRotateCameraPointersInput=R;class P{constructor(){this.keysUp=[38],this.keysDown=[40],this.keysLeft=[37],this.keysRight=[39],this.keysReset=[220],this.panningSensibility=50,this.zoomingSensibility=25,this.useAltToZoom=!0,this.angularSpeed=.01,this._keys=new Array}attachControl(t){t=B.BackCompatCameraNoPreventDefault(arguments),!this._onCanvasBlurObserver&&(this._scene=this.camera.getScene(),this._engine=this._scene.getEngine(),this._onCanvasBlurObserver=this._engine.onCanvasBlurObservable.add(()=>{this._keys.length=0}),this._onKeyboardObserver=this._scene.onKeyboardObservable.add(i=>{const e=i.event;if(!e.metaKey){if(i.type===Q.KEYDOWN)this._ctrlPressed=e.ctrlKey,this._altPressed=e.altKey,(this.keysUp.indexOf(e.keyCode)!==-1||this.keysDown.indexOf(e.keyCode)!==-1||this.keysLeft.indexOf(e.keyCode)!==-1||this.keysRight.indexOf(e.keyCode)!==-1||this.keysReset.indexOf(e.keyCode)!==-1)&&(this._keys.indexOf(e.keyCode)===-1&&this._keys.push(e.keyCode),e.preventDefault&&(t||e.preventDefault()));else if(this.keysUp.indexOf(e.keyCode)!==-1||this.keysDown.indexOf(e.keyCode)!==-1||this.keysLeft.indexOf(e.keyCode)!==-1||this.keysRight.indexOf(e.keyCode)!==-1||this.keysReset.indexOf(e.keyCode)!==-1){const s=this._keys.indexOf(e.keyCode);s>=0&&this._keys.splice(s,1),e.preventDefault&&(t||e.preventDefault())}}}))}detachControl(){this._scene&&(this._onKeyboardObserver&&this._scene.onKeyboardObservable.remove(this._onKeyboardObserver),this._onCanvasBlurObserver&&this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver),this._onKeyboardObserver=null,this._onCanvasBlurObserver=null),this._keys.length=0}checkInputs(){if(this._onKeyboardObserver){const t=this.camera;for(let i=0;i<this._keys.length;i++){const e=this._keys[i];this.keysLeft.indexOf(e)!==-1?this._ctrlPressed&&this.camera._useCtrlForPanning?t.inertialPanningX-=1/this.panningSensibility:t.inertialAlphaOffset-=this.angularSpeed:this.keysUp.indexOf(e)!==-1?this._ctrlPressed&&this.camera._useCtrlForPanning?t.inertialPanningY+=1/this.panningSensibility:this._altPressed&&this.useAltToZoom?t.inertialRadiusOffset+=1/this.zoomingSensibility:t.inertialBetaOffset-=this.angularSpeed:this.keysRight.indexOf(e)!==-1?this._ctrlPressed&&this.camera._useCtrlForPanning?t.inertialPanningX+=1/this.panningSensibility:t.inertialAlphaOffset+=this.angularSpeed:this.keysDown.indexOf(e)!==-1?this._ctrlPressed&&this.camera._useCtrlForPanning?t.inertialPanningY-=1/this.panningSensibility:this._altPressed&&this.useAltToZoom?t.inertialRadiusOffset-=1/this.zoomingSensibility:t.inertialBetaOffset+=this.angularSpeed:this.keysReset.indexOf(e)!==-1&&t.useInputToRestoreState&&t.restoreState()}}}getClassName(){return"ArcRotateCameraKeyboardMoveInput"}getSimpleName(){return"keyboard"}}r([h()],P.prototype,"keysUp",void 0);r([h()],P.prototype,"keysDown",void 0);r([h()],P.prototype,"keysLeft",void 0);r([h()],P.prototype,"keysRight",void 0);r([h()],P.prototype,"keysReset",void 0);r([h()],P.prototype,"panningSensibility",void 0);r([h()],P.prototype,"zoomingSensibility",void 0);r([h()],P.prototype,"useAltToZoom",void 0);r([h()],P.prototype,"angularSpeed",void 0);z.ArcRotateCameraKeyboardMoveInput=P;const at=40;class D{constructor(){this.wheelPrecision=3,this.zoomToMouseLocation=!1,this.wheelDeltaPercentage=0,this.customComputeDeltaFromMouseWheel=null,this._viewOffset=new l(0,0,0),this._globalOffset=new l(0,0,0),this._inertialPanning=l.Zero()}_computeDeltaFromMouseWheelLegacyEvent(t,i){let e;const s=t*.01*this.wheelDeltaPercentage*i;return t>0?e=s/(1+this.wheelDeltaPercentage):e=s*(1+this.wheelDeltaPercentage),e}attachControl(t){t=B.BackCompatCameraNoPreventDefault(arguments),this._wheel=i=>{if(i.type!==m.POINTERWHEEL)return;const e=i.event;let s;const n=e.deltaMode===j.DOM_DELTA_LINE?at:1,o=-(e.deltaY*n);if(this.customComputeDeltaFromMouseWheel)s=this.customComputeDeltaFromMouseWheel(o,this,e);else if(this.wheelDeltaPercentage){if(s=this._computeDeltaFromMouseWheelLegacyEvent(o,this.camera.radius),s>0){let c=this.camera.radius,a=this.camera.inertialRadiusOffset+s;for(let _=0;_<20&&!(c<=a||Math.abs(a*this.camera.inertia)<.001);_++)c-=a,a*=this.camera.inertia;c=N(c,0,Number.MAX_VALUE),s=this._computeDeltaFromMouseWheelLegacyEvent(o,c)}}else s=o/(this.wheelPrecision*40);s&&(this.zoomToMouseLocation?(this._hitPlane||this._updateHitPlane(),this._zoomToMouse(s)):this.camera.inertialRadiusOffset+=s),e.preventDefault&&(t||e.preventDefault())},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._wheel,m.POINTERWHEEL),this.zoomToMouseLocation&&this._inertialPanning.setAll(0)}detachControl(){this._observer&&(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null,this._wheel=null)}checkInputs(){if(!this.zoomToMouseLocation)return;const t=this.camera;0+t.inertialAlphaOffset+t.inertialBetaOffset+t.inertialRadiusOffset&&(this._updateHitPlane(),t.target.addInPlace(this._inertialPanning),this._inertialPanning.scaleInPlace(t.inertia),this._zeroIfClose(this._inertialPanning))}getClassName(){return"ArcRotateCameraMouseWheelInput"}getSimpleName(){return"mousewheel"}_updateHitPlane(){const t=this.camera,i=t.target.subtract(t.position);this._hitPlane=et.FromPositionAndNormal(t.target,i)}_getPosition(){const t=this.camera,i=t.getScene(),e=i.createPickingRay(i.pointerX,i.pointerY,w.Identity(),t,!1);(t.targetScreenOffset.x!==0||t.targetScreenOffset.y!==0)&&(this._viewOffset.set(t.targetScreenOffset.x,t.targetScreenOffset.y,0),t.getViewMatrix().invertToRef(t._cameraTransformMatrix),this._globalOffset=l.TransformNormal(this._viewOffset,t._cameraTransformMatrix),e.origin.addInPlace(this._globalOffset));let s=0;return this._hitPlane&&(s=e.intersectsPlane(this._hitPlane)??0),e.origin.addInPlace(e.direction.scaleInPlace(s))}_zoomToMouse(t){const i=this.camera,e=1-i.inertia;if(i.lowerRadiusLimit){const a=i.lowerRadiusLimit??0;i.radius-(i.inertialRadiusOffset+t)/e<a&&(t=(i.radius-a)*e-i.inertialRadiusOffset)}if(i.upperRadiusLimit){const a=i.upperRadiusLimit??0;i.radius-(i.inertialRadiusOffset+t)/e>a&&(t=(i.radius-a)*e-i.inertialRadiusOffset)}const n=t/e/i.radius,o=this._getPosition(),c=v.Vector3[6];o.subtractToRef(i.target,c),c.scaleInPlace(n),c.scaleInPlace(e),this._inertialPanning.addInPlace(c),i.inertialRadiusOffset+=t}_zeroIfClose(t){Math.abs(t.x)<I&&(t.x=0),Math.abs(t.y)<I&&(t.y=0),Math.abs(t.z)<I&&(t.z=0)}}r([h()],D.prototype,"wheelPrecision",void 0);r([h()],D.prototype,"zoomToMouseLocation",void 0);r([h()],D.prototype,"wheelDeltaPercentage",void 0);z.ArcRotateCameraMouseWheelInput=D;class nt extends tt{constructor(t){super(t)}addMouseWheel(){return this.add(new D),this}addPointers(){return this.add(new R),this}addKeyboard(){return this.add(new P),this}}q.AddNodeConstructor("ArcRotateCamera",(d,t)=>()=>new u(d,0,0,1,l.Zero(),t));function ot(d){let t=Math.PI/2;return d.x===0&&d.z===0||(t=Math.acos(d.x/Math.sqrt(Math.pow(d.x,2)+Math.pow(d.z,2)))),d.z<0&&(t=2*Math.PI-t),t}function rt(d,t){return Math.acos(d/t)}function g(d,t){return isNaN(d)?t:d}class u extends it{get target(){return this._target}set target(t){this.setTarget(t)}get targetHost(){return this._targetHost}set targetHost(t){t&&this.setTarget(t)}getTarget(){return this.target}get position(){return this._position}set position(t){this.setPosition(t)}set upVector(t){this._upToYMatrix||(this._yToUpMatrix=new w,this._upToYMatrix=new w,this._upVector=l.Zero()),t.normalize(),this._upVector.copyFrom(t),this.setMatUp()}get upVector(){return this._upVector}setMatUp(){w.RotationAlignToRef(l.UpReadOnly,this._upVector,this._yToUpMatrix),w.RotationAlignToRef(this._upVector,l.UpReadOnly,this._upToYMatrix)}get angularSensibilityX(){const t=this.inputs.attached.pointers;return t?t.angularSensibilityX:0}set angularSensibilityX(t){const i=this.inputs.attached.pointers;i&&(i.angularSensibilityX=t)}get angularSensibilityY(){const t=this.inputs.attached.pointers;return t?t.angularSensibilityY:0}set angularSensibilityY(t){const i=this.inputs.attached.pointers;i&&(i.angularSensibilityY=t)}get pinchPrecision(){const t=this.inputs.attached.pointers;return t?t.pinchPrecision:0}set pinchPrecision(t){const i=this.inputs.attached.pointers;i&&(i.pinchPrecision=t)}get pinchDeltaPercentage(){const t=this.inputs.attached.pointers;return t?t.pinchDeltaPercentage:0}set pinchDeltaPercentage(t){const i=this.inputs.attached.pointers;i&&(i.pinchDeltaPercentage=t)}get useNaturalPinchZoom(){const t=this.inputs.attached.pointers;return t?t.useNaturalPinchZoom:!1}set useNaturalPinchZoom(t){const i=this.inputs.attached.pointers;i&&(i.useNaturalPinchZoom=t)}get panningSensibility(){const t=this.inputs.attached.pointers;return t?t.panningSensibility:0}set panningSensibility(t){const i=this.inputs.attached.pointers;i&&(i.panningSensibility=t)}get keysUp(){const t=this.inputs.attached.keyboard;return t?t.keysUp:[]}set keysUp(t){const i=this.inputs.attached.keyboard;i&&(i.keysUp=t)}get keysDown(){const t=this.inputs.attached.keyboard;return t?t.keysDown:[]}set keysDown(t){const i=this.inputs.attached.keyboard;i&&(i.keysDown=t)}get keysLeft(){const t=this.inputs.attached.keyboard;return t?t.keysLeft:[]}set keysLeft(t){const i=this.inputs.attached.keyboard;i&&(i.keysLeft=t)}get keysRight(){const t=this.inputs.attached.keyboard;return t?t.keysRight:[]}set keysRight(t){const i=this.inputs.attached.keyboard;i&&(i.keysRight=t)}get wheelPrecision(){const t=this.inputs.attached.mousewheel;return t?t.wheelPrecision:0}set wheelPrecision(t){const i=this.inputs.attached.mousewheel;i&&(i.wheelPrecision=t)}get zoomToMouseLocation(){const t=this.inputs.attached.mousewheel;return t?t.zoomToMouseLocation:!1}set zoomToMouseLocation(t){const i=this.inputs.attached.mousewheel;i&&(i.zoomToMouseLocation=t)}get wheelDeltaPercentage(){const t=this.inputs.attached.mousewheel;return t?t.wheelDeltaPercentage:0}set wheelDeltaPercentage(t){const i=this.inputs.attached.mousewheel;i&&(i.wheelDeltaPercentage=t)}get isInterpolating(){return this._isInterpolating}get bouncingBehavior(){return this._bouncingBehavior}get useBouncingBehavior(){return this._bouncingBehavior!=null}set useBouncingBehavior(t){t!==this.useBouncingBehavior&&(t?(this._bouncingBehavior=new S,this.addBehavior(this._bouncingBehavior)):this._bouncingBehavior&&(this.removeBehavior(this._bouncingBehavior),this._bouncingBehavior=null))}get framingBehavior(){return this._framingBehavior}get useFramingBehavior(){return this._framingBehavior!=null}set useFramingBehavior(t){t!==this.useFramingBehavior&&(t?(this._framingBehavior=new f,this.addBehavior(this._framingBehavior)):this._framingBehavior&&(this.removeBehavior(this._framingBehavior),this._framingBehavior=null))}get autoRotationBehavior(){return this._autoRotationBehavior}get useAutoRotationBehavior(){return this._autoRotationBehavior!=null}set useAutoRotationBehavior(t){t!==this.useAutoRotationBehavior&&(t?(this._autoRotationBehavior=new st,this.addBehavior(this._autoRotationBehavior)):this._autoRotationBehavior&&(this.removeBehavior(this._autoRotationBehavior),this._autoRotationBehavior=null))}constructor(t,i,e,s,n,o,c=!0){super(t,l.Zero(),o,c),this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.lowerAlphaLimit=null,this.upperAlphaLimit=null,this.lowerBetaLimit=.01,this.upperBetaLimit=Math.PI-.01,this.lowerRadiusLimit=null,this.upperRadiusLimit=null,this.lowerTargetYLimit=-1/0,this.inertialPanningX=0,this.inertialPanningY=0,this.pinchToPanMaxDistance=20,this.panningDistanceLimit=null,this.panningOriginTarget=l.Zero(),this.panningInertia=.9,this.zoomOnFactor=1,this.targetScreenOffset=L.Zero(),this.allowUpsideDown=!0,this.useInputToRestoreState=!0,this.restoreStateInterpolationFactor=0,this._currentInterpolationFactor=0,this._viewMatrix=new w,this.panningAxis=new l(1,1,0),this._transformedDirection=new l,this.mapPanning=!1,this._isInterpolating=!1,this.onMeshTargetChangedObservable=new X,this.checkCollisions=!1,this.collisionRadius=new l(.5,.5,.5),this._previousPosition=l.Zero(),this._collisionVelocity=l.Zero(),this._newPosition=l.Zero(),this._computationVector=l.Zero(),this._goalAlpha=NaN,this._goalBeta=NaN,this._goalRadius=NaN,this._goalTarget=new l(NaN,NaN,NaN),this._goalTargetScreenOffset=new L(NaN,NaN),this._onCollisionPositionChange=(a,_,p=null)=>{p?(this.setPosition(_),this.onCollide&&this.onCollide(p)):this._previousPosition.copyFrom(this._position);const O=Math.cos(this.alpha),y=Math.sin(this.alpha),A=Math.cos(this.beta);let C=Math.sin(this.beta);C===0&&(C=1e-4);const E=this._getTargetPosition();this._computationVector.copyFromFloats(this.radius*O*C,this.radius*A,this.radius*y*C),E.addToRef(this._computationVector,this._newPosition),this._position.copyFrom(this._newPosition);let M=this.upVector;this.allowUpsideDown&&this.beta<0&&(M=M.clone(),M=M.negate()),this._computeViewMatrix(this._position,E,M),this._viewMatrix.addAtIndex(12,this.targetScreenOffset.x),this._viewMatrix.addAtIndex(13,this.targetScreenOffset.y),this._collisionTriggered=!1},this._target=l.Zero(),n&&this.setTarget(n),this.alpha=i,this.beta=e,this.radius=s,this.getViewMatrix(),this.inputs=new nt(this),this.inputs.addKeyboard().addMouseWheel().addPointers()}_initCache(){super._initCache(),this._cache._target=new l(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._cache.alpha=void 0,this._cache.beta=void 0,this._cache.radius=void 0,this._cache.targetScreenOffset=L.Zero()}_updateCache(t){t||super._updateCache(),this._cache._target.copyFrom(this._getTargetPosition()),this._cache.alpha=this.alpha,this._cache.beta=this.beta,this._cache.radius=this.radius,this._cache.targetScreenOffset.copyFrom(this.targetScreenOffset)}_getTargetPosition(){if(this._targetHost&&this._targetHost.getAbsolutePosition){const i=this._targetHost.getAbsolutePosition();this._targetBoundingCenter?i.addToRef(this._targetBoundingCenter,this._target):this._target.copyFrom(i)}const t=this._getLockedTargetPosition();return t||this._target}storeState(){return this._storedAlpha=this.alpha,this._storedBeta=this.beta,this._storedRadius=this.radius,this._storedTarget=this._getTargetPosition().clone(),this._storedTargetScreenOffset=this.targetScreenOffset.clone(),super.storeState()}_restoreStateValues(){return this.hasStateStored()&&this.restoreStateInterpolationFactor>I&&this.restoreStateInterpolationFactor<1?(this.interpolateTo(this._storedAlpha,this._storedBeta,this._storedRadius,this._storedTarget,this._storedTargetScreenOffset,this.restoreStateInterpolationFactor),!0):super._restoreStateValues()?(this.setTarget(this._storedTarget.clone()),this.alpha=this._storedAlpha,this.beta=this._storedBeta,this.radius=this._storedRadius,this.targetScreenOffset=this._storedTargetScreenOffset.clone(),this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.inertialPanningX=0,this.inertialPanningY=0,!0):!1}stopInterpolation(){this._goalAlpha=NaN,this._goalBeta=NaN,this._goalRadius=NaN,this._goalTarget.set(NaN,NaN,NaN),this._goalTargetScreenOffset.set(NaN,NaN)}interpolateTo(t=this.alpha,i=this.beta,e=this.radius,s=this.target,n=this.targetScreenOffset,o){this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.inertialPanningX=0,this.inertialPanningY=0,o!=null?this._currentInterpolationFactor=o:this.restoreStateInterpolationFactor!==0?this._currentInterpolationFactor=this.restoreStateInterpolationFactor:this._currentInterpolationFactor=.1,this._goalAlpha=g(t,this._goalAlpha),this._goalBeta=g(i,this._goalBeta),this._goalRadius=g(e,this._goalRadius),this._goalTarget.set(g(s.x,this._goalTarget.x),g(s.y,this._goalTarget.y),g(s.z,this._goalTarget.z)),this._goalTargetScreenOffset.set(g(n.x,this._goalTargetScreenOffset.x),g(n.y,this._goalTargetScreenOffset.y)),this._goalAlpha=N(this._goalAlpha,this.lowerAlphaLimit??-1/0,this.upperAlphaLimit??1/0),this._goalBeta=N(this._goalBeta,this.lowerBetaLimit??-1/0,this.upperBetaLimit??1/0),this._goalRadius=N(this._goalRadius,this.lowerRadiusLimit??-1/0,this.upperRadiusLimit??1/0),this._goalTarget.y=N(this._goalTarget.y,this.lowerTargetYLimit??-1/0,1/0),this._isInterpolating=!0}_isSynchronizedViewMatrix(){return super._isSynchronizedViewMatrix()?this._cache._target.equals(this._getTargetPosition())&&this._cache.alpha===this.alpha&&this._cache.beta===this.beta&&this._cache.radius===this.radius&&this._cache.targetScreenOffset.equals(this.targetScreenOffset):!1}attachControl(t,i,e=!0,s=2){const n=arguments;i=B.BackCompatCameraNoPreventDefault(n),this._useCtrlForPanning=e,this._panningMouseButton=s,typeof n[0]=="boolean"&&(n.length>1&&(this._useCtrlForPanning=n[1]),n.length>2&&(this._panningMouseButton=n[2])),this.inputs.attachElement(i),this._reset=()=>{this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.inertialPanningX=0,this.inertialPanningY=0}}detachControl(){this.inputs.detachElement(),this._reset&&this._reset()}_checkInputs(){if(this._collisionTriggered)return;this.inputs.checkInputs();let t=!1;if(this.inertialAlphaOffset!==0||this.inertialBetaOffset!==0||this.inertialRadiusOffset!==0){t=!0;const i=this.invertRotation?-1:1,e=this._calculateHandednessMultiplier();let s=this.inertialAlphaOffset*e;this.beta<0&&(s*=-1),this.alpha+=s*i,this.beta+=this.inertialBetaOffset*i,this.radius-=this.inertialRadiusOffset,this.inertialAlphaOffset*=this.inertia,this.inertialBetaOffset*=this.inertia,this.inertialRadiusOffset*=this.inertia,Math.abs(this.inertialAlphaOffset)<this._rotationEpsilon&&(this.inertialAlphaOffset=0),Math.abs(this.inertialBetaOffset)<this._rotationEpsilon&&(this.inertialBetaOffset=0),Math.abs(this.inertialRadiusOffset)<this.speed*this._rotationEpsilon&&(this.inertialRadiusOffset=0)}if(this.inertialPanningX!==0||this.inertialPanningY!==0){t=!0;const i=new l(this.inertialPanningX,this.inertialPanningY,this.inertialPanningY);if(this._viewMatrix.invertToRef(this._cameraTransformMatrix),i.multiplyInPlace(this.panningAxis),l.TransformNormalToRef(i,this._cameraTransformMatrix,this._transformedDirection),this.mapPanning){const s=this.upVector,n=l.CrossToRef(this._transformedDirection,s,this._transformedDirection);l.CrossToRef(s,n,this._transformedDirection)}else this.panningAxis.y||(this._transformedDirection.y=0);if(!this._targetHost)if(this.panningDistanceLimit)this._transformedDirection.addInPlace(this._target),l.DistanceSquared(this._transformedDirection,this.panningOriginTarget)<=this.panningDistanceLimit*this.panningDistanceLimit&&this._target.copyFrom(this._transformedDirection);else{if(this.parent){const s=v.Matrix[0];this.parent.getWorldMatrix().getRotationMatrixToRef(s),s.transposeToRef(s),l.TransformCoordinatesToRef(this._transformedDirection,s,this._transformedDirection)}this._target.addInPlace(this._transformedDirection)}this.inertialPanningX*=this.panningInertia,this.inertialPanningY*=this.panningInertia;const e=this.speed*this._panningEpsilon;Math.abs(this.inertialPanningX)<e&&(this.inertialPanningX=0),Math.abs(this.inertialPanningY)<e&&(this.inertialPanningY=0)}if(t)this.stopInterpolation();else if(this._isInterpolating){let i=!1;const e=this._scene.getEngine().getDeltaTime()/1e3,s=1-Math.pow(2,-e/this._currentInterpolationFactor),n=g(this._goalRadius,this.radius);if(!isNaN(this._goalTarget.x)||!isNaN(this._goalTarget.y)||!isNaN(this._goalTarget.z)){const o=v.Vector3[0].set(g(this._goalTarget.x,this._target.x),g(this._goalTarget.y,this._target.y),g(this._goalTarget.z,this._target.z));l.LerpToRef(this.target,o,s,this._target),l.Distance(this.target,o)*10/n<I?(this._goalTarget.set(NaN,NaN,NaN),this.target.copyFrom(o),this.setTarget(this.target,!1,!0,!0)):i=!0}if(!isNaN(this._goalAlpha)||!isNaN(this._goalBeta)){const o=F.RotationAlphaBetaGammaToRef(g(this._goalAlpha,this.alpha),g(this._goalBeta,this.beta),0,v.Quaternion[0]),c=F.RotationAlphaBetaGammaToRef(this.alpha,this.beta,0,v.Quaternion[1]),a=F.SlerpToRef(c,o,s,v.Quaternion[2]);a.normalize();const _=a.toAlphaBetaGammaToRef(v.Vector3[0]);if(this.alpha=_.x,this.beta=_.y,a.isApprox(o,I/5)){this._goalAlpha=NaN,this._goalBeta=NaN;const p=o.toAlphaBetaGammaToRef(v.Vector3[0]);this.alpha=p.x,this.beta=p.y}else i=!0}if(isNaN(this._goalRadius)||(this.radius+=(n-this.radius)*s,Math.abs(n/this.radius-1)<I?(this._goalRadius=NaN,this.radius=n):i=!0),!isNaN(this._goalTargetScreenOffset.x)||!isNaN(this._goalTargetScreenOffset.y)){const o=v.Vector2[0].set(g(this._goalTargetScreenOffset.x,this.targetScreenOffset.x),g(this._goalTargetScreenOffset.y,this.targetScreenOffset.y));L.LerpToRef(this.targetScreenOffset,o,s,this.targetScreenOffset),L.Distance(this.targetScreenOffset,o)<I?(this._goalTargetScreenOffset.set(NaN,NaN),this.targetScreenOffset.copyFrom(o)):i=!0}this._isInterpolating=i}this._checkLimits(),super._checkInputs()}_checkLimits(){this.lowerBetaLimit===null||this.lowerBetaLimit===void 0?this.allowUpsideDown&&this.beta>Math.PI&&(this.beta=this.beta-2*Math.PI):this.beta<this.lowerBetaLimit&&(this.beta=this.lowerBetaLimit),this.upperBetaLimit===null||this.upperBetaLimit===void 0?this.allowUpsideDown&&this.beta<-Math.PI&&(this.beta=this.beta+2*Math.PI):this.beta>this.upperBetaLimit&&(this.beta=this.upperBetaLimit),this.lowerAlphaLimit!==null&&this.alpha<this.lowerAlphaLimit&&(this.alpha=this.lowerAlphaLimit),this.upperAlphaLimit!==null&&this.alpha>this.upperAlphaLimit&&(this.alpha=this.upperAlphaLimit),this.lowerRadiusLimit!==null&&this.radius<this.lowerRadiusLimit&&(this.radius=this.lowerRadiusLimit,this.inertialRadiusOffset=0),this.upperRadiusLimit!==null&&this.radius>this.upperRadiusLimit&&(this.radius=this.upperRadiusLimit,this.inertialRadiusOffset=0),this.target.y=Math.max(this.target.y,this.lowerTargetYLimit)}rebuildAnglesAndRadius(){this._position.subtractToRef(this._getTargetPosition(),this._computationVector),(this._upVector.x!==0||this._upVector.y!==1||this._upVector.z!==0)&&l.TransformCoordinatesToRef(this._computationVector,this._upToYMatrix,this._computationVector),this.radius=this._computationVector.length(),this.radius===0&&(this.radius=1e-4);const t=this.alpha;this.alpha=ot(this._computationVector),this.beta=rt(this._computationVector.y,this.radius);const i=Math.round((t-this.alpha)/(2*Math.PI));this.alpha+=i*2*Math.PI,this._checkLimits()}setPosition(t){this._position.equals(t)||(this._position.copyFrom(t),this.rebuildAnglesAndRadius())}setTarget(t,i=!1,e=!1,s=!1){if(s=this.overrideCloneAlphaBetaRadius??s,t.computeWorldMatrix)i&&t.getBoundingInfo?this._targetBoundingCenter=t.getBoundingInfo().boundingBox.centerWorld.clone():this._targetBoundingCenter=null,t.computeWorldMatrix(),this._targetHost=t,this._target=this._getTargetPosition(),this.onMeshTargetChangedObservable.notifyObservers(this._targetHost);else{const n=t,o=this._getTargetPosition();if(o&&!e&&o.equals(n))return;this._targetHost=null,this._target=n,this._targetBoundingCenter=null,this.onMeshTargetChangedObservable.notifyObservers(null)}s||this.rebuildAnglesAndRadius()}_getViewMatrix(){const t=Math.cos(this.alpha),i=Math.sin(this.alpha),e=Math.cos(this.beta);let s=Math.sin(this.beta);s===0&&(s=1e-4),this.radius===0&&(this.radius=1e-4);const n=this._getTargetPosition();if(this._computationVector.copyFromFloats(this.radius*t*s,this.radius*e,this.radius*i*s),(this._upVector.x!==0||this._upVector.y!==1||this._upVector.z!==0)&&l.TransformCoordinatesToRef(this._computationVector,this._yToUpMatrix,this._computationVector),n.addToRef(this._computationVector,this._newPosition),this.getScene().collisionsEnabled&&this.checkCollisions){const o=this.getScene().collisionCoordinator;this._collider||(this._collider=o.createCollider()),this._collider._radius=this.collisionRadius,this._newPosition.subtractToRef(this._position,this._collisionVelocity),this._collisionTriggered=!0,o.getNewPosition(this._position,this._collisionVelocity,this._collider,3,null,this._onCollisionPositionChange,this.uniqueId)}else{this._position.copyFrom(this._newPosition);let o=this.upVector;this.allowUpsideDown&&s<0&&(o=o.negate()),this._computeViewMatrix(this._position,n,o),this._viewMatrix.addAtIndex(12,this.targetScreenOffset.x),this._viewMatrix.addAtIndex(13,this.targetScreenOffset.y)}return this._currentTarget.copyFrom(n),this._viewMatrix}zoomOn(t,i=!1){t=t||this.getScene().meshes;const e=V.MinMax(t);let s=this._calculateLowerRadiusFromModelBoundingSphere(e.min,e.max);if(s=Math.max(Math.min(s,this.upperRadiusLimit||Number.MAX_VALUE),this.lowerRadiusLimit||0),this.radius=s*this.zoomOnFactor,this.mode===b.ORTHOGRAPHIC_CAMERA){const n=this.getScene().getEngine().getAspectRatio(this),o=s*this.zoomOnFactor/2;this.orthoLeft=-o*n,this.orthoRight=o*n,this.orthoBottom=-o,this.orthoTop=o}this.focusOn({min:e.min,max:e.max,distance:s},i)}focusOn(t,i=!1){let e,s;if(t.min===void 0){const n=t||this.getScene().meshes;e=V.MinMax(n),s=l.Distance(e.min,e.max)}else{const n=t;e=n,s=n.distance}this._target=V.Center(e),i||(this.maxZ=s*2)}createRigCamera(t,i){let e=0;switch(this.cameraRigMode){case b.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case b.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case b.RIG_MODE_STEREOSCOPIC_OVERUNDER:case b.RIG_MODE_STEREOSCOPIC_INTERLACED:case b.RIG_MODE_VR:e=this._cameraRigParams.stereoHalfAngle*(i===0?1:-1);break;case b.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:e=this._cameraRigParams.stereoHalfAngle*(i===0?-1:1);break}const s=new u(t,this.alpha+e,this.beta,this.radius,this._target,this.getScene());return s._cameraRigParams={},s.isRigCamera=!0,s.rigParent=this,s.upVector=this.upVector,s.mode=this.mode,s.orthoLeft=this.orthoLeft,s.orthoRight=this.orthoRight,s.orthoBottom=this.orthoBottom,s.orthoTop=this.orthoTop,s}_updateRigCameras(){const t=this._rigCameras[0],i=this._rigCameras[1];switch(t.beta=i.beta=this.beta,this.cameraRigMode){case b.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case b.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case b.RIG_MODE_STEREOSCOPIC_OVERUNDER:case b.RIG_MODE_STEREOSCOPIC_INTERLACED:case b.RIG_MODE_VR:t.alpha=this.alpha-this._cameraRigParams.stereoHalfAngle,i.alpha=this.alpha+this._cameraRigParams.stereoHalfAngle;break;case b.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:t.alpha=this.alpha+this._cameraRigParams.stereoHalfAngle,i.alpha=this.alpha-this._cameraRigParams.stereoHalfAngle;break}super._updateRigCameras()}_calculateLowerRadiusFromModelBoundingSphere(t,i,e=1){const s=l.Distance(t,i),o=this.getScene().getEngine().getAspectRatio(this),c=Math.tan(this.fov/2),a=c*o,p=s*.5*e,O=p*Math.sqrt(1+1/(a*a)),y=p*Math.sqrt(1+1/(c*c));return Math.max(O,y)}dispose(){this.inputs.clear(),super.dispose()}getClassName(){return"ArcRotateCamera"}}r([h()],u.prototype,"alpha",void 0);r([h()],u.prototype,"beta",void 0);r([h()],u.prototype,"radius",void 0);r([h()],u.prototype,"overrideCloneAlphaBetaRadius",void 0);r([U("target")],u.prototype,"_target",void 0);r([H("targetHost")],u.prototype,"_targetHost",void 0);r([h()],u.prototype,"inertialAlphaOffset",void 0);r([h()],u.prototype,"inertialBetaOffset",void 0);r([h()],u.prototype,"inertialRadiusOffset",void 0);r([h()],u.prototype,"lowerAlphaLimit",void 0);r([h()],u.prototype,"upperAlphaLimit",void 0);r([h()],u.prototype,"lowerBetaLimit",void 0);r([h()],u.prototype,"upperBetaLimit",void 0);r([h()],u.prototype,"lowerRadiusLimit",void 0);r([h()],u.prototype,"upperRadiusLimit",void 0);r([h()],u.prototype,"lowerTargetYLimit",void 0);r([h()],u.prototype,"inertialPanningX",void 0);r([h()],u.prototype,"inertialPanningY",void 0);r([h()],u.prototype,"pinchToPanMaxDistance",void 0);r([h()],u.prototype,"panningDistanceLimit",void 0);r([U()],u.prototype,"panningOriginTarget",void 0);r([h()],u.prototype,"panningInertia",void 0);r([h()],u.prototype,"zoomToMouseLocation",null);r([h()],u.prototype,"zoomOnFactor",void 0);r([K()],u.prototype,"targetScreenOffset",void 0);r([h()],u.prototype,"allowUpsideDown",void 0);r([h()],u.prototype,"useInputToRestoreState",void 0);r([h()],u.prototype,"restoreStateInterpolationFactor",void 0);G("BABYLON.ArcRotateCamera",u);export{u as ArcRotateCamera,ot as ComputeAlpha,rt as ComputeBeta}; | |