package Ġabi 4 1 _ 0 _ 0 . expo . modules . av . progress Ċ Ċ type alias ĠTime Machine Tick Ġ= Ġ() Ġ-> ĠUnit Ċ Ċ interface ĠTime Machine Ġ{ ĊĠ Ġfun Ġschedule At ( interval Millis : ĠLong , Ġcallback : ĠTime Machine Tick ) ĊĠ Ġval Ġtime : ĠLong Ċ } Ċ Ċ type alias ĠPlayer Progress Listener Ġ= Ġ() Ġ-> ĠUnit Ċ Ċ class ĠProgress Looper ( private Ġval Ġtime Machine : ĠTime Machine ) Ġ{ ĊĊĠ Ġprivate Ġvar Ġinterval Ġ= Ġ 0 L ĊĠ Ġprivate Ġvar Ġnext Expected Tick Ġ= Ġ- 1 L ĊĠ Ġprivate Ġvar Ġwaiting Ġ= Ġfalse ĊĊĠ Ġprivate Ġvar Ġshould Loop : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġinterval Ġ> Ġ 0 Ġ&& Ġnext Expected Tick Ġ>= Ġ 0 Ġ&& Ġ! waiting ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinterval Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġnext Expected Tick Ġ= Ġ- 1 L ĊĠĠĠĠĠĠĠ Ġwaiting Ġ= Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġlistener : ĠPlayer Progress Listener ? Ġ= Ġnull ĊĊĠ Ġfun Ġset Listener ( listener : ĠPlayer Progress Listener ) Ġ{ ĊĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠ Ġ} ĊĊĠ Ġfun Ġloop ( interval : ĠLong , Ġlistener : ĠPlayer Progress Listener ) Ġ{ ĊĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠ Ġthis . interval Ġ= Ġinterval ĊĠĠĠ Ġschedule Next Tick () ĊĠ Ġ} ĊĊĠ Ġfun Ġstop Loop ing () Ġ{ ĊĠĠĠ Ġthis . should Loop Ġ= Ġfalse ĊĠĠĠ Ġthis . listener Ġ= Ġnull ĊĠ Ġ} ĊĊĠ Ġfun Ġis Loop ing (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġthis . interval Ġ> Ġ 0 ; ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġschedule Next Tick () Ġ{ ĊĠĠĠ Ġif Ġ( next Expected Tick Ġ== Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠ Ġnext Expected Tick Ġ= Ġtime Machine . time ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( should Loop ) Ġ{ ĊĠĠĠĠĠ Ġnext Expected Tick Ġ+= Ġcalculate Next Interval () ĊĠĠĠĠĠ Ġwaiting Ġ= Ġtrue ĊĠĠĠĠĠ Ġtime Machine . schedule At ( next Expected Tick Ġ- Ġtime Machine . time ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwaiting Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlistener ?. invoke () ĊĠĠĠĠĠĠĠ Ġschedule Next Tick () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcalculate Next Interval () Ġ= ĊĠĠĠ Ġif Ġ( next Expected Tick Ġ> Ġtime Machine . time ) Ġ{ ĊĠĠĠĠĠ Ġinterval ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ((( time Machine . time Ġ- Ġnext Expected Tick ) Ġ/ Ġinterval ) Ġ+ Ġ 1 ) Ġ* Ġinterval ĊĠĠĠ Ġ} Ċ Ċ } Ċ