// All material copyright Esri, All Rights Reserved, unless otherwise specified. // See https://js.arcgis.com/4.30/esri/copyright.txt for details. //>>built define(["exports","../../../core/maybe","./interfaces"],function(c,d,g){class e{constructor(a){this._getFadeDuration=a;this._delayedTime=this._fadeStart=0}clear(){this._current=d.destroyMaybe(this._current);this._next=d.destroyMaybe(this._next);this._waiting=d.destroyMaybe(this._waiting);this._delayed=d.destroyMaybe(this._delayed)}get current(){if(null==this._current)return null;if(!this._isFadingEnabled){var a=this._delayed||this._waiting||this._next||this._current;a!==this._current&&(this._current= null,this.clear(),this._current=a)}a=e.test.fadeMoment;null!=this._delayed&&(a=a||performance.now(),a>=this._delayedTime&&(this._push(this._delayed,c.ActivationTime.Immediate),this._delayed=null));if(null!=this._next){a=a||performance.now();const b=this._next.type!==g.TextureUpdate.FADING,f=a-this._fadeStart>=this._fadeDuration;if(null!=this._current&&this._next.texture===this._current.texture||b||f)d.destroyMaybe(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(null==this._next)return 1;var a=e.test.fadeMoment||performance.now();a=Math.max(0,a-this._fadeStart);const b=this._fadeDuration;return a>b?0:1-a/b}get isFading(){return null!=this._next||null!=this._delayed}push(a,b=c.ActivationTime.Immediate){this._delayed=d.destroyMaybe(this._delayed);this._push(a,b)}_push(a,b){this._isFadingEnabled||this.clear();if(null==this._current)this._current=a;else{var f= e.test.fadeMoment||performance.now();b!==c.ActivationTime.Immediate?(this._delayed=a,this._delayedTime=f+b):null==this._next?(this._next=a,this._fadeStart=this._alignFadeStart(f)):null!=a&&(d.destroyMaybe(this._waiting),this._waiting=a)}}get _fadeDuration(){return null==this._waiting?this._getFadeDuration():.5*this._getFadeDuration()}_alignFadeStart(a){const b=this._getFadeDuration();return a+b-a%b}get _isFadingEnabled(){return 0