package Ġno . sand ram o en . yo lo . no . sand ram o en . yo lo . actors Ċ Ċ import Ġcom . badlogic . gdx . math . Math Utils Ċ import Ġcom . badlogic . gdx . math . Math Utils . ceil Ċ import Ġcom . badlogic . gdx . scenes . scene 2 d . Stage Ċ import Ġcom . badlogic . gdx . scenes . scene 2 d . actions . Actions Ċ import Ġno . sand ram o en . yo lo . utils . Base Actor Ċ import Ġno . sand ram o en . yo lo . utils . Game Utils . Companion . normalize Values Ċ import Ġkotlin . math . floor Ċ Ċ class ĠMe tron ome ( x : ĠFloat , Ġy : ĠFloat , Ġs : ĠStage ) Ġ: ĠBase Actor ( x , Ġy , Ġs ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtag Ġ= Ġ" Me tron ome " ĊĠĠĠ Ġprivate Ġval Ġpend ulum : ĠP end ulum ĊĊĠĠĠ Ġvar Ġstop Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġload Image (" gradient ") ĊĠĠĠĠĠĠĠ Ġset Size ( 8 0 f , Ġ 1 0 f ) ĊĠĠĠĠĠĠĠ Ġset Position ( x Ġ- Ġwidth Ġ/ Ġ 2 , Ġy Ġ- Ġheight Ġ/ Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġpend ulum Ġ= ĠP end ulum ( x , Ġy , Ġs , Ġthis ) ĊĠĠĠĠĠĠĠ Ġpend ulum . max Left Position Ġ= Ġthis . x ĊĠĠĠĠĠĠĠ Ġpend ulum . max Right Position Ġ= Ġthis . x Ġ+ Ġwidth Ġ- Ġpend ulum . width ĊĠĠĠĠĠĠĠ Ġpend ulum . middle Position Ġ= Ġthis . x Ġ+ Ġwidth Ġ/ Ġ 2 Ġ- Ġpend ulum . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġpend ulum . setPosition ( this . x , Ġy Ġ- Ġpend ulum . height Ġ/ Ġ 2 ) Ġ// Ġleft ĊĠĠĠĠĠĠĠ Ġpend ulum . speed Ġ= Ġ. 0 1 f Ġ* Ġwidth ĊĠĠĠĠĠĠĠ Ġpend ulum . original Speed Ġ= Ġpend ulum . speed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġact ( dt : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . act ( dt ) ĊĠĠĠĠĠĠĠ Ġif Ġ( stop ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// Ġdetermine Ġwhich Ġdirection Ġthe Ġpend ulum Ġis Ġmoving ĊĠĠĠĠĠĠĠ Ġif Ġ( floor ( pend ulum . x ) Ġ<= Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpend ulum . moving Right Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( ceil ( pend ulum . x ) Ġ>= Ġpend ulum . max Right Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpend ulum . moving Right Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// Ġmove Ġthe Ġpend ulum ĊĠĠĠĠĠĠĠ Ġif Ġ( pend ulum . moving Right Ġ&& Ġpend ulum . x Ġ<= Ġpend ulum . max Right Position Ġ* Ġ 2 / 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpend ulum . x Ġ+= Ġpend ulum . speed Ġ* Ġ( pend ulum . x Ġ+ Ġpend ulum . max Right Position Ġ* Ġ 2 / 3 ) Ġ* Ġ. 0 4 f ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pend ulum . moving Right Ġ&& Ġpend ulum . x Ġ< Ġpend ulum . max Right Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpend ulum . x Ġ+= Ġpend ulum . speed Ġ* Ġ( pend ulum . max Right Position Ġ- Ġpend ulum . x ) Ġ* Ġ. 1 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! pend ulum . moving Right Ġ&& Ġpend ulum . x Ġ>= Ġpend ulum . max Right Position Ġ* Ġ 2 / 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpend ulum . x Ġ-= Ġpend ulum . speed Ġ* Ġ( pend ulum . x Ġ+ Ġpend ulum . max Right Position Ġ* Ġ 2 / 3 ) Ġ* Ġ. 0 4 f ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! pend ulum . moving Right Ġ&& Ġpend ulum . x Ġ> Ġpend ulum . max Left Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpend ulum . x Ġ-= Ġpend ulum . speed Ġ* Ġ( pend ulum . x Ġ- Ġpend ulum . max Left Position ) Ġ* Ġ. 1 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġnormalized Ġscore Ġthat Ġis Ġindic ative Ġabout Ġhow Ġclose Ġto Ġthe Ġcenter Ġthe Ġpend ulum Ġis , Ġwhere Ġ 1 Ġis Ġthe Ġclosest . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Score (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġscore Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġis P end ulum On Left Side Ġ= Ġpend ulum . x Ġ<= Ġpend ulum . middle Position ĊĠĠĠĠĠĠĠ Ġif Ġ( is P end ulum On Left Side ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ= Ġnormalize Values ( pend ulum . x , Ġpend ulum . max Left Position , Ġpend ulum . middle Position ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ= Ġ 1 Ġ- Ġnormalize Values ( pend ulum . x , Ġpend ulum . middle Position , Ġpend ulum . max Right Position ) ĊĠĠĠĠĠĠĠ Ġif Ġ( score Ġ< Ġ 0 ) Ġscore Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġreturn Ġscore ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrestart () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= ĠMath Utils . random ( 0 f , Ġ. 2 f ) ĊĠĠĠĠĠĠĠ Ġadd Action ( Actions . sequence ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActions . delay ( duration ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActions . run Ġ{ Ġstop Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġif Ġ( Math Utils . random Boolean ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpend ulum . setPosition ( pend ulum . max Left Position Ġ+ Ġ 1 , Ġ( y Ġ+ Ġheight Ġ/ Ġ 2 ) Ġ- Ġpend ulum . height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpend ulum . setPosition ( pend ulum . max Right Position Ġ- Ġ 1 , Ġ( y Ġ+ Ġheight Ġ/ Ġ 2 ) Ġ- Ġpend ulum . height Ġ/ Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadjust Speed ( modifier : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpend ulum . speed Ġ= Ġpend ulum . original Speed Ġ* Ġmodifier Ġ- Ġ. 5 f ĊĠĠĠ Ġ} Ċ } Ċ