@openglobus/openglobus-react 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -345,7 +345,7 @@ vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 r
345
345
  <path d="M5 15H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zM12 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>
346
346
  </svg>`,title:"Lock/Unlock camera view"});return r.appendTo(i),r.events.on("change",s=>{s?this.model.lockView():this.model.unlockView()}),this.events.on("visibility",s=>{s||(r.events.stopPropagation(),r.setActive(!1))}),this.events.on("visibility",this._onVisibility),this._relativePositionView.appendTo(this.container),this.model.planet&&(this._lonView.appendTo(this.container),this._latView.appendTo(this.container),this._heightView.appendTo(this.container)),this._xView.appendTo(this.container),this._yView.appendTo(this.container),this._zView.appendTo(this.container),this._absXView.appendTo(this.container),this._absYView.appendTo(this.container),this._absZView.appendTo(this.container),this._pitchView.appendTo(this.container),this._yawView.appendTo(this.container),this._rollView.appendTo(this.container),this._absolutePitchView.appendTo(this.container),this._absoluteYawView.appendTo(this.container),this._absoluteRollView.appendTo(this.container),this._scaleView.appendTo(this.container),this._scaleXView.appendTo(this.container),this._scaleYView.appendTo(this.container),this._scaleZView.appendTo(this.container),this.model.planet&&this._groundBtn.appendTo(this.container),this._relativePositionView.events.on("change",this._onChangeRelativePosition),this._lonView.events.on("change",this._onChangeLon),this._latView.events.on("change",this._onChangeLat),this._heightView.events.on("change",this._onChangeHeight),this._xView.events.on("change",this._onChangeX),this._yView.events.on("change",this._onChangeY),this._zView.events.on("change",this._onChangeZ),this._absXView.events.on("change",this._onChangeAbsoluteX),this._absYView.events.on("change",this._onChangeAbsoluteY),this._absZView.events.on("change",this._onChangeAbsoluteZ),this._pitchView.events.on("change",this._onChangePitch),this._yawView.events.on("change",this._onChangeYaw),this._rollView.events.on("change",this._onChangeRoll),this._absolutePitchView.events.on("change",this._onChangeAbsolutePitch),this._absoluteYawView.events.on("change",this._onChangeAbsoluteYaw),this._absoluteRollView.events.on("change",this._onChangeAbsoluteRoll),this._scaleView.events.on("change",this._onChangeScale),this._scaleXView.events.on("change",this._onChangeScaleX),this._scaleYView.events.on("change",this._onChangeScaleY),this._scaleZView.events.on("change",this._onChangeScaleZ),this._groundBtn.appendTo(this.container),this._groundBtn.events.on("click",this._onGround),this}remove(){super.remove(),this._clearSceneEvents()}_initSceneEvents(){this.model.events.on("select",this._onSelect),this.model.events.on("unselect",this._onUnselect),this.model.events.on("position",this._onPosition),this.model.events.on("pitch",this._onPitch),this.model.events.on("yaw",this._onYaw),this.model.events.on("roll",this._onRoll)}_clearSceneEvents(){this.model.events.off("select",this._onSelect),this.model.events.off("unselect",this._onUnselect),this.model.events.off("position",this._onPosition),this.model.events.off("pitch",this._onPitch),this.model.events.off("yaw",this._onYaw),this.model.events.off("roll",this._onRoll)}_refresh(e){e.parent?this._relativePositionView.disabled=!1:this._relativePositionView.disabled=!0,this._relativePositionView.checked=e.relativePosition;let t=e.getLonLat();this._lonView.stopPropagation(),this._latView.stopPropagation(),this._heightView.stopPropagation(),this._lonView.value=t.lon,this._latView.value=t.lat,this._heightView.value=t.height;let i=e.getCartesian();this._xView.stopPropagation(),this._yView.stopPropagation(),this._zView.stopPropagation(),this._xView.value=i.x,this._yView.value=i.y,this._zView.value=i.z,i=e.getAbsoluteCartesian(),this._absXView.stopPropagation(),this._absYView.stopPropagation(),this._absZView.stopPropagation(),this._absXView.value=i.x,this._absYView.value=i.y,this._absZView.value=i.z,this._pitchView.stopPropagation(),this._yawView.stopPropagation(),this._rollView.stopPropagation(),this._pitchView.value=e.getPitch()*J,this._yawView.value=e.getYaw()*J,this._rollView.value=e.getRoll()*J,this._absolutePitchView.stopPropagation(),this._absoluteYawView.stopPropagation(),this._absoluteRollView.stopPropagation(),this._absolutePitchView.value=e.getAbsolutePitch()*J,this._absoluteYawView.value=e.getAbsoluteYaw()*J,this._absoluteRollView.value=e.getAbsoluteRoll()*J,this._scaleView.stopPropagation();let r=e.getScale();r.x===r.y&&r.y===r.z?this._scaleView.value=r.x:this._scaleView.value=1,this._scaleXView.stopPropagation(),this._scaleYView.stopPropagation(),this._scaleZView.stopPropagation(),this._scaleXView.value=r.x,this._scaleYView.value=r.y,this._scaleZView.value=r.z}hide(){super.hide(),this.model.events.stopPropagation(),this.model.unselect()}}const Qh=["lockview","unlockview"];class Na extends ee{constructor(e={}){super(e),this._onLockViewDraw=()=>{this.renderer&&this._lockEntity&&(this._isFromTheBack||this.renderer.activeCamera.viewDistance(this._lockEntity.getAbsoluteCartesian(),this._lockDistance))},this._onMouseWheel=t=>{if(this.renderer&&this._lockEntity&&!this._isFromTheBack){let i=this.renderer.activeCamera.eye.distance(this._lockEntity.getAbsoluteCartesian());this._lockDistance-=.33*i*Math.sign(t.wheelDelta),this._lockDistance<.001&&(this._lockDistance=.001),this.renderer.activeCamera.viewDistance(this._lockEntity.getAbsoluteCartesian(),this._lockDistance)}},this._onMouseMove=t=>{if(this._lockEntity&&this.renderer&&(t.rightButtonDown||this.renderer.events.isKeyPressed(W.KEY_ALT))){let i=this._lockEntity.getAbsoluteCartesian(),r=this.renderer.activeCamera,s=.5/U;s>.007&&(s=.007),this.planet?r.rotateHorizontal(s*(t.x-t.prev_x),!1,i,i.isZero()?m.UP:i.normal()):r.rotateHorizontal(s*(t.x-t.prev_x),!1,i,m.UP),r.rotateVertical(s*(t.y-t.prev_y),i),this._viewDir=i.sub(r.eye).normalize()}},this.events=le(Qh),this._name="CameraLock",this.planet=e.planet||null,this._lockDistance=0,this._isFromTheBack=!1,this._lockEntity=null,this._viewDir=new m(0,0,0)}onactivate(){this.renderer}ondeactivate(){this.renderer&&this.unlockView()}oninit(){this.activate(),this.renderer}flyCartesian(e,t=120){if(!e.isZero()&&this.renderer)if(this.unlockView(),this.planet){let i=this.planet.camera;this.isVisibleDistance(e)&&i.flyDistance(e,t),i.eye.distance(e)<1e6?i.flyDistance(e,t):i.viewDistance(e,t)}else this.renderer.activeCamera.viewDistance(e,t)}lockView(e,t=!1){if(!this.renderer)return;this._lockDistance=this._getDistance(e,this._lockEntity),this._isFromTheBack=t,this._deactivateLockViewEvents(),this._lockEntity=e;let i=this.renderer.activeCamera;this.planet&&this.planet.camera.stopFlying(),i.viewDistance(e.getAbsoluteCartesian(),this._lockDistance),this._deactivateNav(),this._activateLockViewEvents(),this._viewDir=e.getAbsoluteCartesian().sub(i.eye).normalize(),this.events.dispatch(this.events.lockview,this._lockEntity,t)}_activateNav(){this.renderer&&this.renderer.controls.mouseNavigation&&this.renderer.controls.mouseNavigation.activate(),this.renderer&&this.renderer.controls.simpleNavigation&&this.renderer.controls.simpleNavigation.activate()}_deactivateNav(){this.renderer&&this.renderer.controls.mouseNavigation&&(this.renderer.controls.mouseNavigation.deactivate(),this.renderer.controls.mouseNavigation.stop()),this.renderer&&this.renderer.controls.simpleNavigation&&this.renderer.controls.simpleNavigation.deactivate()}unlockView(){this._lockEntity&&(this._deactivateLockViewEvents(),this._activateNav(),this.events.dispatch(this.events.unlockview,this._lockEntity),this._lockEntity=null)}_getCenterDist(){return this.renderer&&this.renderer.getDistanceFromPixel(this.renderer.handler.getCenter())||0}_getDistance(e,t){if(this.renderer){let i=e.getAbsoluteCartesian(),r=this.renderer.activeCamera,s=r.eye.distance(i);return t&&(s=r.eye.distance(t.getAbsoluteCartesian())),this.isVisibleDistance(i)?s:r.eye.distance(i)<1e6?this._getCenterDist():120}return 0}isVisibleDistance(e,t=0){if(this.planet){let i=this.planet.ellipsoid.equatorialSize,r=this.planet.camera.eye;return r.distance(e)<Math.sqrt(r.length2()-i*i)+t}return!0}get lockEntity(){return this._lockEntity}flyLonLat(e,t=120){if(this.planet){let i=this.planet.ellipsoid.lonLatToCartesian(e);this.flyCartesian(i,t)}}_activateLockViewEvents(){this.renderer&&(this.renderer.events.on("mousewheel",this._onMouseWheel),this.renderer.events.on("mousemove",this._onMouseMove),this.renderer.events.on("draw",this._onLockViewDraw))}_deactivateLockViewEvents(){this.renderer&&(this.renderer.events.off("mousewheel",this._onMouseWheel),this.renderer.events.off("mousemove",this._onMouseMove),this._lockEntity&&this.renderer.events.off("draw",this._onLockViewDraw))}}const Kh=["click"];class Jh extends be{constructor(e){super({template:Ne(`<button class="og-object3d-collection__item">
347
347
  <div class="og-object3d-collection__item_name">{name}</div>
