UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 3.22 kB
import{isSome as e,get as t,isNone as s}from"../../../core/maybe.js";import{TextureUpdate as i}from"./interfaces.js";import{PROGRESSIVE_LOADING_MODULO as l}from"./TerrainConst.js";import{getLayerWithExtentRange as a}from"./terrainUtils.js";import{fallsWithinLayer as r}from"./tileUtils.js";class n{get updating(){return!!this._tileRequested}init(e,t,s,i){this.tile=e,this._layerIdx=t,this._layerClass=s,this._suspended=i,this._tileLayerInfo=e.getLayerInfo(t,s),this._tileRequested=null;const l=this._findAncestorWithData();this._setUpsampleTile(l)}startLoading(){return this._requestNext()}dispose(){this._tileRequested&&(this._tileRequested.unrequestLayerData(this._layerIdx,this._layerClass,this),this._tileRequested=null),this.tile=null,this._tileLayerInfo=null}setSuspension(e){e!==this._suspended&&(this._suspended=e,e?this._tileRequested&&(this._tileRequested.unrequestLayerData(this._layerIdx,this._layerClass,this),this._tileRequested=null):this._tileLayerInfo.data||this.update())}update(){const e=this._findAncestorWithData();return this._setUpsampleTile(e),this._requestNext()}dataArrived(e){this._setUpsampleTile(e),this._tileRequested=null,e===this.tile?this.tile.updateRenderData(this._layerClass,i.FADING):this._requestNext()}dataMissing(){this._tileRequested=null,this._tileLayerInfo.data=null,this._requestNext()}_agentDone(){this.tile.agentDone(this._layerIdx,this._layerClass),this.dispose()}_requestNext(){if(this._suspended)return!0;const t=this._findNextDownload();if(this._tileRequested){if(t===this._tileRequested)return!0;this._tileRequested.unrequestLayerData(this._layerIdx,this._layerClass,this),this._tileRequested=null}return e(t)?t.requestLayerData(this._layerIdx,this._layerClass,this)&&(this._tileRequested=t):this._agentDone(),!!this._tileRequested}_findNextDownload(){const i=this._layerIdx,n=this._layerClass,h=this.tile.surface.layerViewByIndex(i,n),d=a(h),{minLevel:_,maxLevel:o}=h.dataLevelRange,u=this._desiredMinLevelDelta,p=this._progressiveLevelModulo+u,y=this._scaleRangeEnabled?r:()=>!0;let f=this.tile;const I=f.level;let q;const v=this._tileLayerInfo.upsampleInfo,L=e(v)?v.tile.level:-1,m=!!e(v)&&L-I>=u,D=t(d,"tilemapCache");for(;f&&y(f,d,!1)&&f.level>=_;){const e=f.level,t=I-e,a=f.layerInfo[n][i];if(a.data&&t>=u){(!m||e>L)&&this._setUpsampleTile(f),a.dataInvalidated&&(q=f);break}if((s(D)||"unavailable"!==D.getAvailability(f.lij[0],f.lij[1],f.lij[2]))&&e<=o&&!a.data&&!a.dataMissing&&((s(q)||f.level===_||e%l==0||I-q.level<u)&&(q=f),t>=p))break;f=f.parent}return e(q)&&I-q.level<u&&this._tileLayerInfo.upsampleInfo&&(q=null),q}_findAncestorWithData(){const e=this.tile.vlevel,t=this._desiredMinLevelDelta;let s;for(let i=this.tile;i;i=i.parent)if(i.hasLayerData(this._layerIdx,this._layerClass)){if(e-i.level>=t)return i;s=i}return s}_setUpsampleTile(e){this._tileLayerInfo.setUpsampleInfo(this.tile,e),this.tile.updateRenderData(this._layerClass,i.FADING)}get test(){return{findNextDownload:()=>this._findNextDownload(),tileLayerInfo:this._tileLayerInfo}}}class h extends n{get _desiredMinLevelDelta(){throw d}get _progressiveLevelModulo(){throw d}dispose(){}}const d=new Error("Abstract method called on TileAgent"),_=new h;export{_ as TILE_AGENT_DONE,n as TileAgent};