UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.05 kB
import{destroyMaybe as t,isNone as e,isSome as i}from"../../../core/maybe.js";import{TextureUpdate as r}from"./interfaces.js";class n{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(e(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 a=n.test.fadeMoment;if(i(this._delayed)&&(a=a||performance.now(),a>=this._delayedTime&&(this._push(this._delayed,s.Immediate),this._delayed=null)),i(this._next)){a=a||performance.now();const e=this._fadeDuration,n=i(this._current)&&this._next.texture===this._current.texture,s=this._next.type!==r.FADING,h=a-this._fadeStart>=e;(n||s||h)&&(t(this._current),this._current=this._next,this._next=this._waiting,this._waiting=null,this._fadeStart=this._alignFadeStart(a))}return this._current}get next(){return this._next}get fadeFactor(){if(e(this._next))return 1;const t=n.test.fadeMoment||performance.now(),i=Math.max(0,t-this._fadeStart),r=this._fadeDuration;return i>r?0:1-i/r}get isFading(){return i(this._next)||i(this._delayed)}push(e,i=s.Immediate){this._delayed=t(this._delayed),this._push(e,i)}_push(i,r){if(this._isFadingEnabled||this.clear(),e(this._current))return void(this._current=i);const a=n.test.fadeMoment||performance.now();return r!==s.Immediate?(this._delayed=i,void(this._delayedTime=a+r)):e(this._next)?(this._next=i,void(this._fadeStart=this._alignFadeStart(a))):void(e(i)||(t(this._waiting),this._waiting=i))}get _fadeDuration(){return e(this._waiting)?this._getFadeDuration():.5*this._getFadeDuration()}_alignFadeStart(t){const e=this._getFadeDuration();return t+e-t%e}get _isFadingEnabled(){return this._getFadeDuration()>0}}var s;n.test={fadeMoment:0},function(t){t[t.Immediate=0]="Immediate",t[t.Delayed=5e3]="Delayed"}(s||(s={}));export{s as ActivationTime,n as TextureFader};