UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 2.19 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{destroyMaybe as t}from"../../../core/maybe.js";import{TextureUpdate as e}from"./interfaces.js";class i{constructor(t){this._getFadeDuration=t,this._fadeStart=0,this._delayedTime=0}clear(){this._current=t(this._current),this._next=t(this._next),this._waiting=t(this._waiting),this._delayed=t(this._delayed)}get current(){if(null==this._current)return null;if(!this._isFadingEnabled){const t=this._delayed||this._waiting||this._next||this._current;t!==this._current&&(this._current=null,this.clear(),this._current=t)}let r=i.test.fadeMoment;if(null!=this._delayed&&(r=r||performance.now(),r>=this._delayedTime&&(this._push(this._delayed,n.Immediate),this._delayed=null)),null!=this._next){r=r||performance.now();const i=this._fadeDuration,n=null!=this._current&&this._next.texture===this._current.texture,s=this._next.type!==e.FADING,a=r-this._fadeStart>=i;(n||s||a)&&(t(this._current),this._current=this._next,this._next=this._waiting,this._waiting=null,this._fadeStart=this._alignFadeStart(r))}return this._current}get next(){return this._next}get fadeFactor(){if(null==this._next)return 1;const t=i.test.fadeMoment||performance.now(),e=Math.max(0,t-this._fadeStart),n=this._fadeDuration;return e>n?0:1-e/n}get isFading(){return null!=this._next||null!=this._delayed}push(e,i=n.Immediate){this._delayed=t(this._delayed),this._push(e,i)}_push(e,r){if(this._isFadingEnabled||this.clear(),null==this._current)return void(this._current=e);const s=i.test.fadeMoment||performance.now();return r!==n.Immediate?(this._delayed=e,void(this._delayedTime=s+r)):null==this._next?(this._next=e,void(this._fadeStart=this._alignFadeStart(s))):void(null!=e&&(t(this._waiting),this._waiting=e))}get _fadeDuration(){const t=this._getFadeDuration();return this._waiting?.5*t:t}_alignFadeStart(t){const e=this._getFadeDuration();return t+e-t%e}get _isFadingEnabled(){return this._getFadeDuration()>0}}var n;i.test={fadeMoment:0},function(t){t[t.Immediate=0]="Immediate",t[t.Delayed=5e3]="Delayed"}(n||(n={}));export{n as ActivationTime,i as TextureFader};