348
- </button>`,{name:e.model.name}),...e}),this.events=le(Kh)}render(e){var t;return super.render(e),(t=this.el)==null||t.addEventListener("click",i=>{this.events.dispatch(this.events.click,this.model,this,i)}),this}}const ec=["select"];class tc extends be{constructor(e){super({template:'<div class="og-object3d-collection"></div>',model:e.model,...e}),this._onAdd=t=>{this._addItem(t)},this.events=le(ec),this._activeView=null}_addItem(e){let t=new Jh({model:e});t.appendTo(this.el),t.events.on("click",i=>{var r,s;this._activeView&&((r=this._activeView.el)==null||r.classList.remove("active")),this._activeView=t,(s=this._activeView.el)==null||s.classList.add("active"),this.events.dispatch(this.events.select,i,t)})}render(e){super.render(e);let t=this.model.getItems();for(let i of t)this._addItem(i);return this._initEvents(),this}_initEvents(){this.model.events.on("add",this._onAdd)}}const ic=["select"];class rc extends at{constructor(e){super({classList:["og-object3d-manager"],title:"Object3D Collection",visible:!1,resizable:!0,useHide:!0,top:25,right:85,width:252,height:480,minHeight:100,minWidth:100}),this._onLoadClick=()=>{let t=new be({initRender:!0,template:'<input type="file" accept=".obj,.mtl" multiple />'});t.el&&(t.el.addEventListener("change",i=>{const r=i.target;if(r.files){const s=Array.from(r.files),n=s.find(l=>l.name.toLowerCase().endsWith(".obj")),o=s.find(l=>l.name.toLowerCase().endsWith(".mtl"));n&&async function(l,h){return await Z.readFileObj(l,h).then(c=>({name:l.name,objects:h?c:[Z.merge(c)]}))}(n,o).then(this._addObject)}}),t.el.click())},this._addObject=t=>{this._object3dCollectionView.model.addItem(t)},this.events=le(ic),this._object3dCollectionView=new tc({model:e.model})}render(e){var t;super.render(e);let i=document.createElement("div");i.classList.add("og-editor_toolbar"),(t=this.container)==null||t.appendChild(i);let r=new nt({classList:["og-editor_toolbar-button"],icon:'<svg class="svg-icon" style="vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M426.666667 170.666667H170.666667c-47.146667 0-84.906667 38.186667-84.906667 85.333333L85.333333 768c0 47.146667 38.186667 85.333333 85.333334 85.333333h682.666666c47.146667 0 85.333333-38.186667 85.333334-85.333333V341.333333c0-47.146667-38.186667-85.333333-85.333334-85.333333H512l-85.333333-85.333333z" /></svg>',title:"Load 3D object"});return r.appendTo(i),r.events.on("click",this._onLoadClick),this._object3dCollectionView.appendTo(this.container),this._object3dCollectionView.events.on("select",s=>{this.events.dispatch(this.events.select,s)}),this}}const sc=["add","remove"];class Kr{constructor(e={}){this.events=le(sc,this),this._items=Kr.createItemsMap(e.collection||[])}static createItemsMap(e){let t=new Map;for(let i=0;i<e.length;i++)t.set(e[i].name,e[i]);return t}getItem(e){return this._items.get(e)}addItem(e,t=!1){this._items.has(e.name)&&!t||(this._items.set(e.name,e),this.events.dispatch(this.events.add,e))}getItems(){return Array.from(this._items,([e,t])=>t)}}class Jr extends ee{constructor(e={}){super({name:"CameraFrameComposer",autoActivate:!0,...e}),this._onPostdraw=()=>{for(let t=0,i=this._frameHandlers.length;t<i;t++)this._frameHandlers[t].frame()},this._cameraLayer=new ut({scaleByDistance:[100,1e6,1],pickingEnabled:!1}),this._cameraScene=new ot("CameraScene"),this._frameHandlers=e.frameHandlers||[]}get frameHandlers(){return[...this._frameHandlers]}add(e){e.addTo(this),this._cameraLayer.add(e.cameraEntity)}oninit(){super.oninit(),this._cameraLayer.addTo(this._cameraScene)}activate(){super.activate(),this.renderer&&(this.renderer.events.on("postdraw",this._onPostdraw),this.renderer.addNode(this._cameraScene))}deactivate(){super.deactivate(),this.renderer&&(this.renderer.events.off("postdraw",this._onPostdraw),this.renderer.removeNode(this._cameraScene))}}let nc=Z.createFrustum();class Ha{constructor(e){this.camera=e.camera,this.frameBuffer=e.frameBuffer,this.frameHandler=e.frameHandler||null,this._composer=null,this._composerIndex=-1,this.showFrustum=e.showFrustum==null||e.showFrustum,this.cameraEntity=new V({visibility:!0,scale:this.frustumScale,geoObject:{tag:"frustum",color:"rgba(0,255,0,0.20)",object3d:nc}}),this.frameBuffer.init()}get frustumScale(){return Z.getFrustumScaleByCameraAspectRatio(1e3,this.camera.getViewAngle(),this.camera.getAspectRatio())}addTo(e){this._composer||(this._composer=e,this._composerIndex=e.frameHandlers.length,this._composer._frameHandlers.push(this))}remove(){this._composer&&(this._composer._frameHandlers.splice(this._composerIndex,1),this._composer=null,this._composerIndex=-1)}frame(){if(this.frameHandler&&this.frameBuffer.handler.gl&&(this.frameHandler(this),this.showFrustum)){let e=this.camera,t=Z.getFrustumScaleByCameraAngles(100,e.horizontalViewAngle,e.verticalViewAngle);this.cameraEntity.setScale3v(t),this.cameraEntity.setCartesian3v(e.eye),this.cameraEntity.setAbsolutePitch(e.getAbsolutePitch()),this.cameraEntity.setAbsoluteYaw(e.getAbsoluteYaw()),this.cameraEntity.setAbsoluteRoll(e.getAbsoluteRoll())}}}function Ht(a){let e=1/Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);a[0]*=e,a[1]*=e,a[2]*=e,a[3]*=e}class Va{constructor(e={}){this._pickingColorU=new Float32Array([0,0,0]),this._f=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],this.projectionMatrix=new ne,this.inverseProjectionMatrix=new ne,this.projectionViewMatrix=new ne,this.projectionViewRTEMatrix=new ne,this.inverseProjectionViewMatrix=new ne,this.left=0,this.right=0,this.bottom=0,this.top=0,this.near=0,this.far=0,this.cameraFrustumIndex=e.cameraFrustumIndex!=null?e.cameraFrustumIndex:-1,this.setProjectionMatrix(e.fov||30,e.aspect||1,e.near||1,e.far||1e3)}getRightPlane(){return this._f[0]}getLeftPlane(){return this._f[1]}getBottomPlane(){return this._f[2]}getTopPlane(){return this._f[3]}getBackwardPlane(){return this._f[4]}getForwardPlane(){return this._f[5]}getProjectionViewMatrix(){return this.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.projectionViewRTEMatrix._m}getProjectionMatrix(){return this.projectionMatrix._m}getInverseProjectionMatrix(){return this.inverseProjectionMatrix._m}setProjectionMatrix(e,t,i,r,s,n=10){if(s){let o=n*Math.tan(e*Xe),l=o*t;this._setFrustumParams(o,l,i,r),this.projectionMatrix.setOrthographic(this.left,this.right,this.bottom,this.top,this.near,this.far)}else{let o=i*Math.tan(e*Xe),l=o*t;this._setFrustumParams(o,l,i,r),this.projectionMatrix.setPerspective(this.left,this.right,this.bottom,this.top,this.near,this.far)}this.projectionMatrix.inverseTo(this.inverseProjectionMatrix)}_setFrustumParams(e,t,i,r){this.top=e,this.right=t,this.bottom=-this.top,this.left=-this.right,this.near=i,this.far=r}setProjectionViewRTEMatrix(e){this.projectionViewRTEMatrix=this.projectionMatrix.mul(e)}setViewMatrix(e){this.projectionViewMatrix=this.projectionMatrix.mul(e),this.projectionViewMatrix.inverseTo(this.inverseProjectionViewMatrix);let t=this.projectionViewMatrix._m;this._f[0][0]=t[3]-t[0],this._f[0][1]=t[7]-t[4],this._f[0][2]=t[11]-t[8],this._f[0][3]=t[15]-t[12],Ht(this._f[0]),this._f[1][0]=t[3]+t[0],this._f[1][1]=t[7]+t[4],this._f[1][2]=t[11]+t[8],this._f[1][3]=t[15]+t[12],Ht(this._f[1]),this._f[2][0]=t[3]+t[1],this._f[2][1]=t[7]+t[5],this._f[2][2]=t[11]+t[9],this._f[2][3]=t[15]+t[13],Ht(this._f[2]),this._f[3][0]=t[3]-t[1],this._f[3][1]=t[7]-t[5],this._f[3][2]=t[11]-t[9],this._f[3][3]=t[15]-t[13],Ht(this._f[3]),this._f[4][0]=t[3]-t[2],this._f[4][1]=t[7]-t[6],this._f[4][2]=t[11]-t[10],this._f[4][3]=t[15]-t[14],Ht(this._f[4]),this._f[5][0]=t[3]+t[2],this._f[5][1]=t[7]+t[6],this._f[5][2]=t[11]+t[10],this._f[5][3]=t[15]+t[14],Ht(this._f[5])}containsPoint(e){for(let t=0;t<6;t++)if(e.dotArr(this._f[t])+this._f[t][3]<=0)return!1;return!0}containsSphereBottomExc(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphereButtom(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[2])+i[2][3]<=t)}containsSphere(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[2])+i[2][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphere2(e,t){let i=-t;return!(e.dotArr(this._f[0])+this._f[0][3]<=i||e.dotArr(this._f[1])+this._f[1][3]<=i||e.dotArr(this._f[2])+this._f[2][3]<=i||e.dotArr(this._f[3])+this._f[3][3]<=i||e.dotArr(this._f[4])+this._f[4][3]<=i||e.dotArr(this._f[5])+this._f[5][3]<=i)}containsBox(e){let t,i,r=!0;for(let s=0;s<6;s++){t=0,i=0;for(let n=0;n<8&&(i===0||t===0);n++)e.vertices[n].dotArr(this._f[s])+this._f[s][3]<0?t++:i++;if(i===0)return!1;t>0&&(r=!0)}return r}}const K=class{};K.Linear=a=>a,K.QuadIn=a=>a*a,K.QuadOut=a=>1-(1-a)*(1-a),K.QuadInOut=a=>a<.5?2*a*a:1-Math.pow(-2*a+2,2)/2,K.CubicIn=a=>a*a*a,K.CubicOut=a=>1-Math.pow(1-a,3),K.CubicInOut=a=>a<.5?4*a*a*a:1-Math.pow(-2*a+2,3)/2,K.QuartIn=a=>a*a*a*a,K.QuartOut=a=>1-Math.pow(1-a,4),K.QuartInOut=a=>a<.5?8*a*a*a*a:1-Math.pow(-2*a+2,4)/2,K.QuintIn=a=>a*a*a*a*a,K.QuintOut=a=>1-Math.pow(1-a,5),K.QuintInOut=a=>a<.5?16*a*a*a*a*a:1-Math.pow(-2*a+2,5)/2,K.SineIn=a=>1-Math.cos(a*Math.PI/2),K.SineOut=a=>Math.sin(a*Math.PI/2),K.SineInOut=a=>-(Math.cos(Math.PI*a)-1)/2,K.ExpoIn=a=>a===0?0:Math.pow(2,10*a-10),K.ExpoOut=a=>a===1?1:1-Math.pow(2,-10*a),K.ExpoInOut=a=>a===0?0:a===1?1:a<.5?Math.pow(2,20*a-10)/2:(2-Math.pow(2,-20*a+10))/2,K.CircIn=a=>1-Math.sqrt(1-Math.pow(a,2)),K.CircOut=a=>Math.sqrt(1-Math.pow(a-1,2)),K.CircInOut=a=>a<.5?(1-Math.sqrt(1-Math.pow(2*a,2)))/2:(Math.sqrt(1-Math.pow(-2*a+2,2))+1)/2,K.BackIn=a=>2.70158*a*a*a-1.70158*a*a,K.BackOut=a=>1+2.70158*Math.pow(a-1,3)+1.70158*Math.pow(a-1,2),K.BackInOut=a=>{const e=2.5949095;return a<.5?Math.pow(2*a,2)*(7.189819*a-e)/2:(Math.pow(2*a-2,2)*((e+1)*(2*a-2)+e)+2)/2},K.ElasticIn=a=>{const e=2*Math.PI/3;return a===0?0:a===1?1:-Math.pow(2,10*a-10)*Math.sin((10*a-10.75)*e)},K.ElasticOut=a=>{const e=2*Math.PI/3;return a===0?0:a===1?1:Math.pow(2,-10*a)*Math.sin((10*a-.75)*e)+1},K.ElasticInOut=a=>{const e=2*Math.PI/4.5;return a===0?0:a===1?1:a<.5?-Math.pow(2,20*a-10)*Math.sin((20*a-11.125)*e)/2:Math.pow(2,-20*a+10)*Math.sin((20*a-11.125)*e)/2+1},K.BounceOut=a=>a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375,K.BounceIn=a=>1-K.BounceOut(1-a),K.BounceInOut=a=>a<.5?.5*(1-K.BounceOut(1-2*a)):.5*(K.BounceOut(2*a-1)+1);let ac=K;const oc=["viewchange","moveend","flystart","flyend","flystop"],Ua=ac.CubicInOut,Ga=class $o{constructor(e={}){if(this.__id=$o.__counter__++,this.events=le(oc,this),this._isOrthographic=e.isOrthographic??!1,this._focusDistance=e.focusDistance!=null?e.focusDistance:10,this._width=e.width||1,this._height=e.height||1,this.eye=e.eye||new m,this.eyeHigh=new Float32Array(3),this.eyeLow=new Float32Array(3),this._viewAngle=e.viewAngle||47,this._horizontalViewAngle=0,this._viewMatrix=new ne,this._viewMatrixRTE=new ne,this._normalMatrix=new vt,this._r=new m(1,0,0),this._u=new m(0,1,0),this._b=new m(0,0,1),this._f=this._b.negateTo(),this._pr=this._r.clone(),this._pu=this._u.clone(),this._pb=this._b.clone(),this._peye=this.eye.clone(),this.isMoving=!1,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._tanViewAngle_hrad=0,this._tanViewAngle_hradOneByHeight=0,this.frustums=[],this.frustumColors=[],e.frustums)for(let t=0,i=e.frustums.length;t<i;t++){let r=e.frustums[t],s=new Va({fov:this._viewAngle,aspect:this.getAspectRatio(),near:r[0],far:r[1]});s.cameraFrustumIndex=this.frustums.length,this.frustums.push(s),this.frustumColors.push(s._pickingColorU[0],s._pickingColorU[1],s._pickingColorU[2])}else{let t=.1,i=1e3,r=new Va({fov:this._viewAngle,aspect:this.getAspectRatio(),near:t,far:i});r.cameraFrustumIndex=this.frustums.length,this.frustums.push(r),this.frustumColors.push(r._pickingColorU[0],r._pickingColorU[1],r._pickingColorU[2])}this.FARTHEST_FRUSTUM_INDEX=this.frustums.length-1,this.currentFrustumIndex=0,this.frustumColorIndex=0,this.isFirstPass=!1,this._projSizeConst=0,this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}get isOrthographic(){return this._isOrthographic}set isOrthographic(e){this._isOrthographic!==e&&(this._isOrthographic=e,this.refresh())}get focusDistance(){return this._focusDistance}set focusDistance(e){e!==this._focusDistance&&(this._focusDistance=e,this._isOrthographic&&this.refresh())}get id(){return this.__id}flyCartesian(e,t={}){this.stopFlying(),t.look=t.look||m.ZERO,t.up=t.up||m.UP,t.duration=t.duration||800;const i=t.ease||Ua;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this);let r=this.eye.clone(),s=this._u,n=this._b,o=t.up,l=e.clone(),h=m.sub(e,t.look),c=o.cross(h);h.normalize(),c.normalize();let d=h.cross(c);this._flight={fly:u=>{let g=1-i(u),f=r.smerp(l,g),p=s.smerp(d,g),_=m.add(f,n.smerp(h,g).negateTo()),v=new m(f.x-_.x,f.y-_.y,f.z-_.z),x=p.cross(v);v.normalize(),x.normalize();let y=v.cross(x);return{eye:f,n:v,u:x,v:y}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this._flying=!1,this._flight=null,this._frameCallback=null,this.events.dispatch(this.events.flystop,this))}checkFly(){if(this._flying&&this._flight!==null){let e=Math.min((Date.now()-this._flight.startedAt)/this._flight.duration,1);const t=this._flight.fly(e);this.eye=t.eye,this._r=t.u,this._u=t.v,this._b=t.n,this._f.set(-this._b.x,-this._b.y,-this._b.z),this._frameCallback&&this._frameCallback(),this.update(),e>=1&&(this.stopFlying(),this._completeCallback&&(this.events.dispatch(this.events.flyend,this),this._completeCallback(),this._completeCallback=null))}}isFlying(){return this._flying}checkMoveEnd(){let e=this._r,t=this._u,i=this._b,r=this.eye;this._peye.equal(r)&&this._pr.equal(e)&&this._pu.equal(t)&&this._pb.equal(i)?(this.isMoving&&this.events.dispatch(this.events.moveend,this),this.isMoving=!1):this.isMoving=!0,this._pr.copy(e),this._pu.copy(t),this._pb.copy(i),this._peye.copy(r)}bindFrustumsPickingColors(e){for(let t=0;t<this.frustums.length;t++)e.assignPickingColor(this.frustums[t])}_init(e){this._setProj(this._viewAngle,this.getAspectRatio()),this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}getUp(){return this._u.clone()}getDown(){return this._u.negateTo()}getRight(){return this._r.clone()}getLeft(){return this._r.negateTo()}getForward(){return this._f.clone()}getBackward(){return this._b.clone()}update(){let e=this._r,t=this._u,i=this._b,r=this.eye;m.doubleToTwoFloat32Array(r,this.eyeHigh,this.eyeLow),this._viewMatrix.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,-r.dot(e),-r.dot(t),-r.dot(i),1]),this._viewMatrixRTE.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1]);for(let s=0,n=this.frustums.length;s<n;s++)this.frustums[s].setViewMatrix(this._viewMatrix),this.frustums[s].setProjectionViewRTEMatrix(this._viewMatrixRTE);this.events.dispatch(this.events.viewchange,this)}refresh(){this._setProj(this._viewAngle,this.getAspectRatio()),this.update()}get width(){return this._width}get height(){return this._height}setViewportSize(e,t){this._width=e,this._height=t,this.refresh()}getAspectRatio(){return this._width/this._height}_setProj(e,t){this._viewAngle=e;for(let s=0,n=this.frustums.length;s<n;s++){let o=this.frustums[s];o.setProjectionMatrix(e,t,o.near,o.far,this._isOrthographic,this._focusDistance)}var i,r;this._horizontalViewAngle=(i=e,r=t,ir*Math.atan(Math.tan(Xe*i)*r)),this._updateViewportParameters()}_updateViewportParameters(){this._tanViewAngle_hrad=Math.tan(this._viewAngle*Xe),this._tanViewAngle_hradOneByHeight=this._tanViewAngle_hrad*(1/this._height),this._projSizeConst=Math.min(this._width<512?512:this._width,this._height<512?512:this._height)/(this._viewAngle*U)}setViewAngle(e){this._viewAngle=e,this.refresh()}getViewAngle(){return this._viewAngle}get viewAngle(){return this._viewAngle}get verticalViewAngle(){return this._viewAngle}get horizontalViewAngle(){return this._horizontalViewAngle}set(e,t,i){return this.eye.x=e.x,this.eye.y=e.y,this.eye.z=e.z,t=t||this._b,i=i||this._u,this._b.x=e.x-t.x,this._b.y=e.y-t.y,this._b.z=e.z-t.z,this._r.copy(i.cross(this._b)),this._b.normalize(),this._r.normalize(),this._u.copy(this._b.cross(this._r)),this._f.set(-this._b.x,-this._b.y,-this._b.z),this}look(e,t){this._b.set(this.eye.x-e.x,this.eye.y-e.y,this.eye.z-e.z),this._r.copy((t||this._u).cross(this._b)),this._b.normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z),this._r.normalize(),this._u.copy(this._b.cross(this._r))}slide(e,t,i){this.eye.x+=e*this._r.x+t*this._u.x+i*this._b.x,this.eye.y+=e*this._r.y+t*this._u.y+i*this._b.y,this.eye.z+=e*this._r.z+t*this._u.z+i*this._b.z}setRoll(e){let t=Math.cos(e),i=Math.sin(e),r=this._r.clone();this._r.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setPitch(e){let t=Math.cos(e),i=Math.sin(e),r=this._b;this._b.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setYaw(e){let t=Math.cos(e),i=Math.sin(e),r=this._r;this._r.set(t*r.x-i*this._b.x,t*r.y-i*this._b.y,t*r.z-i*this._b.z),this._b.set(i*r.x+t*this._b.x,i*r.y+t*this._b.y,i*r.z+t*this._b.z)}setPitchYawRoll(e,t,i){let r=new O;r.setPitchYawRoll(e,t,i),this.setRotation(r)}getPitch(){return this.getRotation().getPitch()}getYaw(){return this.getRotation().getYaw()}getRoll(){return this.getRotation().getRoll()}getAbsolutePitch(){return this.getRotation().getPitch()}getAbsoluteYaw(){return this.getRotation().getYaw()}getAbsoluteRoll(){return this.getRotation().getRoll()}getRotation(){return O.getLookRotation(this._f,this._u).conjugate()}setRotation(e,t,i,r){e.mulVec3Res(t||new m(0,1,0),this._u),e.mulVec3Res(i||new m(1,0,0),this._r),e.mulVec3Res(r||new m(0,0,1),this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotate(e){e.mulVec3Res(this._u,this._u),e.mulVec3Res(this._r,this._r),e.mulVec3Res(this._b,this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}unproject2v(e){return this.unproject(e.x,e.y)}unproject(e,t,i,r){let s=.5*this._width,n=.5*this._height,o=(e-s)/s,l=-(t-n)/n,h=this.frustums[0];if(this.isOrthographic){if(i){let c=.5*(h.right-h.left)*o,d=.5*(h.top-h.bottom)*l,u=this.getUp().scale(d),g=this.getRight().scale(c),f=u.addA(g),p=this.eye.add(f),_=this.getForward(),v=p.addA(_.scaleTo(i));return r&&r.copy(v),v.sub(this.eye).normalize()}return this.getForward()}{let c=h.inverseProjectionViewMatrix,d=c.mulVec4(new te(o,l,-1,1)).affinity();return c.mulVec4(new te(o,l,0,1)).affinity().subA(d).toVec3().normalize()}}project3v(e){return this.project(e.x,e.y,e.z)}project(e,t,i){let r=this.frustums[0].projectionViewMatrix.mulVec4(new te(e,t,i,1));return new N((1+r.x/r.w)*this._width*.5,(1-r.y/r.w)*this._height*.5)}rotateAround(e,t=!1,i=m.ZERO,r=m.UP){r=t?this._u:r;let s=ne.getRotation(e,r),n=ne.getRotationAroundPoint(e,i,r);this.eye=n.mulVec3(this.eye),this._u=s.mulVec3(this._u).normalize(),this._r=s.mulVec3(this._r).normalize(),this._b=s.mulVec3(this._b).normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotateHorizontal(e,t,i,r){this.rotateAround(e,t,i,r)}rotateVertical(e,t){this.rotateAround(e,!1,t,this._r)}projectedSize(e,t){return Math.atan(t/this.eye.distance(e))*this._projSizeConst}getViewMatrix(){return this._viewMatrix._m}getNormalMatrix(){return this._normalMatrix._m}setCurrentFrustum(e){this.currentFrustumIndex=e,this.frustumColorIndex=10*(e+1)/255,this.isFirstPass=e===this.FARTHEST_FRUSTUM_INDEX}getCurrentFrustum(){return this.currentFrustumIndex}containsSphere(e){for(let t=0;t<this.frustums.length;t++)if(this.frustums[t].containsSphere(e))return!0;return!1}get frustum(){return this.frustums[this.currentFrustumIndex]}getProjectionMatrix(){return this.frustum.projectionMatrix._m}getProjectionViewMatrix(){return this.frustum.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.frustum.projectionViewRTEMatrix._m}getInverseProjectionViewMatrix(){return this.frustum.inverseProjectionViewMatrix._m}getInverseProjectionMatrix(){return this.frustum.inverseProjectionMatrix._m}viewDistance(e,t=1e4){let i=e.add(this.getBackward().scaleTo(t));this.set(i,e),this.update()}copy(e){this.eye.copy(e.eye),this._r.copy(e._r),this._u.copy(e._u),this._b.copy(e._b),this._f.copy(e._f),this._width=e.width,this._height=e.height,this.setViewAngle(e.viewAngle),this.update()}getAltitude(){return this.eye.y}};Ga.__counter__=0;let es=Ga;class ja extends es{constructor(e,t={}){super({...t,frustums:t.frustums||[[1,100.075],[100,1000.075],[1e3,101e4],[1e6,1e9]]}),this.planet=e,this.minAltitude=t.minAltitude||1,this.maxAltitude=t.maxAltitude||2e7,this._lonLat=this.planet.ellipsoid.cartesianToLonLat(this.eye),this._lonLatMerc=this._lonLat.forwardMercator(),this._terrainAltitude=this._lonLat.height,this._terrainPoint=new m,this._insideSegment=null,this.slope=0,this._keyLock=new ci,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._checkTerrainCollision=!0,this.eyeNorm=this.eye.getNormal()}setTerrainCollisionActivity(e){this._checkTerrainCollision=e}update(){this.events.stopPropagation();let e=this.maxAltitude+this.planet.ellipsoid.getEquatorialSize();this.eye.length()>e&&this.eye.copy(this.eye.getNormal().scale(e)),super.update(),this.updateGeodeticPosition(),this.eyeNorm=this.eye.getNormal(),this.slope=this._b.dot(this.eyeNorm),this.events.dispatch(this.events.viewchange,this)}updateGeodeticPosition(){this.planet.ellipsoid.cartesianToLonLatRes(this.eye,this._lonLat),Math.abs(this._lonLat.lat)<=de&&A.forwardMercatorRes(this._lonLat,this._lonLatMerc)}setAltitude(e){let t=this._terrainPoint,i=this.planet.ellipsoid.getSurfaceNormal3v(this.eye);this.eye.x=i.x*e+t.x,this.eye.y=i.y*e+t.y,this.eye.z=i.z*e+t.z,this._terrainAltitude=e}getAltitude(){return this._terrainAltitude}setLonLat(e,t,i){this.stopFlying(),this._lonLat.set(e.lon,e.lat,e.height||this._lonLat.height);let r=this.planet.ellipsoid,s=r.lonLatToCartesian(this._lonLat),n=t?r.lonLatToCartesian(t):m.ZERO;this.set(s,n,i||s.getNormal()),this.update()}getLonLat(){return this._lonLat}getHeight(){return this._lonLat.height}getExtentPosition(e,t){t=t||0;let i=e.getNorth(),r=e.getSouth(),s=e.getEast(),n=e.getWest();n>s&&(s+=360);let o=this.planet.ellipsoid,l=new A(s,i),h=o.lonLatToCartesian(l);l.lat=r;let c=o.lonLatToCartesian(l);l.lon=n;let d=o.lonLatToCartesian(l);l.lat=i;let u=o.lonLatToCartesian(l),g=m.sub(h,d).scale(.5).addA(d),f=g.length();f<1e-6&&(l.lon=.5*(s+n),l.lat=.5*(i+r),g=o.lonLatToCartesian(l)),u.subA(g),c.subA(g),h.subA(g),d.subA(g);let p=g.getNormal(),_=p.cross(m.NORTH).normalize(),v=_.cross(p).normalize(),x=Math.max(Math.abs(v.dot(u)),Math.abs(v.dot(c)),Math.abs(v.dot(h)),Math.abs(v.dot(d))),y=Math.max(Math.abs(_.dot(u)),Math.abs(_.dot(c)),Math.abs(_.dot(h)),Math.abs(_.dot(d))),w=Math.tan(this._viewAngle*U*.5),b=this.getAspectRatio()*w,E=Math.max(y/b,x/w);return g.normalize(),g.scale(f+E+t),g}viewExtent(e,t){this.stopFlying(),this.set(this.getExtentPosition(e,t),m.ZERO,m.NORTH),this.update()}flyExtent(e,t,i={}){i.look=m.ZERO,this.flyCartesian(this.getExtentPosition(e,t),i)}viewDistance(e,t=1e4){let i=this.eye.add(this.getForward().scaleTo(t)),r=O.getRotationBetweenVectors(i.getNormal(),e.getNormal());if(r.isZero()){let s=e.add(this.getBackward().scaleTo(t));this.set(s,e)}else{let s=e.add(r.mulVec3(this.getBackward()).scale(t)),n=r.mulVec3(this.getUp());this.set(s,e,n)}this.update()}flyLonLat(e,t={}){let i=new A(e.lon,e.lat,e.height||this._lonLat.height);this.flyCartesian(this.planet.ellipsoid.lonLatToCartesian(i),t)}flyDistance(e,t=1e4,i={}){let r=this.eye.add(this.getForward().scaleTo(t)),s=O.getRotationBetweenVectors(r.getNormal(),e.getNormal());if(s.isZero()){let n=e.add(this.getBackward().scaleTo(t));this.set(n,e)}else{let n=e.add(s.mulVec3(this.getBackward()).scale(t)),o=s.mulVec3(this.getUp());i.look=e,i.up=o,this.flyCartesian(n,i)}}flyCartesian(e,t={}){this.stopFlying(),t.preventLock||(this.planet.layerLock.lock(this._keyLock),this.planet.terrainLock.lock(this._keyLock),this.planet.normalMapCreator.lock(this._keyLock)),t.amplitude=t.amplitude!=null?t.amplitude:1,t.look=t.look||m.ZERO,t.up=t.up||m.NORTH,t.duration=t.duration||800;const i=t.ease||Ua;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this),t.look instanceof A&&(t.look=this.planet.ellipsoid.lonLatToCartesian(t.look));let r=this.eye.clone(),s=this._u,n=this._b,o=this.planet.ellipsoid.cartesianToLonLat(e),l=t.up,h=this.planet.ellipsoid.lonLatToCartesian(new A(o.lon,o.lat,0)),c=m.sub(e,t.look),d=l.cross(c);c.normalize(),d.normalize();let u=c.cross(d),g=r.getNormal(),f=h.getNormal(),p=1-g.dot(f),_=t.amplitude*ws*Math.sqrt(p>0?p:0),v=6639613,x=Math.max(this._lonLat.height,o.height);x>v&&(v=x);let y=x+2.5*_*(v-x),w=m.ZERO;this._flight={fly:b=>{let E=i(b),C=1-E,T=r.smerp(h,C).normalize(),L=this.planet.getRayIntersectionEllipsoid(new H(w,T)),M=this._lonLat.height*C*C*C+3*y*C*C*E+3*y*C*E*E+o.height*E*E*E,R=L.addA(T.scale(M)),z=s.smerp(u,C),F=m.add(R,n.smerp(c,C).negateTo()),P=new m(R.x-F.x,R.y-F.y,R.z-F.z),D=z.cross(P);P.normalize(),D.normalize();let k=P.cross(D);return{eye:R,n:P,u:D,v:k}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet.normalMapCreator.free(this._keyLock),super.stopFlying())}rotateLeft(e,t){this.rotateHorizontal(e,t!==!0,m.ZERO),this.update()}rotateRight(e,t){this.rotateHorizontal(-e,t!==!0,m.ZERO),this.update()}rotateUp(e){this.rotateVertical(e,m.ZERO),this.update()}rotateDown(e){this.rotateVertical(-e,m.ZERO),this.update()}rotateVertical(e,t,i=0){let r=new ne().setRotation(this._r,e),s=new ne().setIdentity().translate(t),n=new ne().setIdentity().translate(t.negateTo()),o=s.mul(r).mul(n).mulVec3(this.eye),l=r.mulVec3(this._u).normalize(),h=r.mulVec3(this._r).normalize(),c=r.mulVec3(this._b).normalize(),d=o.getNormal(),u=c.dot(d);if(i){let g=u-this.slope;if(u<i&&g<0)return;(u>.1&&l.dot(d)>0||this.slope<=.1||this._u.dot(this.eye.getNormal())<=0)&&(this.eye=o,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z))}else this.eye=o,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z)}checkTerrainCollision(){if(this._terrainAltitude=this._lonLat.height,this._insideSegment&&this._insideSegment.planet)return this._terrainAltitude=this._insideSegment.getTerrainPoint(this.eye,this._insideSegment.getInsideLonLat(this),this._terrainPoint),this._terrainAltitude<this.minAltitude&&this._checkTerrainCollision&&this.setAltitude(this.minAltitude),this._terrainPoint}getSurfaceVisibleDistance(e){let t=this.planet.ellipsoid.equatorialSize;return t*Math.acos(t/(t+this._lonLat.height+e))}getHeading(){let e=this.eye.getNormal(),t=m.proj_b_to_plane(this.slope>=.97?this.getUp():this.getForward(),e).normalize(),i=m.proj_b_to_plane(m.NORTH,e).normalize(),r=Math.sign(e.dot(t.cross(i)))*Math.acos(t.dot(i))*J;return r<0?360+r:r}isVisible(e){let t=this.eye.length();return this.eye.distance(e)<Math.sqrt(t*t-this.planet.ellipsoid.equatorialSizeSqr)}getPitch(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getPitch()}getYaw(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getYaw()}getRoll(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getRoll()}setPitch(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(e,this.getYaw(),this.getRoll(),t),this.setRotation(i)}setYaw(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),e,this.getRoll(),t),this.setRotation(i)}setRoll(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),this.getYaw(),e,t),this.setRotation(i)}setPitchYawRoll(e,t,i){let r=this.planet.getFrameRotation(this.eye),s=new O;s.setPitchYawRoll(e,t,i,r).conjugate(),this.setRotation(s)}}const qa=class Xo{constructor(e,t={}){this.handler=e,this.__id=Xo.__counter__++,this._fbo=null,this._width=t.width||e.canvas.width,this._height=t.height||e.canvas.height,this._depthComponent=t.depthComponent!=null?t.depthComponent:"DEPTH_COMPONENT16",this._useDepth=t.useDepth==null||t.useDepth,this._active=!1,this._size=t.size||1,this._depthRenderbuffer=null,this._filter=t.filter||"NEAREST"}get width(){return this._width}get height(){return this._height}setSize(e,t,i=!1){this._width=e,this._height=t,this._active&&this.handler.gl.viewport(0,0,this._width,this._height),(this._useDepth||i)&&(this.destroy(),this.init())}init(){}destroy(){}isComplete(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE}checkStatus(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)}activate(){let e=this.handler.gl;e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo),e.viewport(0,0,this._width,this._height),this._active=!0;let t=this.handler.framebufferStack.current().data;return t&&(t._active=!1),this.handler.framebufferStack.push(this),this}deactivate(){let e=this.handler,t=e.gl;t.bindFramebuffer(t.FRAMEBUFFER,null),this._active=!1;let i=this.handler.framebufferStack.popPrev();i?(t.bindFramebuffer(t.FRAMEBUFFER,i._fbo),t.viewport(0,0,i._width,i._height)):t.viewport(0,0,e.canvas.width,e.canvas.height)}isEqual(e){return!!e&&this.__id===e.__id}};qa.__counter__=0;let Ya=qa;class _i{constructor(e=256,t=256){this._canvas=document.createElement("canvas"),this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d",{willReadFrequently:!0})}getCanvas(){return this._canvas}getContext(){return this._context}fillEmpty(){let e=this._context.getImageData(0,0,this._canvas.width,this._canvas.height),t=e.data;for(let i=0,r=t.length;i<r;i+=4)t[i]=t[i+1]=t[i+2]=t[i+3]=0;this._context.putImageData(e,0,0)}fill(e){this._context.fillStyle=e,this._context.fill()}getData(){return this._context.getImageData(0,0,this._canvas.width,this._canvas.height).data}fillColor(e){this._context.fillStyle=e,this._context.fillRect(0,0,this._canvas.width,this._canvas.height)}setData(e){let t=this._context.createImageData(this._canvas.width,this._canvas.height);t.data.set(e),this._context.putImageData(t,0,0)}resize(e,t){this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d")}drawImage(e,t,i,r,s){this._context.drawImage(e,t||0,i||0,r||e.width,s||e.height)}getImage(){let e=new Image;return e.width=this.getWidth(),e.height=this.getHeight(),e.src=this._canvas.toDataURL("image/png"),e}getTextWidth(e){let t=this._context.measureText(e);return Math.round(t.width)}drawText(e,t=0,i=14,r="normal 14px Verdana",s="black"){this._context.fillStyle=s,this._context.font=r,this._context.fillText(e,t,i)}getWidth(){return this._canvas.width}getHeight(){return this._canvas.height}load(e,t){let i=new Image,r=this;i.onload=function(){r.resize(i.width,i.height),r._context.drawImage(i,0,0,i.width,i.height),t&&t(i)},i.src=e}openImage(){let e=this.getImage(),t="<!DOCTYPE html>";t+="<html>",t+="<head><title>Print</title></head>",t+="<body>",t+='<img src="'+e.src+'">',t+="</body>",t+="</html>";let i=window.open("","","width="+e.width+"px ,height="+e.height+"px");i&&(i.document.open(),i.document.write(t),i.document.close(),i.focus())}destroy(){this._canvas.width=1,this._canvas.height=1,this._canvas=null,this._context=null}}const Wa={UNSIGNED_BYTE:Uint8Array,FLOAT:Float32Array};class Se extends Ya{constructor(e,t={}){super(e,t),this.readPixelBuffersAsync=i=>{const r=this.handler.gl;if(this._skipFrame)return;this._skipFrame=!0;let s=this.width,n=this.height,o=this.pixelBuffers;this.activate();for(let d=0;d<o.length;d++){let u=o[d];r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.bufferData(r.PIXEL_PACK_BUFFER,u.data.byteLength,r.STREAM_READ),r.readBuffer(u.glAttachment),r.readPixels(0,0,s,n,r.RGBA,u.glType,0),r.bindBuffer(r.PIXEL_PACK_BUFFER,null)}this.deactivate();const l=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);var h,c;r.flush(),(h=r,c=l,new Promise((d,u)=>{(function g(){const f=h.clientWaitSync(c,0,0);f==h.WAIT_FAILED?u():f==h.TIMEOUT_EXPIRED?requestAnimationFrame(g):d()})()})).then(()=>{this._skipFrame=!1,r.deleteSync(l);for(let d=0;d<o.length;d++){let u=o[d];u.data&&(r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,u.data))}r.bindBuffer(r.PIXEL_PACK_BUFFER,null),i&&i(this)})},this._targets=Se.createTargets(t.targets),this._size=this._targets.length,this._renderbufferTarget=t.renderbufferTarget!=null?t.renderbufferTarget:"DEPTH_ATTACHMENT",this.textures=t.textures||new Array(this._size),this.pixelBuffers=[],this._skipFrame=!1}static createTargets(e){let t=0,i=0;return e?e.map(r=>{let s=r.attachment||"COLOR_ATTACHMENT";s==="COLOR_ATTACHMENT"&&(s="COLOR_ATTACHMENT"+t++);let n=r.type||"UNSIGNED_BYTE";return{internalFormat:r.internalFormat||"RGBA",format:r.format||"RGBA",type:n,attachment:s,filter:r.filter||"NEAREST",pixelBufferIndex:r.readAsync?i++:-1,TypeArrayConstructor:Wa[n]}}):[{internalFormat:"RGBA",format:"RGBA",type:"UNSIGNED_BYTE",attachment:"COLOR_ATTACHMENT0",filter:"NEAREST",pixelBufferIndex:-1,TypeArrayConstructor:Wa.UNSIGNED_BYTE}]}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.textures.length;t++)e.deleteTexture(this.textures[t]);this.textures=new Array(this._size);for(let t=0;t<this.pixelBuffers.length;t++)this.pixelBuffers[t].data=null,e.deleteBuffer(this.pixelBuffers[t].buffer);this.pixelBuffers=[],e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this._targets.length;i++){let r=this._targets[i],s=this.textures[i]||this.handler.createEmptyTexture2DExt(this._width,this._height,r.filter,r.internalFormat,r.format,r.type),n=e[r.attachment];s&&(this.bindOutputTexture(s,n),this.textures[i]=s),r.attachment!=="DEPTH_ATTACHMENT"&&t.push(n),r.pixelBufferIndex!==-1&&this._createPixelBuffer(r)}e.drawBuffers&&e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorage(e.RENDERBUFFER,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e[this._renderbufferTarget],e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}getPixelBufferData(e=0){let t=this._targets[e].pixelBufferIndex;return t!==-1?this.pixelBuffers[t].data:null}_createPixelBuffer(e){let t=this.handler.gl,i=e.pixelBufferIndex,r=this.pixelBuffers[i];r||(r=this.pixelBuffers[i]={buffer:null,data:null,glType:-1,glAttachment:-1});let s=this.width*this.height*4;r.data=null,r.data=new e.TypeArrayConstructor(s),r.buffer=t.createBuffer(),t.bindBuffer(t.PIXEL_PACK_BUFFER,r.buffer),t.bufferData(t.PIXEL_PACK_BUFFER,s,t.STREAM_READ),t.bindBuffer(t.PIXEL_PACK_BUFFER,null),r.glType=t[e.type],r.glAttachment=t[e.attachment]}bindOutputTexture(e,t){let i=this.handler.gl;i.bindTexture(i.TEXTURE_2D,e),i.framebufferTexture2D(i.FRAMEBUFFER,t||i.COLOR_ATTACHMENT0,i.TEXTURE_2D,e,0),i.bindTexture(i.TEXTURE_2D,null)}readPixels(e,t,i,r=0,s=1,n=1){let o=this.handler.gl;o.bindFramebuffer(o.FRAMEBUFFER,this._fbo),o.readBuffer&&o.readBuffer(o.COLOR_ATTACHMENT0+r||0),o.readPixels(t*this._width,i*this._height,s,n,o.RGBA,o[this._targets[r].type],e),o.bindFramebuffer(o.FRAMEBUFFER,null)}readAllPixels(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.FRAMEBUFFER,this._fbo),i.readBuffer&&i.readBuffer(i.COLOR_ATTACHMENT0+t),i.readPixels(0,0,this._width,this._height,i.RGBA,i[this._targets[t].type],e),i.bindFramebuffer(i.FRAMEBUFFER,null)}getImage(){let e=new Uint8Array(4*this._width*this._height);this.readAllPixels(e);let t=new _i(this._width,this._height);return t.setData(e),t.getImage()}readData(e,t,i,r=0){const s=this.width,n=this.height,o=Math.floor(e*(s-1)),l=4*(Math.floor(t*(n-1))*s+o),h=this.pixelBuffers[r].data;h&&(i[0]=h[l],i[1]=h[l+1],i[2]=h[l+2],i[3]=h[l+3])}}const lc=["tick","end","start","stop"],$a=class Zo{constructor(e={}){this.__handler=null,this.active=!0,this.__id=Zo.__counter__++,this.events=le(lc,this),this.name=e.name||"",this.startDate=e.startDate||0,this.endDate=e.endDate||0;let t=e.currentDate||ji(new Date);e.startDate&&t<e.startDate&&(t=e.startDate),e.endDate&&t>e.endDate&&(t=e.endDate),this.currentDate=t,this._multiplier=e.multiplier!==void 0?e.multiplier:1,this._running=1,this.deltaTicks=0,this.active=!0,this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}clearInterval(){this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}setInterval(e,t){this._intervalStart=this.currentDate,this._intervalDelay=e*Er,this._intervalCallback=t}setDate(e){let t=ji(e);this.startDate&&t<this.startDate&&(t=this.startDate),this.endDate&&t>this.endDate&&(t=this.endDate),this.currentDate=t}getDate(){return Pr(this.currentDate)}reset(){this.startDate&&(this.currentDate=this.startDate)}tick(e){let t=this._multiplier*this._running;if(this.deltaTicks=e*t,this.active){let i=js(this.currentDate,this.deltaTicks);t>0?this.endDate&&i>this.endDate?(this.currentDate=this.startDate,this.events.dispatch(this.events.end,this)):this.currentDate=i:this.startDate&&i<this.startDate?(this.currentDate=this.endDate,this.events.dispatch(this.events.end,this)):this.currentDate=i,this._intervalCallback&&this.currentDate-this._intervalStart>=this._intervalDelay&&(this._intervalStart=this.currentDate,this._intervalCallback(this)),this.events.dispatch(this.events.tick,this)}}isEqual(e){return this.__id===e.__id}start(){this._running===0&&(this._running=1,this.events.dispatch(this.events.start,this))}get multiplier(){return this._multiplier}set multiplier(e){this._multiplier=e}stop(){this._running===1&&(this._running=0,this.events.dispatch(this.events.stop,this))}};$a.__counter__=0;let hc=$a;class cc{constructor(e,t){t._programController=this,this._program=t,this._handler=e,this._activated=!1}initialize(){this._handler.gl&&this._program.createProgram(this._handler.gl)}getProgram(){return this._program}activate(){if(!this._activated){this._handler.activeProgram.deactivate(),this._handler.activeProgram=this;let e=this._program;this._activated=!0,e.enableAttribArrays(),e.use()}return this}remove(){let e=this._handler.programs;e[this._program.name]&&(this._activated&&this.deactivate(),this._program.delete(),delete e[this._program.name])}deactivate(){this._program.disableAttribArrays(),this._activated=!1}isActive(){return this._activated}set(e){return this.activate(),this._program.set(e),this}drawIndexBuffer(e,t){return this._program.drawIndexBuffer(e,t),this}drawArrays(e,t){return this._program.drawArrays(e,t),this}}let Xa=class{constructor(){this.next=null,this.prev=null,this.data=null}};class ts{constructor(e=256){this._current=new Xa,this._head=this._current;for(let t=0;t<e;t++){let i=new Xa;i.prev=this._current,this._current.next=i,this._current=i}this._current=this._head}current(){return this._current}push(e){this._current=this._current.next,this._current.data=e}pop(){let e=this._current.data;return this._current=this._current.prev,e}popPrev(){return this._current=this._current.prev,this._current.data}}const Za=["","WEBKIT_","MOZ_"],is=["webgl2","webgl"];class bt{constructor(e,t={}){this.framebufferStack=new ts,this._requestAnimationFrameId=0,this.drawFrame=()=>{let i=window.performance.now(),r=this.deltaTime;this.deltaTime=.5*(i-this._lastAnimationFrameTime+this.prevDeltaTime),this.deltaTime>3?this.deltaTime=3:this.deltaTime<1&&(this.deltaTime=1),this.prevDeltaTime=r,this._lastAnimationFrameTime=i,this.defaultClock.tick(this.deltaTime);for(let n=0;n<this._clocks.length;n++)this._clocks[n].tick(this.deltaTime);let s=this.canvas;Math.floor(s.clientWidth*this._params.pixelRatio)===s.width&&Math.floor(s.clientHeight*this._params.pixelRatio)===s.height||(s.clientWidth===0||s.clientHeight===0?this.stop():document.hidden||(this.start(),this.setSize(s.clientWidth,s.clientHeight))),this._frameCallback()},this.events=le(["visibilitychange","resize"]),this._throttledDrawFrame=this.drawFrame,this.defaultClock=new hc,this._clocks=[],this.prevDeltaTime=0,this.deltaTime=0,this.canvas=null,this.gl=null,this.programs={},this.activeProgram=null,this._canvasSize=[0,0],this._params={anisotropy:t.anisotropy||4,width:t.width||256,height:t.height||256,pixelRatio:Vs("og_dpi")||t.pixelRatio||1,extensions:t.extensions||[],context:t.context||{}},this.extensions={},this._canvasTarget=e,this._lastAnimationFrameTime=0,this._initialized=!1,this._frameCallback=function(){},this.transparentTexture=null,this.defaultTexture=null,this.framebufferStack=new ts,this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this),this.createTexture={NEAREST:this.createTexture_n,LINEAR:this.createTexture_l,MIPMAP:this.createTexture_mm,ANISOTROPIC:this.createTexture_a},this.createTextureDefault=this.createTexture_n,this.ONCANVASRESIZE=null,this._createCanvas(),(t.autoActivate||Ge(t.autoActivate))&&this.initialize()}set frameDelay(e){this._throttledDrawFrame=e===0?this.drawFrame:Qt(this.drawFrame,e)}isInitialized(){return this._initialized}_createCanvas(){this._canvasTarget?this._canvasTarget instanceof HTMLElement?this.canvas=this._canvasTarget:this.canvas=document.getElementById(this._canvasTarget)||document.querySelector(this._canvasTarget):(this.canvas=document.createElement("canvas"),this.canvas.width=this._params.width,this.canvas.height=this._params.height)}static getExtension(e,t){if(!e)return;let i,r;for(i in Za)if(r=e.getExtension(Za[i]+t),r)return r}static getContext(e,t){let i=null;try{let r=new URLSearchParams(location.search).get("og_ver");if(r)i=e.getContext(r,t),i&&(i.type=r);else for(let s=0;s<is.length;s++)if(i=e.getContext(is[s],t),i){i.type=is[s];break}}catch{Ke.logErr("exception during the GL context initialization")}return i||Ke.logErr("could not initialise WebGL"),i}setFrameCallback(e){e&&(this._frameCallback=e)}createEmptyTexture2DExt(e=1,t=1,i="NEAREST",r="RGBA",s="RGBA",n="UNSIGNED_BYTE",o="CLAMP_TO_EDGE",l=0){let h=this.gl,c=h.createTexture();return h.bindTexture(h.TEXTURE_2D,c),h.texImage2D(h.TEXTURE_2D,l,h[r.toUpperCase()],e,t,0,h[s.toUpperCase()],h[n.toUpperCase()],null),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h[o.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h[o.toUpperCase()]),h.bindTexture(h.TEXTURE_2D,null),c}createEmptyTexture_n(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createEmptyTexture_l(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createTexture_n_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_n_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}loadCubeMapTexture(e){let t=this.gl,i=t.createTexture();t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,t.LINEAR);let r=[[e.px,t.TEXTURE_CUBE_MAP_POSITIVE_X],[e.nx,t.TEXTURE_CUBE_MAP_NEGATIVE_X],[e.py,t.TEXTURE_CUBE_MAP_POSITIVE_Y],[e.ny,t.TEXTURE_CUBE_MAP_NEGATIVE_Y],[e.pz,t.TEXTURE_CUBE_MAP_POSITIVE_Z],[e.nz,t.TEXTURE_CUBE_MAP_NEGATIVE_Z]],s=new _i;s.fillEmpty();let n=s.getImage();for(let o=0;o<r.length;o++){let l=r[o][1];t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texImage2D(l,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)}for(let o=0;o<r.length;o++){let l=r[o][1],h=new Image;h.crossOrigin="",h.onload=function(c,d,u){return function(){t&&c&&(t.bindTexture(t.TEXTURE_CUBE_MAP,c),t.texImage2D(d,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,u))}}(i,l,h),h.src=r[o][0]}return i}addProgram(e,t=!1){if(this.programs[e.name])console.warn(`Shader program: "${e.name}" already exists.`);else{let i=new cc(this,e);this.programs[e.name]=i,this._initProgramController(i),t||(i._activated=!1)}return e}removeProgram(e){this.programs[e]&&this.programs[e].remove()}addPrograms(e){for(let t=0;t<e.length;t++)this.addProgram(e[t])}_initProgramController(e){this._initialized&&(e.initialize(),this.activeProgram?(e.deactivate(),this.activeProgram._program.enableAttribArrays(),this.activeProgram._program.use()):(this.activeProgram=e,e.activate()))}_initPrograms(){for(let e in this.programs)this._initProgramController(this.programs[e])}initializeExtension(e,t=!1){if(!this.extensions||!this.extensions[e]){let i=bt.getExtension(this.gl,e);i?this.extensions[e]=i:t&&console.warn("og.webgl.Handler: extension '"+e+"' doesn't initialize.")}return this.extensions&&this.extensions[e]}initialize(){if(this._initialized||!this.canvas||(this.gl=bt.getContext(this.canvas,this._params.context),!this.gl))return;this._initialized=!0,this._params.extensions.push("EXT_texture_filter_anisotropic"),this.gl.type==="webgl"?(this._params.extensions.push("OES_standard_derivatives"),this._params.extensions.push("OES_element_index_uint"),this._params.extensions.push("WEBGL_depth_texture"),this._params.extensions.push("ANGLE_instanced_arrays")):(this._params.extensions.push("EXT_color_buffer_float"),this._params.extensions.push("OES_texture_float_linear"));let e=this._params.extensions.length;for(;e--;)this.initializeExtension(this._params.extensions[e],!0);this.gl.type==="webgl"?(this.createTexture_n=this.createTexture_n_webgl1.bind(this),this.createTexture_l=this.createTexture_l_webgl1.bind(this),this.createTexture_mm=this.createTexture_mm_webgl1.bind(this),this.createTexture_a=this.createTexture_a_webgl1.bind(this)):(this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this)),this.createTexture.NEAREST=this.createTexture_n,this.createTexture.LINEAR=this.createTexture_l,this.createTexture.MIPMAP=this.createTexture_mm,this.createTexture.ANISOTROPIC=this.createTexture_a,this.extensions.EXT_texture_filter_anisotropic?this.createTextureDefault=this.createTexture_a:this.createTextureDefault=this.createTexture_mm,this._initPrograms(),this._setDefaults(),this.intersectionObserver=new IntersectionObserver(t=>{this._toggleVisibilityChange(t[t.length-1].isIntersecting)},{threshold:0}),this.intersectionObserver.observe(this.canvas),this.resizeObserver=new ResizeObserver(t=>{this._toggleVisibilityChange(t[0].contentRect.width!==0&&t[0].contentRect.height!==0)}),this.resizeObserver.observe(this.canvas),document.addEventListener("visibilitychange",()=>{this._toggleVisibilityChange(document.visibilityState==="visible")})}_toggleVisibilityChange(e){e?(this.start(),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(),this.events.dispatch(this.events.visibilitychange,!0)):(this.events.dispatch(this.events.visibilitychange,!1),this.stop())}_setDefaults(){let e=this.gl;e&&this.canvas&&(e.depthFunc(e.LESS),e.enable(e.DEPTH_TEST),this.setSize(this.canvas.clientWidth||this._params.width,this.canvas.clientHeight||this._params.height),e.frontFace(e.CCW),e.cullFace(e.BACK),e.enable(e.CULL_FACE),e.disable(e.BLEND),this.createDefaultTexture({color:"rgba(0,0,0,0.0)"},t=>{this.transparentTexture=t}),this.createDefaultTexture({color:"rgba(255, 255, 255, 1.0)"},t=>{this.defaultTexture=t}))}getCanvasSize(){return this._canvasSize}createStreamArrayBuffer(e,t,i,r=4){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,t*e*r,i||s.STREAM_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=e,n.numItems=t,n}setStreamArrayBuffer(e,t,i=0){let r=this.gl;return r.bindBuffer(r.ARRAY_BUFFER,e),r.bufferSubData(r.ARRAY_BUFFER,i,t),r.bindBuffer(r.ARRAY_BUFFER,null),e}createArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i,n}createArrayBufferLength(e,t){let i=this.gl,r=i.createBuffer();return i.bindBuffer(i.ARRAY_BUFFER,r),i.bufferData(i.ARRAY_BUFFER,e,t||i.STATIC_DRAW),i.bindBuffer(i.ARRAY_BUFFER,null),r.itemSize=1,r.numItems=e,r}createElementArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,n),s.bufferData(s.ELEMENT_ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length,n}setSize(e,t){this._params.width=e,this._params.height=t,this.canvas&&(this.canvas.width=e*this._params.pixelRatio,this.canvas.height=t*this._params.pixelRatio,this._canvasSize[0]=this.canvas.width,this._canvasSize[1]=this.canvas.height,this.gl&&this.gl.viewport(0,0,e,t),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(this.canvas),this.events.dispatch(this.events.resize,this))}get pixelRatio(){return this._params.pixelRatio}set pixelRatio(e){this._params.pixelRatio=e,this.setSize(this._params.width,this._params.height)}getWidth(){return this.canvas?this.canvas.width:0}getHeight(){return this.canvas?this.canvas.height:0}getClientAspect(){return this.canvas?this.canvas.clientWidth/this.canvas.clientHeight:0}getCenter(){let e=this.canvas;return e?new N(Math.round(.5*e.width),Math.round(.5*e.height)):new N}clearFrame(){let e=this.gl;e.clearColor(0,0,0,1),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}start(){!this._requestAnimationFrameId&&this._initialized&&this._animationFrameCallback()}stop(){this._requestAnimationFrameId&&(window.cancelAnimationFrame(this._requestAnimationFrameId),this._requestAnimationFrameId=0)}isStopped(){return!this._requestAnimationFrameId}isWebGl2(){return!!this.gl&&this.gl.type==="webgl2"}_animationFrameCallback(){this._requestAnimationFrameId=window.requestAnimationFrame(()=>{this._throttledDrawFrame(),this._requestAnimationFrameId&&this._animationFrameCallback()})}createDefaultTexture(e,t){let i,r;if(e&&e.color)i=new _i(2,2),i.fillColor(e.color),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r);else if(e&&e.url){let s=new Image,n=this;s.onload=function(){r=n.createTextureDefault(s),r.default=!0,t(r)},s.src=e.url}else i=new _i(2,2),i.fillColor("#C5C5C5"),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r)}deleteTexture(e){e&&!e.default&&this.gl.deleteTexture(e)}destroy(){var e,t;(e=this.resizeObserver)==null||e.disconnect(),(t=this.intersectionObserver)==null||t.disconnect(),this.stop();for(let r in this.programs)this.removeProgram(r);let i=this.gl;if(i){i.deleteTexture(this.transparentTexture),this.transparentTexture=null,i.deleteTexture(this.defaultTexture),this.defaultTexture=null,this.framebufferStack=new ts;let r=i.getParameter(i.MAX_VERTEX_ATTRIBS),s=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,s);for(let o=0;o<r;++o)i.disableVertexAttribArray(o),i.vertexAttribPointer(o,4,i.FLOAT,!1,0,0),i.vertexAttrib1f(o,0);i.deleteBuffer(s);let n=i.getParameter(i.MAX_TEXTURE_IMAGE_UNITS);for(let o=0;o<n;++o)i.activeTexture(i.TEXTURE0+o),i.bindTexture(i.TEXTURE_CUBE_MAP,null),i.bindTexture(i.TEXTURE_2D,null);i.activeTexture(i.TEXTURE0),i.useProgram(null),i.bindBuffer(i.ARRAY_BUFFER,null),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,null),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindRenderbuffer(i.RENDERBUFFER,null),i.disable(i.BLEND),i.disable(i.CULL_FACE),i.disable(i.DEPTH_TEST),i.disable(i.DITHER),i.disable(i.SCISSOR_TEST),i.blendColor(0,0,0,0),i.blendEquation(i.FUNC_ADD),i.blendFunc(i.ONE,i.ZERO),i.clearColor(0,0,0,0),i.clearDepth(1),i.clearStencil(-1)}this.canvas&&(this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.canvas.width=1,this.canvas.height=1,this.canvas=null),this.gl=null,this._initialized=!1}addClock(e){e.__handler||(e.__handler=this,this._clocks.push(e))}addClocks(e){for(let t=0;t<e.length;t++)this.addClock(e[t])}removeClock(e){if(e.__handler){let t=this._clocks,i=t.length;for(;i--;)if(t[i].isEqual(e)){e.__handler=null,t.splice(i,1);break}}}}class Qa extends Ya{constructor(e,t={}){super(e,t),this._internalFormat=t.internalFormat?t.internalFormat.toUpperCase():"RGBA8",this._msaa=t.msaa!=null?t.msaa:4,this._glFilter=0,this.renderbuffers=new Array(this._size)}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.renderbuffers.length;t++)e.deleteRenderbuffer(this.renderbuffers[t]);this.renderbuffers=new Array(this._size),e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._glFilter=e[this._filter],this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this.renderbuffers.length;i++){let r=e.createRenderbuffer();e.bindRenderbuffer(e.RENDERBUFFER,r),this._msaa>0?e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._internalFormat],this._width,this._height):e.renderbufferStorage(e.RENDERBUFFER,e[this._internalFormat],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+i,e.RENDERBUFFER,r),t.push(e.COLOR_ATTACHMENT0+i),this.renderbuffers[i]=r,e.bindRenderbuffer(e.RENDERBUFFER,null)}e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}blitTo(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.READ_FRAMEBUFFER,this._fbo),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,e._fbo),i.readBuffer(i.COLOR_ATTACHMENT0+t),i.clearBufferfv(i.COLOR,0,[0,0,0,1]),i.blitFramebuffer(0,0,this._width,this._height,0,0,e._width,e._height,i.COLOR_BUFFER_BIT,this._glFilter),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindFramebuffer(i.READ_FRAMEBUFFER,null),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,null)}}Object.freeze(Object.defineProperty({__proto__:null,Framebuffer:Se,Handler:bt,Multisample:Qa,Program:X,types:ue},Symbol.toStringTag,{value:"Module"}));class rs extends hi{constructor(e,t={}){super(e,t),this._image=t.image||null,this._src=t.src||null,this._onLoad_=null}get instanceName(){return"GeoImage"}abortLoading(){this._image instanceof HTMLImageElement&&(this._image.src="")}setSrc(e){this._planet&&this._planet._geoImageCreator.remove(this),this._src=e,this._sourceReady=!1,this._sourceCreated=!1,this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=e}setImage(e){this._planet&&this._planet._geoImageCreator.remove(this),this._sourceCreated=!1,this._sourceReady=!1,this._image=e,this._image.crossOrigin="Anonymous",this._src=e.src,xr(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))}_createSourceTexture(){!this._sourceCreated&&this._image&&(this._sourceTexture=this._planet.renderer.handler.createTexture_l(this._image),this._sourceCreated=!0)}_onLoad(e){this._applyImage(this._image),this._image instanceof HTMLImageElement&&this._image.removeEventListener("load",this._onLoad_),this._onLoad_=null}_applyImage(e){e&&(this._frameWidth=St(2*e.width,4096),this._frameHeight=St(3*e.height,4096),this._sourceReady=!0,this._planet&&this._planet._geoImageCreator.add(this))}loadMaterial(e){e.isLoading=!0,this._creationProceeding=!0,!this._sourceReady&&this._src?this._image?this._image instanceof HTMLImageElement&&(xr(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))):(this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=this._src):this._planet&&this._planet._geoImageCreator.add(this)}abortMaterialLoading(e){this._image&&this._image instanceof HTMLImageElement&&(this._image.src=""),this._creationProceeding=!1,e.isLoading=!1,e.isReady=!1}}Object.freeze(Object.defineProperty({__proto__:null,AtmosphereConfig:class extends ee{constructor(a={}){super(a),this.$maxOpacity=null,this.$minOpacity=null,this.$rayleight=null,this.$mie=null,this.$height=null,this.$bottomRadius=null,this.$mieScatteringCoefficient=null,this.$mieExtinctionCoefficient=null,this.$rayleighScatteringCoefficientA=null,this.$rayleighScatteringCoefficientB=null,this.$rayleighScatteringCoefficientC=null,this.$ozoneAbsorptionCoefficientA=null,this.$ozoneAbsorptionCoefficientB=null,this.$ozoneAbsorptionCoefficientC=null,this.$sunAngularRadius=null,this.$sunIntensity=null,this.$groundAlbedo=null,this.$ozoneDensityHeight=null,this.$ozoneDensityWide=null,this._toggleBtn=new _e({classList:["og-map-button","og-atmosphere_button"],icon:`<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
348
+ </button>`,{name:e.model.name}),...e}),this.events=le(Kh)}render(e){var t;return super.render(e),(t=this.el)==null||t.addEventListener("click",i=>{this.events.dispatch(this.events.click,this.model,this,i)}),this}}const ec=["select"];class tc extends be{constructor(e){super({template:'<div class="og-object3d-collection"></div>',model:e.model,...e}),this._onAdd=t=>{this._addItem(t)},this.events=le(ec),this._activeView=null}_addItem(e){let t=new Jh({model:e});t.appendTo(this.el),t.events.on("click",i=>{var r,s;this._activeView&&((r=this._activeView.el)==null||r.classList.remove("active")),this._activeView=t,(s=this._activeView.el)==null||s.classList.add("active"),this.events.dispatch(this.events.select,i,t)})}render(e){super.render(e);let t=this.model.getItems();for(let i of t)this._addItem(i);return this._initEvents(),this}_initEvents(){this.model.events.on("add",this._onAdd)}}const ic=["select"];class rc extends at{constructor(e){super({classList:["og-object3d-manager"],title:"Object3D Collection",visible:!1,resizable:!0,useHide:!0,top:25,right:85,width:252,height:480,minHeight:100,minWidth:100}),this._onLoadClick=()=>{let t=new be({initRender:!0,template:'<input type="file" accept=".obj,.mtl" multiple />'});t.el&&(t.el.addEventListener("change",i=>{const r=i.target;if(r.files){const s=Array.from(r.files),n=s.find(l=>l.name.toLowerCase().endsWith(".obj")),o=s.find(l=>l.name.toLowerCase().endsWith(".mtl"));n&&async function(l,h){return await Z.readFileObj(l,h).then(c=>({name:l.name,objects:h?c:[Z.merge(c)]}))}(n,o).then(this._addObject)}}),t.el.click())},this._addObject=t=>{this._object3dCollectionView.model.addItem(t)},this.events=le(ic),this._object3dCollectionView=new tc({model:e.model})}render(e){var t;super.render(e);let i=document.createElement("div");i.classList.add("og-editor_toolbar"),(t=this.container)==null||t.appendChild(i);let r=new nt({classList:["og-editor_toolbar-button"],icon:'<svg class="svg-icon" style="vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M426.666667 170.666667H170.666667c-47.146667 0-84.906667 38.186667-84.906667 85.333333L85.333333 768c0 47.146667 38.186667 85.333333 85.333334 85.333333h682.666666c47.146667 0 85.333333-38.186667 85.333334-85.333333V341.333333c0-47.146667-38.186667-85.333333-85.333334-85.333333H512l-85.333333-85.333333z" /></svg>',title:"Load 3D object"});return r.appendTo(i),r.events.on("click",this._onLoadClick),this._object3dCollectionView.appendTo(this.container),this._object3dCollectionView.events.on("select",s=>{this.events.dispatch(this.events.select,s)}),this}}const sc=["add","remove"];class Kr{constructor(e={}){this.events=le(sc,this),this._items=Kr.createItemsMap(e.collection||[])}static createItemsMap(e){let t=new Map;for(let i=0;i<e.length;i++)t.set(e[i].name,e[i]);return t}getItem(e){return this._items.get(e)}addItem(e,t=!1){this._items.has(e.name)&&!t||(this._items.set(e.name,e),this.events.dispatch(this.events.add,e))}getItems(){return Array.from(this._items,([e,t])=>t)}}class Jr extends ee{constructor(e={}){super({name:"CameraFrameComposer",autoActivate:!0,...e}),this._onPostdraw=()=>{for(let t=0,i=this._frameHandlers.length;t<i;t++)this._frameHandlers[t].frame()},this._cameraLayer=new ut({scaleByDistance:[100,1e6,1],pickingEnabled:!1}),this._cameraScene=new ot("CameraScene"),this._frameHandlers=e.frameHandlers||[]}get frameHandlers(){return[...this._frameHandlers]}add(e){e.addTo(this),this._cameraLayer.add(e.cameraEntity)}oninit(){super.oninit(),this._cameraLayer.addTo(this._cameraScene)}activate(){super.activate(),this.renderer&&(this.renderer.events.on("postdraw",this._onPostdraw),this.renderer.addNode(this._cameraScene))}deactivate(){super.deactivate(),this.renderer&&(this.renderer.events.off("postdraw",this._onPostdraw),this.renderer.removeNode(this._cameraScene))}}let nc=Z.createFrustum();class Ha{constructor(e){this.camera=e.camera,this.frameBuffer=e.frameBuffer,this.frameHandler=e.frameHandler||null,this._composer=null,this._composerIndex=-1,this.showFrustum=e.showFrustum==null||e.showFrustum,this.cameraEntity=new V({visibility:!0,scale:this.frustumScale,geoObject:{tag:"frustum",color:"rgba(0,255,0,0.20)",object3d:nc}}),this.frameBuffer.init()}get frustumScale(){return Z.getFrustumScaleByCameraAspectRatio(1e3,this.camera.getViewAngle(),this.camera.getAspectRatio())}addTo(e){this._composer||(this._composer=e,this._composerIndex=e.frameHandlers.length,this._composer._frameHandlers.push(this))}remove(){this._composer&&(this._composer._frameHandlers.splice(this._composerIndex,1),this._composer=null,this._composerIndex=-1)}frame(){if(this.frameHandler&&this.frameBuffer.handler.gl&&(this.frameHandler(this),this.showFrustum)){let e=this.camera,t=Z.getFrustumScaleByCameraAngles(100,e.horizontalViewAngle,e.verticalViewAngle);this.cameraEntity.setScale3v(t),this.cameraEntity.setCartesian3v(e.eye),this.cameraEntity.setAbsolutePitch(e.getAbsolutePitch()),this.cameraEntity.setAbsoluteYaw(e.getAbsoluteYaw()),this.cameraEntity.setAbsoluteRoll(e.getAbsoluteRoll())}}}function Ht(a){let e=1/Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);a[0]*=e,a[1]*=e,a[2]*=e,a[3]*=e}class Va{constructor(e={}){this._pickingColorU=new Float32Array([0,0,0]),this._f=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],this.projectionMatrix=new ne,this.inverseProjectionMatrix=new ne,this.projectionViewMatrix=new ne,this.projectionViewRTEMatrix=new ne,this.inverseProjectionViewMatrix=new ne,this.left=0,this.right=0,this.bottom=0,this.top=0,this.near=0,this.far=0,this.cameraFrustumIndex=e.cameraFrustumIndex!=null?e.cameraFrustumIndex:-1,this.setProjectionMatrix(e.fov||30,e.aspect||1,e.near||1,e.far||1e3)}getRightPlane(){return this._f[0]}getLeftPlane(){return this._f[1]}getBottomPlane(){return this._f[2]}getTopPlane(){return this._f[3]}getBackwardPlane(){return this._f[4]}getForwardPlane(){return this._f[5]}getProjectionViewMatrix(){return this.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.projectionViewRTEMatrix._m}getProjectionMatrix(){return this.projectionMatrix._m}getInverseProjectionMatrix(){return this.inverseProjectionMatrix._m}setProjectionMatrix(e,t,i,r,s,n=10){if(s){let o=n*Math.tan(e*Xe),l=o*t;this._setFrustumParams(o,l,i,r),this.projectionMatrix.setOrthographic(this.left,this.right,this.bottom,this.top,this.near,this.far)}else{let o=i*Math.tan(e*Xe),l=o*t;this._setFrustumParams(o,l,i,r),this.projectionMatrix.setPerspective(this.left,this.right,this.bottom,this.top,this.near,this.far)}this.projectionMatrix.inverseTo(this.inverseProjectionMatrix)}_setFrustumParams(e,t,i,r){this.top=e,this.right=t,this.bottom=-this.top,this.left=-this.right,this.near=i,this.far=r}setProjectionViewRTEMatrix(e){this.projectionViewRTEMatrix=this.projectionMatrix.mul(e)}setViewMatrix(e){this.projectionViewMatrix=this.projectionMatrix.mul(e),this.projectionViewMatrix.inverseTo(this.inverseProjectionViewMatrix);let t=this.projectionViewMatrix._m;this._f[0][0]=t[3]-t[0],this._f[0][1]=t[7]-t[4],this._f[0][2]=t[11]-t[8],this._f[0][3]=t[15]-t[12],Ht(this._f[0]),this._f[1][0]=t[3]+t[0],this._f[1][1]=t[7]+t[4],this._f[1][2]=t[11]+t[8],this._f[1][3]=t[15]+t[12],Ht(this._f[1]),this._f[2][0]=t[3]+t[1],this._f[2][1]=t[7]+t[5],this._f[2][2]=t[11]+t[9],this._f[2][3]=t[15]+t[13],Ht(this._f[2]),this._f[3][0]=t[3]-t[1],this._f[3][1]=t[7]-t[5],this._f[3][2]=t[11]-t[9],this._f[3][3]=t[15]-t[13],Ht(this._f[3]),this._f[4][0]=t[3]-t[2],this._f[4][1]=t[7]-t[6],this._f[4][2]=t[11]-t[10],this._f[4][3]=t[15]-t[14],Ht(this._f[4]),this._f[5][0]=t[3]+t[2],this._f[5][1]=t[7]+t[6],this._f[5][2]=t[11]+t[10],this._f[5][3]=t[15]+t[14],Ht(this._f[5])}containsPoint(e){for(let t=0;t<6;t++)if(e.dotArr(this._f[t])+this._f[t][3]<=0)return!1;return!0}containsSphereBottomExc(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphereButtom(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[2])+i[2][3]<=t)}containsSphere(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[2])+i[2][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphere2(e,t){let i=-t;return!(e.dotArr(this._f[0])+this._f[0][3]<=i||e.dotArr(this._f[1])+this._f[1][3]<=i||e.dotArr(this._f[2])+this._f[2][3]<=i||e.dotArr(this._f[3])+this._f[3][3]<=i||e.dotArr(this._f[4])+this._f[4][3]<=i||e.dotArr(this._f[5])+this._f[5][3]<=i)}containsBox(e){let t,i,r=!0;for(let s=0;s<6;s++){t=0,i=0;for(let n=0;n<8&&(i===0||t===0);n++)e.vertices[n].dotArr(this._f[s])+this._f[s][3]<0?t++:i++;if(i===0)return!1;t>0&&(r=!0)}return r}}const K=class{};K.Linear=a=>a,K.QuadIn=a=>a*a,K.QuadOut=a=>1-(1-a)*(1-a),K.QuadInOut=a=>a<.5?2*a*a:1-Math.pow(-2*a+2,2)/2,K.CubicIn=a=>a*a*a,K.CubicOut=a=>1-Math.pow(1-a,3),K.CubicInOut=a=>a<.5?4*a*a*a:1-Math.pow(-2*a+2,3)/2,K.QuartIn=a=>a*a*a*a,K.QuartOut=a=>1-Math.pow(1-a,4),K.QuartInOut=a=>a<.5?8*a*a*a*a:1-Math.pow(-2*a+2,4)/2,K.QuintIn=a=>a*a*a*a*a,K.QuintOut=a=>1-Math.pow(1-a,5),K.QuintInOut=a=>a<.5?16*a*a*a*a*a:1-Math.pow(-2*a+2,5)/2,K.SineIn=a=>1-Math.cos(a*Math.PI/2),K.SineOut=a=>Math.sin(a*Math.PI/2),K.SineInOut=a=>-(Math.cos(Math.PI*a)-1)/2,K.ExpoIn=a=>a===0?0:Math.pow(2,10*a-10),K.ExpoOut=a=>a===1?1:1-Math.pow(2,-10*a),K.ExpoInOut=a=>a===0?0:a===1?1:a<.5?Math.pow(2,20*a-10)/2:(2-Math.pow(2,-20*a+10))/2,K.CircIn=a=>1-Math.sqrt(1-Math.pow(a,2)),K.CircOut=a=>Math.sqrt(1-Math.pow(a-1,2)),K.CircInOut=a=>a<.5?(1-Math.sqrt(1-Math.pow(2*a,2)))/2:(Math.sqrt(1-Math.pow(-2*a+2,2))+1)/2,K.BackIn=a=>2.70158*a*a*a-1.70158*a*a,K.BackOut=a=>1+2.70158*Math.pow(a-1,3)+1.70158*Math.pow(a-1,2),K.BackInOut=a=>{const e=2.5949095;return a<.5?Math.pow(2*a,2)*(7.189819*a-e)/2:(Math.pow(2*a-2,2)*((e+1)*(2*a-2)+e)+2)/2},K.ElasticIn=a=>{const e=2*Math.PI/3;return a===0?0:a===1?1:-Math.pow(2,10*a-10)*Math.sin((10*a-10.75)*e)},K.ElasticOut=a=>{const e=2*Math.PI/3;return a===0?0:a===1?1:Math.pow(2,-10*a)*Math.sin((10*a-.75)*e)+1},K.ElasticInOut=a=>{const e=2*Math.PI/4.5;return a===0?0:a===1?1:a<.5?-Math.pow(2,20*a-10)*Math.sin((20*a-11.125)*e)/2:Math.pow(2,-20*a+10)*Math.sin((20*a-11.125)*e)/2+1},K.BounceOut=a=>a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375,K.BounceIn=a=>1-K.BounceOut(1-a),K.BounceInOut=a=>a<.5?.5*(1-K.BounceOut(1-2*a)):.5*(K.BounceOut(2*a-1)+1);let ac=K;const oc=["viewchange","moveend","flystart","flyend","flystop"],Ua=ac.CubicInOut,Ga=class $o{constructor(e={}){if(this.__id=$o.__counter__++,this.events=le(oc,this),this._isOrthographic=e.isOrthographic??!1,this._focusDistance=e.focusDistance!=null?e.focusDistance:10,this._width=e.width||1,this._height=e.height||1,this.eye=e.eye||new m,this.eyeHigh=new Float32Array(3),this.eyeLow=new Float32Array(3),this._viewAngle=e.viewAngle||47,this._horizontalViewAngle=0,this._viewMatrix=new ne,this._viewMatrixRTE=new ne,this._normalMatrix=new vt,this._r=new m(1,0,0),this._u=new m(0,1,0),this._b=new m(0,0,1),this._f=this._b.negateTo(),this._pr=this._r.clone(),this._pu=this._u.clone(),this._pb=this._b.clone(),this._peye=this.eye.clone(),this.isMoving=!1,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._tanViewAngle_hrad=0,this._tanViewAngle_hradOneByHeight=0,this.frustums=[],this.frustumColors=[],e.frustums)for(let t=0,i=e.frustums.length;t<i;t++){let r=e.frustums[t],s=new Va({fov:this._viewAngle,aspect:this.getAspectRatio(),near:r[0],far:r[1]});s.cameraFrustumIndex=this.frustums.length,this.frustums.push(s),this.frustumColors.push(s._pickingColorU[0],s._pickingColorU[1],s._pickingColorU[2])}else{let t=1,i=500,r=new Va({fov:this._viewAngle,aspect:this.getAspectRatio(),near:t,far:i});r.cameraFrustumIndex=this.frustums.length,this.frustums.push(r),this.frustumColors.push(r._pickingColorU[0],r._pickingColorU[1],r._pickingColorU[2])}this.FARTHEST_FRUSTUM_INDEX=this.frustums.length-1,this.currentFrustumIndex=0,this.frustumColorIndex=0,this.isFirstPass=!1,this._projSizeConst=0,this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}get isOrthographic(){return this._isOrthographic}set isOrthographic(e){this._isOrthographic!==e&&(this._isOrthographic=e,this.refresh())}get focusDistance(){return this._focusDistance}set focusDistance(e){e!==this._focusDistance&&(this._focusDistance=e,this._isOrthographic&&this.refresh())}get id(){return this.__id}flyCartesian(e,t={}){this.stopFlying(),t.look=t.look||m.ZERO,t.up=t.up||m.UP,t.duration=t.duration||800;const i=t.ease||Ua;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this);let r=this.eye.clone(),s=this._u,n=this._b,o=t.up,l=e.clone(),h=m.sub(e,t.look),c=o.cross(h);h.normalize(),c.normalize();let d=h.cross(c);this._flight={fly:u=>{let g=1-i(u),f=r.smerp(l,g),p=s.smerp(d,g),_=m.add(f,n.smerp(h,g).negateTo()),v=new m(f.x-_.x,f.y-_.y,f.z-_.z),x=p.cross(v);v.normalize(),x.normalize();let y=v.cross(x);return{eye:f,n:v,u:x,v:y}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this._flying=!1,this._flight=null,this._frameCallback=null,this.events.dispatch(this.events.flystop,this))}checkFly(){if(this._flying&&this._flight!==null){let e=Math.min((Date.now()-this._flight.startedAt)/this._flight.duration,1);const t=this._flight.fly(e);this.eye=t.eye,this._r=t.u,this._u=t.v,this._b=t.n,this._f.set(-this._b.x,-this._b.y,-this._b.z),this._frameCallback&&this._frameCallback(),this.update(),e>=1&&(this.stopFlying(),this._completeCallback&&(this.events.dispatch(this.events.flyend,this),this._completeCallback(),this._completeCallback=null))}}isFlying(){return this._flying}checkMoveEnd(){let e=this._r,t=this._u,i=this._b,r=this.eye;this._peye.equal(r)&&this._pr.equal(e)&&this._pu.equal(t)&&this._pb.equal(i)?(this.isMoving&&this.events.dispatch(this.events.moveend,this),this.isMoving=!1):this.isMoving=!0,this._pr.copy(e),this._pu.copy(t),this._pb.copy(i),this._peye.copy(r)}bindFrustumsPickingColors(e){for(let t=0;t<this.frustums.length;t++)e.assignPickingColor(this.frustums[t])}_init(e){this._setProj(this._viewAngle,this.getAspectRatio()),this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}getUp(){return this._u.clone()}getDown(){return this._u.negateTo()}getRight(){return this._r.clone()}getLeft(){return this._r.negateTo()}getForward(){return this._f.clone()}getBackward(){return this._b.clone()}update(){let e=this._r,t=this._u,i=this._b,r=this.eye;m.doubleToTwoFloat32Array(r,this.eyeHigh,this.eyeLow),this._viewMatrix.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,-r.dot(e),-r.dot(t),-r.dot(i),1]),this._viewMatrixRTE.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1]);for(let s=0,n=this.frustums.length;s<n;s++)this.frustums[s].setViewMatrix(this._viewMatrix),this.frustums[s].setProjectionViewRTEMatrix(this._viewMatrixRTE);this.events.dispatch(this.events.viewchange,this)}refresh(){this._setProj(this._viewAngle,this.getAspectRatio()),this.update()}get width(){return this._width}get height(){return this._height}setViewportSize(e,t){this._width=e,this._height=t,this.refresh()}getAspectRatio(){return this._width/this._height}_setProj(e,t){this._viewAngle=e;for(let s=0,n=this.frustums.length;s<n;s++){let o=this.frustums[s];o.setProjectionMatrix(e,t,o.near,o.far,this._isOrthographic,this._focusDistance)}var i,r;this._horizontalViewAngle=(i=e,r=t,ir*Math.atan(Math.tan(Xe*i)*r)),this._updateViewportParameters()}_updateViewportParameters(){this._tanViewAngle_hrad=Math.tan(this._viewAngle*Xe),this._tanViewAngle_hradOneByHeight=this._tanViewAngle_hrad*(1/this._height),this._projSizeConst=Math.min(this._width<512?512:this._width,this._height<512?512:this._height)/(this._viewAngle*U)}setViewAngle(e){this._viewAngle=e,this.refresh()}getViewAngle(){return this._viewAngle}get viewAngle(){return this._viewAngle}get verticalViewAngle(){return this._viewAngle}get horizontalViewAngle(){return this._horizontalViewAngle}set(e,t,i){return this.eye.x=e.x,this.eye.y=e.y,this.eye.z=e.z,t=t||this._b,i=i||this._u,this._b.x=e.x-t.x,this._b.y=e.y-t.y,this._b.z=e.z-t.z,this._r.copy(i.cross(this._b)),this._b.normalize(),this._r.normalize(),this._u.copy(this._b.cross(this._r)),this._f.set(-this._b.x,-this._b.y,-this._b.z),this}look(e,t){this._b.set(this.eye.x-e.x,this.eye.y-e.y,this.eye.z-e.z),this._r.copy((t||this._u).cross(this._b)),this._b.normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z),this._r.normalize(),this._u.copy(this._b.cross(this._r))}slide(e,t,i){this.eye.x+=e*this._r.x+t*this._u.x+i*this._b.x,this.eye.y+=e*this._r.y+t*this._u.y+i*this._b.y,this.eye.z+=e*this._r.z+t*this._u.z+i*this._b.z}setRoll(e){let t=Math.cos(e),i=Math.sin(e),r=this._r.clone();this._r.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setPitch(e){let t=Math.cos(e),i=Math.sin(e),r=this._b;this._b.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setYaw(e){let t=Math.cos(e),i=Math.sin(e),r=this._r;this._r.set(t*r.x-i*this._b.x,t*r.y-i*this._b.y,t*r.z-i*this._b.z),this._b.set(i*r.x+t*this._b.x,i*r.y+t*this._b.y,i*r.z+t*this._b.z)}setPitchYawRoll(e,t,i){let r=new O;r.setPitchYawRoll(e,t,i),this.setRotation(r)}getPitch(){return this.getRotation().getPitch()}getYaw(){return this.getRotation().getYaw()}getRoll(){return this.getRotation().getRoll()}getAbsolutePitch(){return this.getRotation().getPitch()}getAbsoluteYaw(){return this.getRotation().getYaw()}getAbsoluteRoll(){return this.getRotation().getRoll()}getRotation(){return O.getLookRotation(this._f,this._u).conjugate()}setRotation(e,t,i,r){e.mulVec3Res(t||new m(0,1,0),this._u),e.mulVec3Res(i||new m(1,0,0),this._r),e.mulVec3Res(r||new m(0,0,1),this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotate(e){e.mulVec3Res(this._u,this._u),e.mulVec3Res(this._r,this._r),e.mulVec3Res(this._b,this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}unproject2v(e){return this.unproject(e.x,e.y)}unproject(e,t,i,r){let s=.5*this._width,n=.5*this._height,o=(e-s)/s,l=-(t-n)/n,h=this.frustums[0];if(this.isOrthographic){if(i){let c=.5*(h.right-h.left)*o,d=.5*(h.top-h.bottom)*l,u=this.getUp().scale(d),g=this.getRight().scale(c),f=u.addA(g),p=this.eye.add(f),_=this.getForward(),v=p.addA(_.scaleTo(i));return r&&r.copy(v),v.sub(this.eye).normalize()}return this.getForward()}{let c=h.inverseProjectionViewMatrix,d=c.mulVec4(new te(o,l,-1,1)).affinity();return c.mulVec4(new te(o,l,0,1)).affinity().subA(d).toVec3().normalize()}}project3v(e){return this.project(e.x,e.y,e.z)}project(e,t,i){let r=this.frustums[0].projectionViewMatrix.mulVec4(new te(e,t,i,1));return new N((1+r.x/r.w)*this._width*.5,(1-r.y/r.w)*this._height*.5)}rotateAround(e,t=!1,i=m.ZERO,r=m.UP){r=t?this._u:r;let s=ne.getRotation(e,r),n=ne.getRotationAroundPoint(e,i,r);this.eye=n.mulVec3(this.eye),this._u=s.mulVec3(this._u).normalize(),this._r=s.mulVec3(this._r).normalize(),this._b=s.mulVec3(this._b).normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotateHorizontal(e,t,i,r){this.rotateAround(e,t,i,r)}rotateVertical(e,t){this.rotateAround(e,!1,t,this._r)}projectedSize(e,t){return Math.atan(t/this.eye.distance(e))*this._projSizeConst}getViewMatrix(){return this._viewMatrix._m}getNormalMatrix(){return this._normalMatrix._m}setCurrentFrustum(e){this.currentFrustumIndex=e,this.frustumColorIndex=10*(e+1)/255,this.isFirstPass=e===this.FARTHEST_FRUSTUM_INDEX}getCurrentFrustum(){return this.currentFrustumIndex}containsSphere(e){for(let t=0;t<this.frustums.length;t++)if(this.frustums[t].containsSphere(e))return!0;return!1}get frustum(){return this.frustums[this.currentFrustumIndex]}getProjectionMatrix(){return this.frustum.projectionMatrix._m}getProjectionViewMatrix(){return this.frustum.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.frustum.projectionViewRTEMatrix._m}getInverseProjectionViewMatrix(){return this.frustum.inverseProjectionViewMatrix._m}getInverseProjectionMatrix(){return this.frustum.inverseProjectionMatrix._m}viewDistance(e,t=1e4){let i=e.add(this.getBackward().scaleTo(t));this.set(i,e),this.update()}copy(e){this.eye.copy(e.eye),this._r.copy(e._r),this._u.copy(e._u),this._b.copy(e._b),this._f.copy(e._f),this._width=e.width,this._height=e.height,this.setViewAngle(e.viewAngle),this.update()}getAltitude(){return this.eye.y}};Ga.__counter__=0;let es=Ga;class ja extends es{constructor(e,t={}){super({...t,frustums:t.frustums||[[1,100.075],[100,1000.075],[1e3,101e4],[1e6,1e9]]}),this.planet=e,this.minAltitude=t.minAltitude||1,this.maxAltitude=t.maxAltitude||2e7,this._lonLat=this.planet.ellipsoid.cartesianToLonLat(this.eye),this._lonLatMerc=this._lonLat.forwardMercator(),this._terrainAltitude=this._lonLat.height,this._terrainPoint=new m,this._insideSegment=null,this.slope=0,this._keyLock=new ci,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._checkTerrainCollision=!0,this.eyeNorm=this.eye.getNormal()}setTerrainCollisionActivity(e){this._checkTerrainCollision=e}update(){this.events.stopPropagation();let e=this.maxAltitude+this.planet.ellipsoid.getEquatorialSize();this.eye.length()>e&&this.eye.copy(this.eye.getNormal().scale(e)),super.update(),this.updateGeodeticPosition(),this.eyeNorm=this.eye.getNormal(),this.slope=this._b.dot(this.eyeNorm),this.events.dispatch(this.events.viewchange,this)}updateGeodeticPosition(){this.planet.ellipsoid.cartesianToLonLatRes(this.eye,this._lonLat),Math.abs(this._lonLat.lat)<=de&&A.forwardMercatorRes(this._lonLat,this._lonLatMerc)}setAltitude(e){let t=this._terrainPoint,i=this.planet.ellipsoid.getSurfaceNormal3v(this.eye);this.eye.x=i.x*e+t.x,this.eye.y=i.y*e+t.y,this.eye.z=i.z*e+t.z,this._terrainAltitude=e}getAltitude(){return this._terrainAltitude}setLonLat(e,t,i){this.stopFlying(),this._lonLat.set(e.lon,e.lat,e.height||this._lonLat.height);let r=this.planet.ellipsoid,s=r.lonLatToCartesian(this._lonLat),n=t?r.lonLatToCartesian(t):m.ZERO;this.set(s,n,i||s.getNormal()),this.update()}getLonLat(){return this._lonLat}getHeight(){return this._lonLat.height}getExtentPosition(e,t){t=t||0;let i=e.getNorth(),r=e.getSouth(),s=e.getEast(),n=e.getWest();n>s&&(s+=360);let o=this.planet.ellipsoid,l=new A(s,i),h=o.lonLatToCartesian(l);l.lat=r;let c=o.lonLatToCartesian(l);l.lon=n;let d=o.lonLatToCartesian(l);l.lat=i;let u=o.lonLatToCartesian(l),g=m.sub(h,d).scale(.5).addA(d),f=g.length();f<1e-6&&(l.lon=.5*(s+n),l.lat=.5*(i+r),g=o.lonLatToCartesian(l)),u.subA(g),c.subA(g),h.subA(g),d.subA(g);let p=g.getNormal(),_=p.cross(m.NORTH).normalize(),v=_.cross(p).normalize(),x=Math.max(Math.abs(v.dot(u)),Math.abs(v.dot(c)),Math.abs(v.dot(h)),Math.abs(v.dot(d))),y=Math.max(Math.abs(_.dot(u)),Math.abs(_.dot(c)),Math.abs(_.dot(h)),Math.abs(_.dot(d))),w=Math.tan(this._viewAngle*U*.5),b=this.getAspectRatio()*w,E=Math.max(y/b,x/w);return g.normalize(),g.scale(f+E+t),g}viewExtent(e,t){this.stopFlying(),this.set(this.getExtentPosition(e,t),m.ZERO,m.NORTH),this.update()}flyExtent(e,t,i={}){i.look=m.ZERO,this.flyCartesian(this.getExtentPosition(e,t),i)}viewDistance(e,t=1e4){let i=this.eye.add(this.getForward().scaleTo(t)),r=O.getRotationBetweenVectors(i.getNormal(),e.getNormal());if(r.isZero()){let s=e.add(this.getBackward().scaleTo(t));this.set(s,e)}else{let s=e.add(r.mulVec3(this.getBackward()).scale(t)),n=r.mulVec3(this.getUp());this.set(s,e,n)}this.update()}flyLonLat(e,t={}){let i=new A(e.lon,e.lat,e.height||this._lonLat.height);this.flyCartesian(this.planet.ellipsoid.lonLatToCartesian(i),t)}flyDistance(e,t=1e4,i={}){let r=this.eye.add(this.getForward().scaleTo(t)),s=O.getRotationBetweenVectors(r.getNormal(),e.getNormal());if(s.isZero()){let n=e.add(this.getBackward().scaleTo(t));this.set(n,e)}else{let n=e.add(s.mulVec3(this.getBackward()).scale(t)),o=s.mulVec3(this.getUp());i.look=e,i.up=o,this.flyCartesian(n,i)}}flyCartesian(e,t={}){this.stopFlying(),t.preventLock||(this.planet.layerLock.lock(this._keyLock),this.planet.terrainLock.lock(this._keyLock),this.planet.normalMapCreator.lock(this._keyLock)),t.amplitude=t.amplitude!=null?t.amplitude:1,t.look=t.look||m.ZERO,t.up=t.up||m.NORTH,t.duration=t.duration||800;const i=t.ease||Ua;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this),t.look instanceof A&&(t.look=this.planet.ellipsoid.lonLatToCartesian(t.look));let r=this.eye.clone(),s=this._u,n=this._b,o=this.planet.ellipsoid.cartesianToLonLat(e),l=t.up,h=this.planet.ellipsoid.lonLatToCartesian(new A(o.lon,o.lat,0)),c=m.sub(e,t.look),d=l.cross(c);c.normalize(),d.normalize();let u=c.cross(d),g=r.getNormal(),f=h.getNormal(),p=1-g.dot(f),_=t.amplitude*ws*Math.sqrt(p>0?p:0),v=6639613,x=Math.max(this._lonLat.height,o.height);x>v&&(v=x);let y=x+2.5*_*(v-x),w=m.ZERO;this._flight={fly:b=>{let E=i(b),C=1-E,T=r.smerp(h,C).normalize(),L=this.planet.getRayIntersectionEllipsoid(new H(w,T)),M=this._lonLat.height*C*C*C+3*y*C*C*E+3*y*C*E*E+o.height*E*E*E,R=L.addA(T.scale(M)),z=s.smerp(u,C),F=m.add(R,n.smerp(c,C).negateTo()),P=new m(R.x-F.x,R.y-F.y,R.z-F.z),D=z.cross(P);P.normalize(),D.normalize();let k=P.cross(D);return{eye:R,n:P,u:D,v:k}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet.normalMapCreator.free(this._keyLock),super.stopFlying())}rotateLeft(e,t){this.rotateHorizontal(e,t!==!0,m.ZERO),this.update()}rotateRight(e,t){this.rotateHorizontal(-e,t!==!0,m.ZERO),this.update()}rotateUp(e){this.rotateVertical(e,m.ZERO),this.update()}rotateDown(e){this.rotateVertical(-e,m.ZERO),this.update()}rotateVertical(e,t,i=0){let r=new ne().setRotation(this._r,e),s=new ne().setIdentity().translate(t),n=new ne().setIdentity().translate(t.negateTo()),o=s.mul(r).mul(n).mulVec3(this.eye),l=r.mulVec3(this._u).normalize(),h=r.mulVec3(this._r).normalize(),c=r.mulVec3(this._b).normalize(),d=o.getNormal(),u=c.dot(d);if(i){let g=u-this.slope;if(u<i&&g<0)return;(u>.1&&l.dot(d)>0||this.slope<=.1||this._u.dot(this.eye.getNormal())<=0)&&(this.eye=o,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z))}else this.eye=o,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z)}checkTerrainCollision(){if(this._terrainAltitude=this._lonLat.height,this._insideSegment&&this._insideSegment.planet)return this._terrainAltitude=this._insideSegment.getTerrainPoint(this.eye,this._insideSegment.getInsideLonLat(this),this._terrainPoint),this._terrainAltitude<this.minAltitude&&this._checkTerrainCollision&&this.setAltitude(this.minAltitude),this._terrainPoint}getSurfaceVisibleDistance(e){let t=this.planet.ellipsoid.equatorialSize;return t*Math.acos(t/(t+this._lonLat.height+e))}getHeading(){let e=this.eye.getNormal(),t=m.proj_b_to_plane(this.slope>=.97?this.getUp():this.getForward(),e).normalize(),i=m.proj_b_to_plane(m.NORTH,e).normalize(),r=Math.sign(e.dot(t.cross(i)))*Math.acos(t.dot(i))*J;return r<0?360+r:r}isVisible(e){let t=this.eye.length();return this.eye.distance(e)<Math.sqrt(t*t-this.planet.ellipsoid.equatorialSizeSqr)}getPitch(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getPitch()}getYaw(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getYaw()}getRoll(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getRoll()}setPitch(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(e,this.getYaw(),this.getRoll(),t),this.setRotation(i)}setYaw(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),e,this.getRoll(),t),this.setRotation(i)}setRoll(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),this.getYaw(),e,t),this.setRotation(i)}setPitchYawRoll(e,t,i){let r=this.planet.getFrameRotation(this.eye),s=new O;s.setPitchYawRoll(e,t,i,r).conjugate(),this.setRotation(s)}}const qa=class Xo{constructor(e,t={}){this.handler=e,this.__id=Xo.__counter__++,this._fbo=null,this._width=t.width||e.canvas.width,this._height=t.height||e.canvas.height,this._depthComponent=t.depthComponent!=null?t.depthComponent:"DEPTH_COMPONENT16",this._useDepth=t.useDepth==null||t.useDepth,this._active=!1,this._size=t.size||1,this._depthRenderbuffer=null,this._filter=t.filter||"NEAREST"}get width(){return this._width}get height(){return this._height}setSize(e,t,i=!1){this._width=e,this._height=t,this._active&&this.handler.gl.viewport(0,0,this._width,this._height),(this._useDepth||i)&&(this.destroy(),this.init())}init(){}destroy(){}isComplete(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE}checkStatus(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)}activate(){let e=this.handler.gl;e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo),e.viewport(0,0,this._width,this._height),this._active=!0;let t=this.handler.framebufferStack.current().data;return t&&(t._active=!1),this.handler.framebufferStack.push(this),this}deactivate(){let e=this.handler,t=e.gl;t.bindFramebuffer(t.FRAMEBUFFER,null),this._active=!1;let i=this.handler.framebufferStack.popPrev();i?(t.bindFramebuffer(t.FRAMEBUFFER,i._fbo),t.viewport(0,0,i._width,i._height)):t.viewport(0,0,e.canvas.width,e.canvas.height)}isEqual(e){return!!e&&this.__id===e.__id}};qa.__counter__=0;let Ya=qa;class _i{constructor(e=256,t=256){this._canvas=document.createElement("canvas"),this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d",{willReadFrequently:!0})}getCanvas(){return this._canvas}getContext(){return this._context}fillEmpty(){let e=this._context.getImageData(0,0,this._canvas.width,this._canvas.height),t=e.data;for(let i=0,r=t.length;i<r;i+=4)t[i]=t[i+1]=t[i+2]=t[i+3]=0;this._context.putImageData(e,0,0)}fill(e){this._context.fillStyle=e,this._context.fill()}getData(){return this._context.getImageData(0,0,this._canvas.width,this._canvas.height).data}fillColor(e){this._context.fillStyle=e,this._context.fillRect(0,0,this._canvas.width,this._canvas.height)}setData(e){let t=this._context.createImageData(this._canvas.width,this._canvas.height);t.data.set(e),this._context.putImageData(t,0,0)}resize(e,t){this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d")}drawImage(e,t,i,r,s){this._context.drawImage(e,t||0,i||0,r||e.width,s||e.height)}getImage(){let e=new Image;return e.width=this.getWidth(),e.height=this.getHeight(),e.src=this._canvas.toDataURL("image/png"),e}getTextWidth(e){let t=this._context.measureText(e);return Math.round(t.width)}drawText(e,t=0,i=14,r="normal 14px Verdana",s="black"){this._context.fillStyle=s,this._context.font=r,this._context.fillText(e,t,i)}getWidth(){return this._canvas.width}getHeight(){return this._canvas.height}load(e,t){let i=new Image,r=this;i.onload=function(){r.resize(i.width,i.height),r._context.drawImage(i,0,0,i.width,i.height),t&&t(i)},i.src=e}openImage(){let e=this.getImage(),t="<!DOCTYPE html>";t+="<html>",t+="<head><title>Print</title></head>",t+="<body>",t+='<img src="'+e.src+'">',t+="</body>",t+="</html>";let i=window.open("","","width="+e.width+"px ,height="+e.height+"px");i&&(i.document.open(),i.document.write(t),i.document.close(),i.focus())}destroy(){this._canvas.width=1,this._canvas.height=1,this._canvas=null,this._context=null}}const Wa={UNSIGNED_BYTE:Uint8Array,FLOAT:Float32Array};class Se extends Ya{constructor(e,t={}){super(e,t),this.readPixelBuffersAsync=i=>{const r=this.handler.gl;if(this._skipFrame)return;this._skipFrame=!0;let s=this.width,n=this.height,o=this.pixelBuffers;this.activate();for(let d=0;d<o.length;d++){let u=o[d];r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.bufferData(r.PIXEL_PACK_BUFFER,u.data.byteLength,r.STREAM_READ),r.readBuffer(u.glAttachment),r.readPixels(0,0,s,n,r.RGBA,u.glType,0),r.bindBuffer(r.PIXEL_PACK_BUFFER,null)}this.deactivate();const l=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);var h,c;r.flush(),(h=r,c=l,new Promise((d,u)=>{(function g(){const f=h.clientWaitSync(c,0,0);f==h.WAIT_FAILED?u():f==h.TIMEOUT_EXPIRED?requestAnimationFrame(g):d()})()})).then(()=>{this._skipFrame=!1,r.deleteSync(l);for(let d=0;d<o.length;d++){let u=o[d];u.data&&(r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,u.data))}r.bindBuffer(r.PIXEL_PACK_BUFFER,null),i&&i(this)})},this._targets=Se.createTargets(t.targets),this._size=this._targets.length,this._renderbufferTarget=t.renderbufferTarget!=null?t.renderbufferTarget:"DEPTH_ATTACHMENT",this.textures=t.textures||new Array(this._size),this.pixelBuffers=[],this._skipFrame=!1}static createTargets(e){let t=0,i=0;return e?e.map(r=>{let s=r.attachment||"COLOR_ATTACHMENT";s==="COLOR_ATTACHMENT"&&(s="COLOR_ATTACHMENT"+t++);let n=r.type||"UNSIGNED_BYTE";return{internalFormat:r.internalFormat||"RGBA",format:r.format||"RGBA",type:n,attachment:s,filter:r.filter||"NEAREST",pixelBufferIndex:r.readAsync?i++:-1,TypeArrayConstructor:Wa[n]}}):[{internalFormat:"RGBA",format:"RGBA",type:"UNSIGNED_BYTE",attachment:"COLOR_ATTACHMENT0",filter:"NEAREST",pixelBufferIndex:-1,TypeArrayConstructor:Wa.UNSIGNED_BYTE}]}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.textures.length;t++)e.deleteTexture(this.textures[t]);this.textures=new Array(this._size);for(let t=0;t<this.pixelBuffers.length;t++)this.pixelBuffers[t].data=null,e.deleteBuffer(this.pixelBuffers[t].buffer);this.pixelBuffers=[],e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this._targets.length;i++){let r=this._targets[i],s=this.textures[i]||this.handler.createEmptyTexture2DExt(this._width,this._height,r.filter,r.internalFormat,r.format,r.type),n=e[r.attachment];s&&(this.bindOutputTexture(s,n),this.textures[i]=s),r.attachment!=="DEPTH_ATTACHMENT"&&t.push(n),r.pixelBufferIndex!==-1&&this._createPixelBuffer(r)}e.drawBuffers&&e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorage(e.RENDERBUFFER,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e[this._renderbufferTarget],e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}getPixelBufferData(e=0){let t=this._targets[e].pixelBufferIndex;return t!==-1?this.pixelBuffers[t].data:null}_createPixelBuffer(e){let t=this.handler.gl,i=e.pixelBufferIndex,r=this.pixelBuffers[i];r||(r=this.pixelBuffers[i]={buffer:null,data:null,glType:-1,glAttachment:-1});let s=this.width*this.height*4;r.data=null,r.data=new e.TypeArrayConstructor(s),r.buffer=t.createBuffer(),t.bindBuffer(t.PIXEL_PACK_BUFFER,r.buffer),t.bufferData(t.PIXEL_PACK_BUFFER,s,t.STREAM_READ),t.bindBuffer(t.PIXEL_PACK_BUFFER,null),r.glType=t[e.type],r.glAttachment=t[e.attachment]}bindOutputTexture(e,t){let i=this.handler.gl;i.bindTexture(i.TEXTURE_2D,e),i.framebufferTexture2D(i.FRAMEBUFFER,t||i.COLOR_ATTACHMENT0,i.TEXTURE_2D,e,0),i.bindTexture(i.TEXTURE_2D,null)}readPixels(e,t,i,r=0,s=1,n=1){let o=this.handler.gl;o.bindFramebuffer(o.FRAMEBUFFER,this._fbo),o.readBuffer&&o.readBuffer(o.COLOR_ATTACHMENT0+r||0),o.readPixels(t*this._width,i*this._height,s,n,o.RGBA,o[this._targets[r].type],e),o.bindFramebuffer(o.FRAMEBUFFER,null)}readAllPixels(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.FRAMEBUFFER,this._fbo),i.readBuffer&&i.readBuffer(i.COLOR_ATTACHMENT0+t),i.readPixels(0,0,this._width,this._height,i.RGBA,i[this._targets[t].type],e),i.bindFramebuffer(i.FRAMEBUFFER,null)}getImage(){let e=new Uint8Array(4*this._width*this._height);this.readAllPixels(e);let t=new _i(this._width,this._height);return t.setData(e),t.getImage()}readData(e,t,i,r=0){const s=this.width,n=this.height,o=Math.floor(e*(s-1)),l=4*(Math.floor(t*(n-1))*s+o),h=this.pixelBuffers[r].data;h&&(i[0]=h[l],i[1]=h[l+1],i[2]=h[l+2],i[3]=h[l+3])}}const lc=["tick","end","start","stop"],$a=class Zo{constructor(e={}){this.__handler=null,this.active=!0,this.__id=Zo.__counter__++,this.events=le(lc,this),this.name=e.name||"",this.startDate=e.startDate||0,this.endDate=e.endDate||0;let t=e.currentDate||ji(new Date);e.startDate&&t<e.startDate&&(t=e.startDate),e.endDate&&t>e.endDate&&(t=e.endDate),this.currentDate=t,this._multiplier=e.multiplier!==void 0?e.multiplier:1,this._running=1,this.deltaTicks=0,this.active=!0,this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}clearInterval(){this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}setInterval(e,t){this._intervalStart=this.currentDate,this._intervalDelay=e*Er,this._intervalCallback=t}setDate(e){let t=ji(e);this.startDate&&t<this.startDate&&(t=this.startDate),this.endDate&&t>this.endDate&&(t=this.endDate),this.currentDate=t}getDate(){return Pr(this.currentDate)}reset(){this.startDate&&(this.currentDate=this.startDate)}tick(e){let t=this._multiplier*this._running;if(this.deltaTicks=e*t,this.active){let i=js(this.currentDate,this.deltaTicks);t>0?this.endDate&&i>this.endDate?(this.currentDate=this.startDate,this.events.dispatch(this.events.end,this)):this.currentDate=i:this.startDate&&i<this.startDate?(this.currentDate=this.endDate,this.events.dispatch(this.events.end,this)):this.currentDate=i,this._intervalCallback&&this.currentDate-this._intervalStart>=this._intervalDelay&&(this._intervalStart=this.currentDate,this._intervalCallback(this)),this.events.dispatch(this.events.tick,this)}}isEqual(e){return this.__id===e.__id}start(){this._running===0&&(this._running=1,this.events.dispatch(this.events.start,this))}get multiplier(){return this._multiplier}set multiplier(e){this._multiplier=e}stop(){this._running===1&&(this._running=0,this.events.dispatch(this.events.stop,this))}};$a.__counter__=0;let hc=$a;class cc{constructor(e,t){t._programController=this,this._program=t,this._handler=e,this._activated=!1}initialize(){this._handler.gl&&this._program.createProgram(this._handler.gl)}getProgram(){return this._program}activate(){if(!this._activated){this._handler.activeProgram.deactivate(),this._handler.activeProgram=this;let e=this._program;this._activated=!0,e.enableAttribArrays(),e.use()}return this}remove(){let e=this._handler.programs;e[this._program.name]&&(this._activated&&this.deactivate(),this._program.delete(),delete e[this._program.name])}deactivate(){this._program.disableAttribArrays(),this._activated=!1}isActive(){return this._activated}set(e){return this.activate(),this._program.set(e),this}drawIndexBuffer(e,t){return this._program.drawIndexBuffer(e,t),this}drawArrays(e,t){return this._program.drawArrays(e,t),this}}let Xa=class{constructor(){this.next=null,this.prev=null,this.data=null}};class ts{constructor(e=256){this._current=new Xa,this._head=this._current;for(let t=0;t<e;t++){let i=new Xa;i.prev=this._current,this._current.next=i,this._current=i}this._current=this._head}current(){return this._current}push(e){this._current=this._current.next,this._current.data=e}pop(){let e=this._current.data;return this._current=this._current.prev,e}popPrev(){return this._current=this._current.prev,this._current.data}}const Za=["","WEBKIT_","MOZ_"],is=["webgl2","webgl"];class bt{constructor(e,t={}){this.framebufferStack=new ts,this._requestAnimationFrameId=0,this.drawFrame=()=>{let i=window.performance.now(),r=this.deltaTime;this.deltaTime=.5*(i-this._lastAnimationFrameTime+this.prevDeltaTime),this.deltaTime>3?this.deltaTime=3:this.deltaTime<1&&(this.deltaTime=1),this.prevDeltaTime=r,this._lastAnimationFrameTime=i,this.defaultClock.tick(this.deltaTime);for(let n=0;n<this._clocks.length;n++)this._clocks[n].tick(this.deltaTime);let s=this.canvas;Math.floor(s.clientWidth*this._params.pixelRatio)===s.width&&Math.floor(s.clientHeight*this._params.pixelRatio)===s.height||(s.clientWidth===0||s.clientHeight===0?this.stop():document.hidden||(this.start(),this.setSize(s.clientWidth,s.clientHeight))),this._frameCallback()},this.events=le(["visibilitychange","resize"]),this._throttledDrawFrame=this.drawFrame,this.defaultClock=new hc,this._clocks=[],this.prevDeltaTime=0,this.deltaTime=0,this.canvas=null,this.gl=null,this.programs={},this.activeProgram=null,this._canvasSize=[0,0],this._params={anisotropy:t.anisotropy||4,width:t.width||256,height:t.height||256,pixelRatio:Vs("og_dpi")||t.pixelRatio||1,extensions:t.extensions||[],context:t.context||{}},this.extensions={},this._canvasTarget=e,this._lastAnimationFrameTime=0,this._initialized=!1,this._frameCallback=function(){},this.transparentTexture=null,this.defaultTexture=null,this.framebufferStack=new ts,this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this),this.createTexture={NEAREST:this.createTexture_n,LINEAR:this.createTexture_l,MIPMAP:this.createTexture_mm,ANISOTROPIC:this.createTexture_a},this.createTextureDefault=this.createTexture_n,this.ONCANVASRESIZE=null,this._createCanvas(),(t.autoActivate||Ge(t.autoActivate))&&this.initialize()}set frameDelay(e){this._throttledDrawFrame=e===0?this.drawFrame:Qt(this.drawFrame,e)}isInitialized(){return this._initialized}_createCanvas(){this._canvasTarget?this._canvasTarget instanceof HTMLElement?this.canvas=this._canvasTarget:this.canvas=document.getElementById(this._canvasTarget)||document.querySelector(this._canvasTarget):(this.canvas=document.createElement("canvas"),this.canvas.width=this._params.width,this.canvas.height=this._params.height)}static getExtension(e,t){if(!e)return;let i,r;for(i in Za)if(r=e.getExtension(Za[i]+t),r)return r}static getContext(e,t){let i=null;try{let r=new URLSearchParams(location.search).get("og_ver");if(r)i=e.getContext(r,t),i&&(i.type=r);else for(let s=0;s<is.length;s++)if(i=e.getContext(is[s],t),i){i.type=is[s];break}}catch{Ke.logErr("exception during the GL context initialization")}return i||Ke.logErr("could not initialise WebGL"),i}setFrameCallback(e){e&&(this._frameCallback=e)}createEmptyTexture2DExt(e=1,t=1,i="NEAREST",r="RGBA",s="RGBA",n="UNSIGNED_BYTE",o="CLAMP_TO_EDGE",l=0){let h=this.gl,c=h.createTexture();return h.bindTexture(h.TEXTURE_2D,c),h.texImage2D(h.TEXTURE_2D,l,h[r.toUpperCase()],e,t,0,h[s.toUpperCase()],h[n.toUpperCase()],null),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h[o.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h[o.toUpperCase()]),h.bindTexture(h.TEXTURE_2D,null),c}createEmptyTexture_n(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createEmptyTexture_l(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createTexture_n_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_n_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}loadCubeMapTexture(e){let t=this.gl,i=t.createTexture();t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,t.LINEAR);let r=[[e.px,t.TEXTURE_CUBE_MAP_POSITIVE_X],[e.nx,t.TEXTURE_CUBE_MAP_NEGATIVE_X],[e.py,t.TEXTURE_CUBE_MAP_POSITIVE_Y],[e.ny,t.TEXTURE_CUBE_MAP_NEGATIVE_Y],[e.pz,t.TEXTURE_CUBE_MAP_POSITIVE_Z],[e.nz,t.TEXTURE_CUBE_MAP_NEGATIVE_Z]],s=new _i;s.fillEmpty();let n=s.getImage();for(let o=0;o<r.length;o++){let l=r[o][1];t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texImage2D(l,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)}for(let o=0;o<r.length;o++){let l=r[o][1],h=new Image;h.crossOrigin="",h.onload=function(c,d,u){return function(){t&&c&&(t.bindTexture(t.TEXTURE_CUBE_MAP,c),t.texImage2D(d,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,u))}}(i,l,h),h.src=r[o][0]}return i}addProgram(e,t=!1){if(this.programs[e.name])console.warn(`Shader program: "${e.name}" already exists.`);else{let i=new cc(this,e);this.programs[e.name]=i,this._initProgramController(i),t||(i._activated=!1)}return e}removeProgram(e){this.programs[e]&&this.programs[e].remove()}addPrograms(e){for(let t=0;t<e.length;t++)this.addProgram(e[t])}_initProgramController(e){this._initialized&&(e.initialize(),this.activeProgram?(e.deactivate(),this.activeProgram._program.enableAttribArrays(),this.activeProgram._program.use()):(this.activeProgram=e,e.activate()))}_initPrograms(){for(let e in this.programs)this._initProgramController(this.programs[e])}initializeExtension(e,t=!1){if(!this.extensions||!this.extensions[e]){let i=bt.getExtension(this.gl,e);i?this.extensions[e]=i:t&&console.warn("og.webgl.Handler: extension '"+e+"' doesn't initialize.")}return this.extensions&&this.extensions[e]}initialize(){if(this._initialized||!this.canvas||(this.gl=bt.getContext(this.canvas,this._params.context),!this.gl))return;this._initialized=!0,this._params.extensions.push("EXT_texture_filter_anisotropic"),this.gl.type==="webgl"?(this._params.extensions.push("OES_standard_derivatives"),this._params.extensions.push("OES_element_index_uint"),this._params.extensions.push("WEBGL_depth_texture"),this._params.extensions.push("ANGLE_instanced_arrays")):(this._params.extensions.push("EXT_color_buffer_float"),this._params.extensions.push("OES_texture_float_linear"));let e=this._params.extensions.length;for(;e--;)this.initializeExtension(this._params.extensions[e],!0);this.gl.type==="webgl"?(this.createTexture_n=this.createTexture_n_webgl1.bind(this),this.createTexture_l=this.createTexture_l_webgl1.bind(this),this.createTexture_mm=this.createTexture_mm_webgl1.bind(this),this.createTexture_a=this.createTexture_a_webgl1.bind(this)):(this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this)),this.createTexture.NEAREST=this.createTexture_n,this.createTexture.LINEAR=this.createTexture_l,this.createTexture.MIPMAP=this.createTexture_mm,this.createTexture.ANISOTROPIC=this.createTexture_a,this.extensions.EXT_texture_filter_anisotropic?this.createTextureDefault=this.createTexture_a:this.createTextureDefault=this.createTexture_mm,this._initPrograms(),this._setDefaults(),this.intersectionObserver=new IntersectionObserver(t=>{this._toggleVisibilityChange(t[t.length-1].isIntersecting)},{threshold:0}),this.intersectionObserver.observe(this.canvas),this.resizeObserver=new ResizeObserver(t=>{this._toggleVisibilityChange(t[0].contentRect.width!==0&&t[0].contentRect.height!==0)}),this.resizeObserver.observe(this.canvas),document.addEventListener("visibilitychange",()=>{this._toggleVisibilityChange(document.visibilityState==="visible")})}_toggleVisibilityChange(e){e?(this.start(),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(),this.events.dispatch(this.events.visibilitychange,!0)):(this.events.dispatch(this.events.visibilitychange,!1),this.stop())}_setDefaults(){let e=this.gl;e&&this.canvas&&(e.depthFunc(e.LESS),e.enable(e.DEPTH_TEST),this.setSize(this.canvas.clientWidth||this._params.width,this.canvas.clientHeight||this._params.height),e.frontFace(e.CCW),e.cullFace(e.BACK),e.enable(e.CULL_FACE),e.disable(e.BLEND),this.createDefaultTexture({color:"rgba(0,0,0,0.0)"},t=>{this.transparentTexture=t}),this.createDefaultTexture({color:"rgba(255, 255, 255, 1.0)"},t=>{this.defaultTexture=t}))}getCanvasSize(){return this._canvasSize}createStreamArrayBuffer(e,t,i,r=4){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,t*e*r,i||s.STREAM_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=e,n.numItems=t,n}setStreamArrayBuffer(e,t,i=0){let r=this.gl;return r.bindBuffer(r.ARRAY_BUFFER,e),r.bufferSubData(r.ARRAY_BUFFER,i,t),r.bindBuffer(r.ARRAY_BUFFER,null),e}createArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i,n}createArrayBufferLength(e,t){let i=this.gl,r=i.createBuffer();return i.bindBuffer(i.ARRAY_BUFFER,r),i.bufferData(i.ARRAY_BUFFER,e,t||i.STATIC_DRAW),i.bindBuffer(i.ARRAY_BUFFER,null),r.itemSize=1,r.numItems=e,r}createElementArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,n),s.bufferData(s.ELEMENT_ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length,n}setSize(e,t){this._params.width=e,this._params.height=t,this.canvas&&(this.canvas.width=e*this._params.pixelRatio,this.canvas.height=t*this._params.pixelRatio,this._canvasSize[0]=this.canvas.width,this._canvasSize[1]=this.canvas.height,this.gl&&this.gl.viewport(0,0,e,t),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(this.canvas),this.events.dispatch(this.events.resize,this))}get pixelRatio(){return this._params.pixelRatio}set pixelRatio(e){this._params.pixelRatio=e,this.setSize(this._params.width,this._params.height)}getWidth(){return this.canvas?this.canvas.width:0}getHeight(){return this.canvas?this.canvas.height:0}getClientAspect(){return this.canvas?this.canvas.clientWidth/this.canvas.clientHeight:0}getCenter(){let e=this.canvas;return e?new N(Math.round(.5*e.width),Math.round(.5*e.height)):new N}clearFrame(){let e=this.gl;e.clearColor(0,0,0,1),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}start(){!this._requestAnimationFrameId&&this._initialized&&this._animationFrameCallback()}stop(){this._requestAnimationFrameId&&(window.cancelAnimationFrame(this._requestAnimationFrameId),this._requestAnimationFrameId=0)}isStopped(){return!this._requestAnimationFrameId}isWebGl2(){return!!this.gl&&this.gl.type==="webgl2"}_animationFrameCallback(){this._requestAnimationFrameId=window.requestAnimationFrame(()=>{this._throttledDrawFrame(),this._requestAnimationFrameId&&this._animationFrameCallback()})}createDefaultTexture(e,t){let i,r;if(e&&e.color)i=new _i(2,2),i.fillColor(e.color),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r);else if(e&&e.url){let s=new Image,n=this;s.onload=function(){r=n.createTextureDefault(s),r.default=!0,t(r)},s.src=e.url}else i=new _i(2,2),i.fillColor("#C5C5C5"),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r)}deleteTexture(e){e&&!e.default&&this.gl.deleteTexture(e)}destroy(){var e,t;(e=this.resizeObserver)==null||e.disconnect(),(t=this.intersectionObserver)==null||t.disconnect(),this.stop();for(let r in this.programs)this.removeProgram(r);let i=this.gl;if(i){i.deleteTexture(this.transparentTexture),this.transparentTexture=null,i.deleteTexture(this.defaultTexture),this.defaultTexture=null,this.framebufferStack=new ts;let r=i.getParameter(i.MAX_VERTEX_ATTRIBS),s=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,s);for(let o=0;o<r;++o)i.disableVertexAttribArray(o),i.vertexAttribPointer(o,4,i.FLOAT,!1,0,0),i.vertexAttrib1f(o,0);i.deleteBuffer(s);let n=i.getParameter(i.MAX_TEXTURE_IMAGE_UNITS);for(let o=0;o<n;++o)i.activeTexture(i.TEXTURE0+o),i.bindTexture(i.TEXTURE_CUBE_MAP,null),i.bindTexture(i.TEXTURE_2D,null);i.activeTexture(i.TEXTURE0),i.useProgram(null),i.bindBuffer(i.ARRAY_BUFFER,null),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,null),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindRenderbuffer(i.RENDERBUFFER,null),i.disable(i.BLEND),i.disable(i.CULL_FACE),i.disable(i.DEPTH_TEST),i.disable(i.DITHER),i.disable(i.SCISSOR_TEST),i.blendColor(0,0,0,0),i.blendEquation(i.FUNC_ADD),i.blendFunc(i.ONE,i.ZERO),i.clearColor(0,0,0,0),i.clearDepth(1),i.clearStencil(-1)}this.canvas&&(this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.canvas.width=1,this.canvas.height=1,this.canvas=null),this.gl=null,this._initialized=!1}addClock(e){e.__handler||(e.__handler=this,this._clocks.push(e))}addClocks(e){for(let t=0;t<e.length;t++)this.addClock(e[t])}removeClock(e){if(e.__handler){let t=this._clocks,i=t.length;for(;i--;)if(t[i].isEqual(e)){e.__handler=null,t.splice(i,1);break}}}}class Qa extends Ya{constructor(e,t={}){super(e,t),this._internalFormat=t.internalFormat?t.internalFormat.toUpperCase():"RGBA8",this._msaa=t.msaa!=null?t.msaa:4,this._glFilter=0,this.renderbuffers=new Array(this._size)}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.renderbuffers.length;t++)e.deleteRenderbuffer(this.renderbuffers[t]);this.renderbuffers=new Array(this._size),e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._glFilter=e[this._filter],this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this.renderbuffers.length;i++){let r=e.createRenderbuffer();e.bindRenderbuffer(e.RENDERBUFFER,r),this._msaa>0?e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._internalFormat],this._width,this._height):e.renderbufferStorage(e.RENDERBUFFER,e[this._internalFormat],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+i,e.RENDERBUFFER,r),t.push(e.COLOR_ATTACHMENT0+i),this.renderbuffers[i]=r,e.bindRenderbuffer(e.RENDERBUFFER,null)}e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}blitTo(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.READ_FRAMEBUFFER,this._fbo),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,e._fbo),i.readBuffer(i.COLOR_ATTACHMENT0+t),i.clearBufferfv(i.COLOR,0,[0,0,0,1]),i.blitFramebuffer(0,0,this._width,this._height,0,0,e._width,e._height,i.COLOR_BUFFER_BIT,this._glFilter),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindFramebuffer(i.READ_FRAMEBUFFER,null),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,null)}}Object.freeze(Object.defineProperty({__proto__:null,Framebuffer:Se,Handler:bt,Multisample:Qa,Program:X,types:ue},Symbol.toStringTag,{value:"Module"}));class rs extends hi{constructor(e,t={}){super(e,t),this._image=t.image||null,this._src=t.src||null,this._onLoad_=null}get instanceName(){return"GeoImage"}abortLoading(){this._image instanceof HTMLImageElement&&(this._image.src="")}setSrc(e){this._planet&&this._planet._geoImageCreator.remove(this),this._src=e,this._sourceReady=!1,this._sourceCreated=!1,this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=e}setImage(e){this._planet&&this._planet._geoImageCreator.remove(this),this._sourceCreated=!1,this._sourceReady=!1,this._image=e,this._image.crossOrigin="Anonymous",this._src=e.src,xr(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))}_createSourceTexture(){!this._sourceCreated&&this._image&&(this._sourceTexture=this._planet.renderer.handler.createTexture_l(this._image),this._sourceCreated=!0)}_onLoad(e){this._applyImage(this._image),this._image instanceof HTMLImageElement&&this._image.removeEventListener("load",this._onLoad_),this._onLoad_=null}_applyImage(e){e&&(this._frameWidth=St(2*e.width,4096),this._frameHeight=St(3*e.height,4096),this._sourceReady=!0,this._planet&&this._planet._geoImageCreator.add(this))}loadMaterial(e){e.isLoading=!0,this._creationProceeding=!0,!this._sourceReady&&this._src?this._image?this._image instanceof HTMLImageElement&&(xr(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))):(this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=this._src):this._planet&&this._planet._geoImageCreator.add(this)}abortMaterialLoading(e){this._image&&this._image instanceof HTMLImageElement&&(this._image.src=""),this._creationProceeding=!1,e.isLoading=!1,e.isReady=!1}}Object.freeze(Object.defineProperty({__proto__:null,AtmosphereConfig:class extends ee{constructor(a={}){super(a),this.$maxOpacity=null,this.$minOpacity=null,this.$rayleight=null,this.$mie=null,this.$height=null,this.$bottomRadius=null,this.$mieScatteringCoefficient=null,this.$mieExtinctionCoefficient=null,this.$rayleighScatteringCoefficientA=null,this.$rayleighScatteringCoefficientB=null,this.$rayleighScatteringCoefficientC=null,this.$ozoneAbsorptionCoefficientA=null,this.$ozoneAbsorptionCoefficientB=null,this.$ozoneAbsorptionCoefficientC=null,this.$sunAngularRadius=null,this.$sunIntensity=null,this.$groundAlbedo=null,this.$ozoneDensityHeight=null,this.$ozoneDensityWide=null,this._toggleBtn=new _e({classList:["og-map-button","og-atmosphere_button"],icon:`<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
349
349
  <svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="#000000" d="M135.688 18.5c-6.798 74.842-23.842 85.39-107.907 59.656 84.85 52.022 73.57 64.954-6.843 96.938 87.743-10.27 103.29 4.89 70.75 87.594 17.805-27.56 32.5-44.498 46.282-54.47-11.813 28.26-18.345 59.274-18.345 91.813 0 84.184 43.71 157.96 109.656 200.376-41.624-43.834-67.686-102.7-67.686-167.875 0-134.923 109.45-244.405 244.375-244.405 30.92 0 60.76 5.762 88 16.25-38.584-26.87-85.517-42.625-136.064-42.625-55.257 0-106.14 18.802-146.562 50.375 4.627-18.783 17.39-38.073 41.03-60.906C190.18 90.942 153.53 95.634 135.69 18.5zm10.03 77.188c5.67.002 11.428 1.247 16.876 3.874 14.506 6.998 22.72 21.81 22 36.938-10.26 10.87-19.507 22.696-27.594 35.344-9.035 2.753-19.075 2.27-28.25-2.156-19.37-9.343-27.5-32.6-18.156-51.97 6.715-13.92 20.638-22.036 35.125-22.03z"/></svg>`}),this._dialog=new at({title:"Atmosphere Parameters",visible:!1,useHide:!0,top:60,left:60,width:720}),this._dialog.events.on("visibility",e=>{this._toggleBtn.setActive(e)}),this._panel=new be({template:`<div class="og-atmosphere og-options-container">
