package Ġcom . ly ee ed ar . UI Ċ Ċ import Ġcom . badlogic . gdx . utils . Array Ċ import Ġcom . ly ee ed ar . Game . Save Ċ import Ġcom . ly ee ed ar . Global Ċ Ċ class ĠTutorial ( val Ġkey : ĠString ) Ċ { Ċ ĉ val Ġactions Ġ= ĠArray < Any >() Ċ ĉ var Ġindex : ĠInt Ġ= Ġ- 1 Ċ ĉ var Ġcurrent Action : Ġ(( Float ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĊ ĉ fun Ġadd Popup ( text : ĠString , Ġemp hasis : ĠAny ) Ċ ĉ { Ċĉ ĉ actions . add ( Tutorial Popup ( text , Ġemp hasis , Ġ{ Ċĉĉ ĉ advance () Ċĉ ĉ })) Ċ ĉ } Ċ ĉ fun Ġadd Delay ( duration : ĠFloat ) Ċ ĉ { Ċĉ ĉ var Ġcounter Ġ= Ġ 0 f Ċĉ ĉ val Ġaction Ġ= Ġfun Ġ( delta : Float ): ĠBoolean Ġ{ Ċĉĉ ĉ counter Ġ+= Ġdelta Ċĉĉ ĉ if Ġ( counter Ġ>= Ġduration ) Ċĉĉ ĉ { Ċĉĉĉ ĉ return Ġtrue Ċĉĉ ĉ } Ċĉĉ ĉ return Ġfalse Ċĉ ĉ } Ċĉ ĉ actions . add ( action ) Ċ ĉ } Ċ ĉ fun Ġadd Action ( action : Ġ( Float ) Ġ-> ĠBoolean ) Ċ ĉ { Ċĉ ĉ actions . add ( action ) Ċ ĉ } ĊĊ ĉ fun Ġact ( delta : ĠFloat ) Ċ ĉ { Ċĉ ĉ val Ġcomplete Ġ= Ġcurrent Action ?. invoke ( delta ) Ġ?: Ġfalse Ċĉ ĉ if Ġ( complete ) Ċĉ ĉ { Ċĉĉ ĉ current Action Ġ= Ġnull Ċĉĉ ĉ advance () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġshow () Ċ ĉ { Ċĉ ĉ if Ġ( Global . settings . get ( key , Ġfalse )) Ċĉ ĉ { Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ if Ġ( current Ġ!= Ġnull ) Ċĉ ĉ { Ċĉĉ ĉ if Ġ(! queue . any { Ġit . key Ġ== Ġkey Ġ}) Ġqueue . add ( this ) Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ Global . settings . set ( key , Ġtrue ) ĊĊĉ ĉ current Ġ= Ġthis ĊĊĉ ĉ advance () Ċ ĉ } ĊĊ ĉ var Ġwas nt Removed Ġ= Ġfalse Ċ ĉ private Ġfun Ġadvance () Ċ ĉ { Ċĉ ĉ index ++ Ċĉ ĉ if Ġ( index Ġ>= Ġactions . size ) Ċĉ ĉ { Ċĉĉ ĉ current Ġ= Ġnull ĊĊĉĉ ĉ Save . save () ĊĊĉĉ ĉ if Ġ( queue . size Ġ> Ġ 0 ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġfirst Ġ= Ġqueue . remove Index ( 0 ) Ċĉĉĉ ĉ first . show () Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ else Ċĉ ĉ { Ċĉĉ ĉ val Ġaction Ġ= Ġactions [ index ] Ċĉĉ ĉ if Ġ( action Ġis ĠTutorial Popup ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġaction Bounds Ġ= Ġaction . evaluate Bounds () ĊĊĉĉĉ ĉ var Ġremove On Exit Ġ= Ġtrue ĊĊĉĉĉ ĉ val Ġnext Ġ= Ġif Ġ( actions . size Ġ> Ġindex + 1 ) Ġactions [ index + 1 ] Ġelse Ġnull Ċĉĉĉ ĉ if Ġ( next Ġ!= Ġnull Ġ&& Ġnext Ġis ĠTutorial Popup ) Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ val Ġnext Bounds Ġ= Ġnext . evaluate Bounds () Ċĉĉĉĉ ĉ remove On Exit Ġ= Ġnext Bounds Ġ!= Ġaction Bounds Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ action . show (! was nt Removed , Ġremove On Exit ) ĊĊĉĉĉ ĉ was nt Removed Ġ= Ġ! remove On Exit Ċĉĉ ĉ } Ċĉĉ ĉ else Ċĉĉ ĉ { Ċĉĉĉ ĉ current Action Ġ= Ġaction Ġas Ġ(( Float ) Ġ-> ĠBoolean )? Ċĉĉĉ ĉ was nt Removed Ġ= Ġfalse Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ comp anion Ġobject Ċ ĉ { Ċĉ ĉ var Ġcurrent : ĠTutorial ? Ġ= Ġnull Ċĉ ĉ val Ġqueue Ġ= ĠArray < Tutorial >() Ċ ĉ } Ċ }