UNPKG

tempus

Version:
2 lines 4.18 kB
var a=class{_elapsed=0;_currentTime=0;_startTime=void 0;_lastTime=void 0;_isPlaying=!1;_deltaTime=0;play(){this._isPlaying||(this._currentTime=0,this._startTime=void 0,this._isPlaying=!0)}pause(){this._isPlaying&&(this._deltaTime=0,this._isPlaying=!1)}reset(){this._elapsed=0,this._deltaTime=0,this._currentTime=0,this._lastTime=void 0,this._isPlaying=!1}update(e){this._isPlaying&&(this._startTime||(this._startTime=e),this._lastTime===void 0?(this._lastTime=this._startTime,this._currentTime=0,this._deltaTime=0):(this._lastTime=this._currentTime,this._currentTime=e-this._startTime,this._deltaTime=this._currentTime-this._lastTime,this._elapsed+=this._deltaTime))}get time(){return this._elapsed}get isPlaying(){return this._isPlaying}get deltaTime(){return this._deltaTime}};var T=0;function l(){return T++}var d="1.0.0-dev.17";var r=typeof window<"u",h=r&&window.requestAnimationFrame,c=r&&window.cancelAnimationFrame;r&&(window.tempusVersion=d);function f(m){let e=performance.now();return m(),performance.now()-e}var o=class{callbacks=[];fps;time=0;lastTickDate=performance.now();framesCount=0;constructor(e=Number.POSITIVE_INFINITY){this.fps=e}get isRelativeFps(){return typeof this.fps=="string"&&this.fps.endsWith("%")}get maxFramesCount(){return this.isRelativeFps?Math.max(1,Math.round(100/Number(this.fps.replace("%","")))):1}get executionTime(){return this.isRelativeFps?0:1e3/this.fps}dispatch(e,s,t){for(let i=0;i<this.callbacks.length;i++){let n=f(()=>{(this.callbacks[i]?.idle??Number.POSITIVE_INFINITY)>p.usage&&this.callbacks[i]?.callback(e,s,t)});this.callbacks[i].samples?.push(n),this.callbacks[i].samples=this.callbacks[i].samples?.slice(-9)}}raf(e,s,t){if(this.time+=s,this.isRelativeFps)this.framesCount===0&&this.dispatch(e,s,t),this.framesCount++,this.framesCount%=this.maxFramesCount;else if(this.fps===Number.POSITIVE_INFINITY)this.dispatch(e,s,t);else if(this.time>=this.executionTime){this.time=this.time%this.executionTime;let i=e-this.lastTickDate;this.lastTickDate=e,this.dispatch(e,i,t)}}add({callback:e,priority:s,label:t,idle:i}){if(typeof e!="function"){console.warn("Tempus.add: callback is not a function");return}let n=l();return this.callbacks.push({callback:e,priority:s,uid:n,label:t,samples:[],idle:i}),this.callbacks.sort((g,b)=>g.priority-b.priority),()=>this.remove(n)}remove(e){this.callbacks=this.callbacks.filter(({uid:s})=>e!==s)}},u=class{framerates={};clock=new a;fps;usage=0;rafId;frameCount=0;constructor(){r&&this.play()}restart(){this.rafId&&cancelAnimationFrame(this.rafId),this.frameCount=0;for(let e of Object.values(this.framerates))e.framesCount=0,e.time=0,e.lastTickDate=performance.now();this.clock.reset(),this.play()}play(){!r||this.clock.isPlaying||(this.clock.play(),this.rafId=requestAnimationFrame(this.raf))}pause(){!r||!this.rafId||!this.clock.isPlaying||(cancelAnimationFrame(this.rafId),this.rafId=void 0,this.clock.pause())}get isPlaying(){return this.clock.isPlaying}add(e,{priority:s=0,fps:t=Number.POSITIVE_INFINITY,label:i="",idle:n=Number.POSITIVE_INFINITY}={}){if(r){if(typeof t=="number"||typeof t=="string"&&t.endsWith("%"))return this.framerates[t]||(this.framerates[t]=new o(t)),this.framerates[t].add({callback:e,priority:s,label:i,idle:n});console.warn('Tempus.add: fps is not a number or a string ending with "%"')}}raf=e=>{if(!r)return;this.clock.update(e);let s=this.clock.time,t=this.clock.deltaTime;this.fps=1e3/t;let i=f(()=>{for(let n of Object.values(this.framerates))n.raf(s,t,this.frameCount)});t&&(this.usage=i/t),this.frameCount++,this.rafId=requestAnimationFrame(this.raf)};patch(){r&&(window.requestAnimationFrame=(e,{priority:s=0,fps:t=Number.POSITIVE_INFINITY}={})=>{let i=e.toString();return(i.includes(`requestAnimationFrame(${e.name})`)||i.includes(`requestAnimationFrame(this.${e.name})`))&&e!==this.raf?(e.__tempusPatched||(e.__tempusPatched=!0,e.__tempusUnsubscribe=this.add(e,{priority:s,fps:t,label:e.name})),e.__tempusUnsubscribe):h(e)},window.cancelAnimationFrame=e=>{if(typeof e=="function"){e?.();return}return c(e)})}unpatch(){r&&(window.requestAnimationFrame=h,window.cancelAnimationFrame=c)}},p=new u;globalThis.Tempus=p; //# sourceMappingURL=tempus.min.js.map