350
350
 
351
351
  <div class="og-option og-atmosphere-maxOpacity"></div>
@@ -642,7 +642,7 @@ vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 r
642
642
  </g>
643
643
  </g>
644
644
  </svg>`});a.appendTo(this.renderer.div),a.events.on("change",e=>{e?this.onactivate():this.ondeactivate()})}},ScaleControl:xa,Selection:class extends ee{constructor(a={}){super(a),this._selectorScene=new uh({name:`selectionScene:${this.__id}`,ignoreTerrain:a.ignoreTerrain,onSelect:a.onSelect,autoSelectionHide:a.autoSelectionHide}),this._toggleBtn=new _e({classList:["og-map-button","og-selection_button"],icon:`<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
645
- <svg width="800px" height="800px" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--gis" preserveAspectRatio="xMidYMid meet"><path d="M2.1 0v1.914H0v6h3V3h5.1V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h1.8v1.2h3V0h-4.8zm1.8 7.2v6h3v-6h-3zM0 10.913v6h3v-6H0zM66.9 16.2v6h3v-6h-3zM0 19.914v6h3v-6H0zM66.9 25.2v6h3v-6h-3zM0 28.914v6h3v-6H0zM66.9 34.2v6h3v-6h-3zM0 37.914v6h3v-6H0zM66.9 43.2v6h3v-6h-3zM0 46.914v6h3v-6H0zM66.9 52.2v6h3v-6h-3zM0 55.914v5.191h3.809v-3H3v-2.19H0zm6.809 2.191v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9.648 1.899a2.076 2.076 0 0 0-2.19 2.324l3.137 33.676c.2 1.635 2.135 2.399 3.397 1.34l6.623-5.371l2.969 5.142c1.707 2.958 4.417 3.684 7.375 1.977c2.957-1.708 3.684-4.417 1.976-7.375l-2.959-5.125l7.848-3.008c1.548-.564 1.855-2.62.539-3.611L71.576 60.416a2.073 2.073 0 0 0-1.119-.412z" fill="#000000"></path></svg>`})}set ignoreTerrain(a){this._selectorScene.ignoreTerrain=a}oninit(){this._toggleBtn.appendTo(this.renderer.div),this._toggleBtn.events.on("change",a=>{a?this.activate():this.deactivate()}),this._selectorScene.bindPlanet(this.planet)}onactivate(){this.renderer.addNode(this._selectorScene)}ondeactivate(){this.renderer.removeNode(this._selectorScene)}},ShowFps:class extends ee{constructor(a){super(a)}oninit(){let a=document.createElement("div");a.className="defaultText ",a.id="ogShowFpsControl",document.body.appendChild(a),this.renderer.events.on("draw",this._draw,this)}_draw(){zs("ogShowFpsControl",(1e3/this.renderer.handler.deltaTime).toFixed(1),this.renderer.handler.canvas.clientWidth-60,0)}},SimpleNavigation:class extends ee{constructor(a={}){super({name:"SimpleNavigation",autoActivate:!0,...a}),this._onMouseLeftButtonDown=e=>{this._active&&this.renderer&&(this.renderer.handler.canvas.classList.add("ogGrabbingPoiner"),this._grabbedPoint=this.renderer.getCartesianFromPixel(e),this._grabbedScreenPoint.set(e.nx,e.ny),this._grabbedPoint&&this._eye0.copy(this.renderer.activeCamera.eye))},this._onMouseLeftButtonUp=e=>{this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner"),e.x===e.prev_x&&(e.y,e.prev_y)},this._onMouseLeftButtonHold=e=>{if(this.renderer&&this._grabbedPoint&&e.moving){let t=this.renderer.activeCamera;if(t.isOrthographic){let i=e.nx-this._grabbedScreenPoint.x,r=e.ny-this._grabbedScreenPoint.y,s=t.frustum,n=-(s.right-s.left)*i,o=(s.top-s.bottom)*r,l=t.getUp().scale(o),h=t.getRight().scale(n);t.eye=this._eye0.add(h.add(l))}else{let i,r,s=Math.abs(t.getForward().dot(m.UP)),n=this._grabbedPoint;s>.7?(i=m.add(n,m.LEFT),r=m.add(n,t.getRight())):(i=m.add(n,t.getRight()),r=m.add(n,m.UP));let o=new m;new H(t.eye,e.direction).hitPlaneRes(we.fromPoints(n,i,r),o)===H.INSIDE&&(t.eye=t.eye.add(n.sub(o)))}t.update()}},this._onRHold=e=>{if(this._lookPos&&e.moving&&this.renderer){const t=this.renderer.activeCamera;this.renderer.controlsBag.scaleRot=1;let i=.5/t.eye.distance(this._lookPos)*U;i>.007?i=.007:i<.003&&(i=.003),t.rotateHorizontal(i*(e.x-e.prev_x),!1,this._lookPos,this._up),t.rotateVertical(i*(e.y-e.prev_y),this._lookPos),t.update()}},this._onRDown=e=>{if(this.renderer)if(this._lookPos=this.renderer.getCartesianFromPixel(e.pos),this._lookPos)this._up=m.UP;else{const t=this.renderer.activeCamera;let i=new we(m.ZERO,m.UP),r=new H(t.eye,e.direction);this._lookPos=new m,r.hitPlaneRes(i,this._lookPos),this._up=m.UP}},this._onMouseWheel=e=>{if(this.renderer){let t=this.renderer.activeCamera,i=this.renderer.getCartesianFromPixel(e);if(!i){i=new m;let n=new we(m.ZERO,m.UP);new H(t.eye,e.direction).hitPlaneRes(n,i)}this._wheelPos.copy(i);let r=i.sub(t.eye).normalize(),s=8*t.eye.distance(i);this.force.addA(r.scale(e.wheelDelta)).normalize().scale(s)}},this.onCameraMoveForward=()=>{this.force.addA(this.renderer.activeCamera.getForward()).normalize()},this.onCameraMoveBackward=()=>{this.force.addA(this.renderer.activeCamera.getBackward()).normalize()},this.onCameraStrifeLeft=()=>{this.force.addA(this.renderer.activeCamera.getLeft()).normalize()},this.onCameraStrifeRight=()=>{this.force.addA(this.renderer.activeCamera.getRight()).normalize()},this.onCameraLookUp=()=>{this.renderer.activeCamera.update()},this.onCameraLookDown=()=>{this.renderer.activeCamera.update()},this.onCameraTurnLeft=()=>{this.renderer.activeCamera.update()},this.onCameraTurnRight=()=>{this.renderer.activeCamera.update()},this.onCameraRollLeft=()=>{this.renderer.activeCamera.update()},this.onCameraRollRight=()=>{this.renderer.activeCamera.update()},this.speed=a.speed||1,this.force=new m,this.vel=new m,this.mass=1,this._lookPos=void 0,this._grabbedPoint=void 0,this._grabbedScreenPoint=new N,this._up=null,this._eye0=new m,this._wheelPos=new m}oninit(){}onactivate(){super.onactivate();let a=this.renderer;a.activeCamera.isOrthographic&&a.getDepthMinDistanceAsync().then(e=>{a.activeCamera.focusDistance=e}),a.events.on("mousewheel",this._onMouseWheel),a.events.on("keypress",W.KEY_W,this.onCameraMoveForward,this),a.events.on("keypress",W.KEY_S,this.onCameraMoveBackward,this),a.events.on("keypress",W.KEY_A,this.onCameraStrifeLeft,this),a.events.on("keypress",W.KEY_D,this.onCameraStrifeRight,this),a.events.on("keypress",W.KEY_UP,this.onCameraLookUp,this),a.events.on("keypress",W.KEY_DOWN,this.onCameraLookDown,this),a.events.on("keypress",W.KEY_LEFT,this.onCameraTurnLeft,this),a.events.on("keypress",W.KEY_RIGHT,this.onCameraTurnRight,this),a.events.on("keypress",W.KEY_Q,this.onCameraRollLeft,this),a.events.on("keypress",W.KEY_E,this.onCameraRollRight,this),a.events.on("rhold",this._onRHold,this),a.events.on("rdown",this._onRDown,this),a.events.on("lhold",this._onMouseLeftButtonHold),a.events.on("ldown",this._onMouseLeftButtonDown),a.events.on("lup",this._onMouseLeftButtonUp),a.events.on("draw",this.onDraw,this,-1e3)}ondeactivate(){super.ondeactivate();let a=this.renderer;a.events.off("mousewheel",this._onMouseWheel),a.events.off("keypress",W.KEY_W,this.onCameraMoveForward),a.events.off("keypress",W.KEY_S,this.onCameraMoveBackward),a.events.off("keypress",W.KEY_A,this.onCameraStrifeLeft),a.events.off("keypress",W.KEY_D,this.onCameraStrifeRight),a.events.off("keypress",W.KEY_UP,this.onCameraLookUp),a.events.off("keypress",W.KEY_DOWN,this.onCameraLookDown),a.events.off("keypress",W.KEY_LEFT,this.onCameraTurnLeft),a.events.off("keypress",W.KEY_RIGHT,this.onCameraTurnRight),a.events.off("keypress",W.KEY_Q,this.onCameraRollLeft),a.events.off("keypress",W.KEY_E,this.onCameraRollRight),a.events.off("rhold",this._onRHold),a.events.off("rdown",this._onRDown),a.events.off("lhold",this._onMouseLeftButtonHold),a.events.off("ldown",this._onMouseLeftButtonDown),a.events.off("lup",this._onMouseLeftButtonUp),a.events.off("draw",this.onDraw)}_handleMouseWheel(){let a=this.renderer.activeCamera,e=a.eye.clone();if(a.eye=a.eye.add(this.vel.scaleTo(this.dt)),a.isOrthographic){let t=e.distance(this._wheelPos),i=a.eye.distance(this._wheelPos)/t;a.focusDistance,a.focusDistance=a.focusDistance*i}a.update()}onDraw(){this._updateVel(),this.renderer&&this.vel.length()>.01&&this._handleMouseWheel()}get dt(){return .001*this.renderer.handler.deltaTime}_updateVel(){let a=this.force.scale(1/this.mass);this.vel.addA(a),this.vel.scale(.77),this.force.set(0,0,0)}},SimpleSkyBackground:ba,Sun:qr,TimelineControl:class extends ee{constructor(a={}){super({name:"timeline",...a});let e=a.current||new Date,t=a.rangeStart||La(e,-12),i=a.rangeEnd||La(e,12);this._timelineView=new xh({rangeStart:t,rangeEnd:i,currentDate:e}),this._toggleBtn=new _e({classList:["og-map-button","og-timeline_button"],icon:`<?xml version="1.0" encoding="utf-8"?>
645
+ <svg width="800px" height="800px" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--gis" preserveAspectRatio="xMidYMid meet"><path d="M2.1 0v1.914H0v6h3V3h5.1V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h6V0h-6zm9 0v3h1.8v1.2h3V0h-4.8zm1.8 7.2v6h3v-6h-3zM0 10.913v6h3v-6H0zM66.9 16.2v6h3v-6h-3zM0 19.914v6h3v-6H0zM66.9 25.2v6h3v-6h-3zM0 28.914v6h3v-6H0zM66.9 34.2v6h3v-6h-3zM0 37.914v6h3v-6H0zM66.9 43.2v6h3v-6h-3zM0 46.914v6h3v-6H0zM66.9 52.2v6h3v-6h-3zM0 55.914v5.191h3.809v-3H3v-2.19H0zm6.809 2.191v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9 0v3h6v-3h-6zm9.648 1.899a2.076 2.076 0 0 0-2.19 2.324l3.137 33.676c.2 1.635 2.135 2.399 3.397 1.34l6.623-5.371l2.969 5.142c1.707 2.958 4.417 3.684 7.375 1.977c2.957-1.708 3.684-4.417 1.976-7.375l-2.959-5.125l7.848-3.008c1.548-.564 1.855-2.62.539-3.611L71.576 60.416a2.073 2.073 0 0 0-1.119-.412z" fill="#000000"></path></svg>`})}set ignoreTerrain(a){this._selectorScene.ignoreTerrain=a}oninit(){this._toggleBtn.appendTo(this.renderer.div),this._toggleBtn.events.on("change",a=>{a?this.activate():this.deactivate()}),this._selectorScene.bindPlanet(this.planet)}onactivate(){this.renderer.addNode(this._selectorScene)}ondeactivate(){this.renderer.removeNode(this._selectorScene)}},ShowFps:class extends ee{constructor(a){super(a)}oninit(){let a=document.createElement("div");a.className="defaultText ",a.id="ogShowFpsControl",document.body.appendChild(a),this.renderer.events.on("draw",this._draw,this)}_draw(){zs("ogShowFpsControl",(1e3/this.renderer.handler.deltaTime).toFixed(1),this.renderer.handler.canvas.clientWidth-60,0)}},SimpleNavigation:class extends ee{constructor(a={}){super({name:"SimpleNavigation",autoActivate:!0,...a}),this._wheelDelta=0,this._nx=0,this._ny=0,this._onMouseLeftButtonDown=e=>{this._active&&this.renderer&&(this.renderer.handler.canvas.classList.add("ogGrabbingPoiner"),this._grabbedPoint=this.renderer.getCartesianFromPixel(e),this._grabbedScreenPoint.set(e.nx,e.ny),this._grabbedPoint&&this._eye0.copy(this.renderer.activeCamera.eye))},this._onMouseLeftButtonUp=e=>{this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner"),e.x===e.prev_x&&(e.y,e.prev_y)},this._onMouseLeftButtonHold=e=>{if(this.renderer&&this._grabbedPoint&&e.moving){let t=this.renderer.activeCamera;if(t.isOrthographic){let i=e.nx-this._grabbedScreenPoint.x,r=e.ny-this._grabbedScreenPoint.y,s=t.frustum,n=-(s.right-s.left)*i,o=(s.top-s.bottom)*r,l=t.getUp().scale(o),h=t.getRight().scale(n);t.eye=this._eye0.add(h.add(l))}else{let i,r,s=Math.abs(t.getForward().dot(m.UP)),n=this._grabbedPoint;s>.7?(i=m.add(n,m.LEFT),r=m.add(n,t.getRight())):(i=m.add(n,t.getRight()),r=m.add(n,m.UP));let o=new m;new H(t.eye,e.direction).hitPlaneRes(we.fromPoints(n,i,r),o)===H.INSIDE&&(t.eye=t.eye.add(n.sub(o)))}t.update()}},this._onRHold=e=>{if(this._lookPos&&e.moving&&this.renderer){const t=this.renderer.activeCamera;this.renderer.controlsBag.scaleRot=1;let i=.5/t.eye.distance(this._lookPos)*U;i>.007?i=.007:i<.003&&(i=.003),t.rotateHorizontal(i*(e.x-e.prev_x),!1,this._lookPos,this._up),t.rotateVertical(i*(e.y-e.prev_y),this._lookPos),t.update()}},this._onRDown=e=>{if(this.renderer)if(this._lookPos=this.renderer.getCartesianFromPixel(e.pos),this._lookPos)this._up=m.UP;else{const t=this.renderer.activeCamera;let i=new we(m.ZERO,m.UP),r=new H(t.eye,e.direction);this._lookPos=new m,r.hitPlaneRes(i,this._lookPos),this._up=m.UP}},this._onMouseWheel=e=>{if(this.renderer){let t=this.renderer.activeCamera,i=this.renderer.getCartesianFromPixel(e);if(!i){i=new m;let r=new we(m.ZERO,m.UP);new H(t.eye,e.direction).hitPlaneRes(r,i)}if(this._wheelPos.copy(i),t.isOrthographic){if(this._wheelDist=this.renderer.getDistanceFromPixel(e.pos)||0,!this._wheelDist)return;this._wheelDelta=e.wheelDelta,this._nx=e.nx,this._ny=e.ny;let r=i.sub(t.eye).normalize(),s=8*t.eye.distance(i);this.force.addA(r.scale(e.wheelDelta)).normalize().scale(s)}else{let r=i.sub(t.eye).normalize(),s=8*t.eye.distance(i);this.force.addA(r.scale(e.wheelDelta)).normalize().scale(s)}}},this.onCameraMoveForward=()=>{this.force.addA(this.renderer.activeCamera.getForward()).normalize()},this.onCameraMoveBackward=()=>{this.force.addA(this.renderer.activeCamera.getBackward()).normalize()},this.onCameraStrifeLeft=()=>{this.force.addA(this.renderer.activeCamera.getLeft()).normalize()},this.onCameraStrifeRight=()=>{this.force.addA(this.renderer.activeCamera.getRight()).normalize()},this.onCameraLookUp=()=>{this.renderer.activeCamera.update()},this.onCameraLookDown=()=>{this.renderer.activeCamera.update()},this.onCameraTurnLeft=()=>{this.renderer.activeCamera.update()},this.onCameraTurnRight=()=>{this.renderer.activeCamera.update()},this.onCameraRollLeft=()=>{this.renderer.activeCamera.update()},this.onCameraRollRight=()=>{this.renderer.activeCamera.update()},this.speed=a.speed||1,this.force=new m,this.vel=new m,this.mass=1,this._lookPos=void 0,this._grabbedPoint=void 0,this._grabbedScreenPoint=new N,this._up=null,this._eye0=new m,this._wheelDist=0,this._wheelPos=new m}oninit(){}onactivate(){super.onactivate();let a=this.renderer;a.activeCamera.isOrthographic&&a.getDepthMinDistanceAsync().then(e=>{a.activeCamera.focusDistance=e}),a.events.on("mousewheel",this._onMouseWheel),a.events.on("keypress",W.KEY_W,this.onCameraMoveForward,this),a.events.on("keypress",W.KEY_S,this.onCameraMoveBackward,this),a.events.on("keypress",W.KEY_A,this.onCameraStrifeLeft,this),a.events.on("keypress",W.KEY_D,this.onCameraStrifeRight,this),a.events.on("keypress",W.KEY_UP,this.onCameraLookUp,this),a.events.on("keypress",W.KEY_DOWN,this.onCameraLookDown,this),a.events.on("keypress",W.KEY_LEFT,this.onCameraTurnLeft,this),a.events.on("keypress",W.KEY_RIGHT,this.onCameraTurnRight,this),a.events.on("keypress",W.KEY_Q,this.onCameraRollLeft,this),a.events.on("keypress",W.KEY_E,this.onCameraRollRight,this),a.events.on("rhold",this._onRHold,this),a.events.on("rdown",this._onRDown,this),a.events.on("lhold",this._onMouseLeftButtonHold),a.events.on("ldown",this._onMouseLeftButtonDown),a.events.on("lup",this._onMouseLeftButtonUp),a.events.on("draw",this.onDraw,this,-1e3)}ondeactivate(){super.ondeactivate();let a=this.renderer;a.events.off("mousewheel",this._onMouseWheel),a.events.off("keypress",W.KEY_W,this.onCameraMoveForward),a.events.off("keypress",W.KEY_S,this.onCameraMoveBackward),a.events.off("keypress",W.KEY_A,this.onCameraStrifeLeft),a.events.off("keypress",W.KEY_D,this.onCameraStrifeRight),a.events.off("keypress",W.KEY_UP,this.onCameraLookUp),a.events.off("keypress",W.KEY_DOWN,this.onCameraLookDown),a.events.off("keypress",W.KEY_LEFT,this.onCameraTurnLeft),a.events.off("keypress",W.KEY_RIGHT,this.onCameraTurnRight),a.events.off("keypress",W.KEY_Q,this.onCameraRollLeft),a.events.off("keypress",W.KEY_E,this.onCameraRollRight),a.events.off("rhold",this._onRHold),a.events.off("rdown",this._onRDown),a.events.off("lhold",this._onMouseLeftButtonHold),a.events.off("ldown",this._onMouseLeftButtonDown),a.events.off("lup",this._onMouseLeftButtonUp),a.events.off("draw",this.onDraw)}_handleMouseWheel(){let a=this.renderer.activeCamera;if(a.isOrthographic){a.eye=this._wheelPos.add(a.getBackward().scale(this._wheelDist)),a.focusDistance-=a.focusDistance*this.vel.scaleTo(this.dt).length()*5e-5*this._wheelDelta;let e=a.frustums[0],t=(e.right-e.left)*(.5-this._nx),i=-(e.top-e.bottom)*(.5-this._ny),r=a.getUp().scale(i),s=a.getRight().scale(t);a.eye.addA(s.add(r))}else a.eye=a.eye.add(this.vel.scaleTo(this.dt));a.update()}onDraw(){this._updateVel(),this.renderer&&this.vel.length()>.01&&this._handleMouseWheel()}get dt(){return .001*this.renderer.handler.deltaTime}_updateVel(){let a=this.force.scale(1/this.mass);this.vel.addA(a),this.vel.scale(.77),this.force.set(0,0,0)}},SimpleSkyBackground:ba,Sun:qr,TimelineControl:class extends ee{constructor(a={}){super({name:"timeline",...a});let e=a.current||new Date,t=a.rangeStart||La(e,-12),i=a.rangeEnd||La(e,12);this._timelineView=new xh({rangeStart:t,rangeEnd:i,currentDate:e}),this._toggleBtn=new _e({classList:["og-map-button","og-timeline_button"],icon:`<?xml version="1.0" encoding="utf-8"?>
646
646
  <!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
647
647
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
648
648
  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">