# @name Almost Done # @desc Progress bar that respects no one # @author Galadril # @version 1.1 # @config sound bool "Sound" default=false import math class AlmostDone var TASK var pct,eta,held,task,phase,pt,wasted,tick,snd def init() self.snd=store.get("sound",false) self.wasted=store.get("wasted",0) self.TASK=["RETICULATING SPLINES","COMPILING THE YAML","WARMING THE CACHES","COUNTING EVERY PACKET","REVERSING ENTROPY","AWAITING VENDOR REPLY","AWAITING APPROVAL","ROUNDING THE FLOATS","ASKING DNS NICELY","APPLYING MORE GLUE","DRAINING THE QUEUES","REFRESHING THE TOKENS","SHARDING THE MONOLITH","NEGOTIATING WITH CACHE","REBUILDING THE INDEX","CONSULTING THE LOGS"] self.pct=math.rand()%15 self.eta=2 self.held=0 self.tick=0 self.task=math.rand()%size(self.TASK) self.phase=0 self.pt=0 end def _beep(m) if self.snd if settings.get("soundEnabled")!=false sound.rtttl(m) end end end def loop() self.tick+=1 if self.tick>=60 self.tick=0 self.wasted+=1 store.set("wasted",self.wasted) end if self.pct<90 self.pct+=3+math.rand()%7 if self.pct>90 self.pct=90 end return end if self.pct<99 if math.rand()%100<40 self.pct+=1 end return end self.held+=1 if self.held%8==0 self.eta+=1+math.rand()%3 end if self.held>50 if math.rand()%100<18 self.pct=5+math.rand()%15 self.eta=2 self.held=0 self.task=math.rand()%size(self.TASK) self._beep("z:d=16,o=5,b=200:c,8p,c") end end end def duration() return 18000 end def draw() clear() var now=now_ms() var col=0x3FB4E8 if self.pct>=99 col=0xFFD34D end if self.phase==1 var s=self.TASK[self.task] var w=text_width(s) var off=32-(now-self.pt)*26/1000 text(off,5,s,0xF2E3C8) if off+w<0 self.phase=2 self.pt=now end else var s="ESTIMATING" if self.phase==0 s=str(self.pct)+"%" if self.pct>=99 if (now/300)%32==0 s="100%" end end end if self.phase==2 s="ETA "+str(self.eta)+"M" if self.pct<90 s="ESTIMATING" end end text((width()-text_ink_width(s))/2,5,s,col) if now-self.pt>2400 self.pt=now self.phase=(self.phase+1)%3 end end rect_fill(0,7,32,1,0x1A1A1A) var bw=self.pct*32/100 if bw>32 bw=32 end if bw<1 bw=1 end rect_fill(0,7,bw,1,0xD97757) if self.pct>=99 if (now/250)%2==0 pixel(31,7,0xFFFFFF) end end end end return AlmostDone()