package Ġgg . r sm od . game . model . timer Ċ Ċ import Ġjava . lang . StringBuilder Ċ import Ġjava . text . Decimal Format Ċ import Ġkotlin . math . round ToInt Ċ Ċ object ĠTime Constants Ġ{ ĊĠĠĠ Ġconst Ġval ĠCY C LES _ PER _ MINUTE Ġ= Ġ 1 0 0 ĊĠĠĠ Ġconst Ġval ĠCY C LES _ PER _ HOUR Ġ= Ġ 6 0 0 0 ĊĠĠĠ Ġconst Ġval ĠCY C LES _ PER _ DAY Ġ= Ġ 1 4 4 0 0 0 ĊĠĠĠ Ġconst Ġval ĠCY C LES _ PER _ WEEK Ġ= Ġ 1 0 0 8 0 0 0 ĊĠĠĠ Ġconst Ġval ĠCY C LES _ PER _ YEAR Ġ= Ġ 5 2 4 1 6 0 0 0 ĊĊĠĠĠ Ġconst Ġval ĠSE COND Ġ= Ġ 1 0 0 0 ĊĠĠĠ Ġconst Ġval ĠMIN UTE Ġ= Ġ 6 0 0 0 0 ĊĠĠĠ Ġconst Ġval ĠHO UR Ġ= Ġ 3 6 0 0 0 0 0 ĊĠĠĠ Ġconst Ġval ĠDAY Ġ= Ġ 8 6 4 0 0 0 0 0 ĊĠĠĠ Ġconst Ġval ĠW EEK Ġ= Ġ 6 0 4 8 0 0 0 0 0 ĊĠĠĠ Ġconst Ġval ĠYEAR Ġ= Ġ 3 1 4 4 9 6 0 0 0 0 0 Ġ// Ġlong ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNegative Ġvalues Ġwill Ġreturn Ġnull Ġas Ġthey Ġdo Ġnot Ġmake ĊĠĠĠĠ Ġ* Ġsense Ġin Ġthe Ġcontext Ġof Ġgame Ġcycles ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ_ Approx imate _ Ġcalculations Ġfor Ġtime Ġto Ġcycles Ġconversions ĊĠĠĠĠ Ġ* ĠĠ ĠNote | Ġwith Ġa Ġcycle Ġof Ġ 6 0 0 ms Ġ= Ġ. 6 s Ġsome Ġtrunc ation Ġwill ĊĠĠĠĠ Ġ* ĠĠ Ġoccur , Ġbut Ġthis Ġis Ġsufficient Ġfor Ġa de qu ate Ġlay man 's Ġab stractions ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġseconds Ġ- Ġnumber Ġof Ġseconds Ġto Ġroughly Ġconvert Ġto Ġcycles ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġnumber Ġof Ġcycles Ġapproximately Ġequal Ġto Ġthe Ġ[ seconds ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġseconds To Cycles ( seconds : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsecs Ġ= Ġ( seconds Ġ* Ġ 0 . 6 ). round ToInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( secs Ġ> Ġ 0 ) Ġsecs Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġminutes To Cycles ( minutes : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmins Ġ= Ġminutes Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( mins Ġ> Ġ 0 ) Ġmins Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhours To Cycles ( hours : ĠInt ): ĠInt ? Ġ= Ġminutes To Cycles ( hours )?. times ( 6 0 ) ĊĊĠĠĠ Ġfun Ġdays To Cycles ( days : ĠInt ): ĠInt ? Ġ= Ġhours To Cycles ( days )?. times ( 2 4 ) ĊĊĠĠĠ Ġfun Ġweek sTo Cycles ( week s : ĠInt ): ĠInt ? Ġ= Ġdays To Cycles ( week s )?. times ( 7 ) ĊĊĠĠĠ Ġfun Ġyears To Cycles ( years : ĠInt ): ĠInt ? Ġ= Ġweek sTo Cycles ( years )?. times ( 5 2 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠC yc les Ġto Ġother Ġtime Ġmeasurements ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcycles To Seconds ( cycles : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġ( cycles Ġ/ Ġ 0 . 6 ). round ToInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( seconds Ġ> Ġ 0 ) Ġseconds Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcycles To Minutes ( cycles : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġ( cycles Ġ/ Ġ 1 0 0 . 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( minutes Ġ> Ġ 0 ) Ġminutes Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcycles To Hours ( cycles : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġ( cycles Ġ/ Ġ 6 0 0 0 . 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( hours Ġ> Ġ 0 ) Ġhours Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcycles To Days ( cycles : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġ( cycles Ġ/ Ġ 1 4 4 0 0 0 . 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( days Ġ> Ġ 0 ) Ġdays Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcycles To Week s ( cycles : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweeks Ġ= Ġ( cycles Ġ/ Ġ 1 0 0 8 0 0 0 . 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( week s Ġ> Ġ 0 ) Ġweeks Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcycles To Years ( cycles : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġyears Ġ= Ġ( cycles Ġ/ Ġ 5 2 4 1 6 0 0 0 . 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( years Ġ> Ġ 0 ) Ġyears Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtime Passed ( last : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSystem . currentTimeMillis () Ġ- Ġlast ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetTime Context ( time : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġtime ĊĠĠĠĠĠĠĠ Ġvar Ġamount : ĠDouble ĊĠĠĠĠĠĠĠ Ġvar Ġformatted : ĠString ĊĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠDecimal Format ("# .# ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ< ĠMIN UTE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġvalue Ġ/ ĠSE COND . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Ġ= Ġdf . format ( amount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ formatted Ġ${ if ( amount Ġ> Ġ 1 ) Ġ" seconds " Ġelse Ġ" second "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ< ĠHO UR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġvalue Ġ/ ĠMIN UTE . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Ġ= Ġdf . format ( amount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ formatted Ġ${ if ( amount Ġ> Ġ 1 ) Ġ" minutes " Ġelse Ġ" minute "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ< ĠDAY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġvalue Ġ/ ĠHO UR . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Ġ= Ġdf . format ( amount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ formatted Ġ${ if ( amount Ġ> Ġ 1 ) Ġ" hours " Ġelse Ġ" hour "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġanything Ġless Ġthan Ġ 8 4 Ġdays Ġ( three Ġ 2 8 - day Ġmonths ) Ġis Ġdisplayed Ġin Ġdays ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ< ĠDAY . to Long () Ġ* Ġ 8 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġvalue Ġ/ ĠDAY . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("${ amount . toInt ()} Ġ${ if ( amount . toInt () Ġ> Ġ 1 ) Ġ" days " Ġelse Ġ" day "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġanything Ġelse Ġless Ġthan Ġor Ġequal Ġto Ġa Ġyear Ġis Ġin Ġmonths ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ< ĠYEAR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġvalue Ġ/ Ġ( DAY . to Long () Ġ* Ġ 2 8 ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("${ amount . toInt ()} Ġ${ if ( amount . toInt () Ġ> Ġ 1 ) Ġ" months " Ġelse Ġ" month "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġvalue Ġ/ ĠYEAR . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Ġ= Ġdf . format ( amount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ formatted Ġ${ if Ġ( amount Ġ> Ġ 1 ) Ġ" years " Ġelse Ġ" year "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Brief Time Context ( time : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomplete Ġ= Ġget Complete Time Context ( time ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( complete . count Ġ{ Ġit Ġ== Ġ' Ġ' Ġ} Ġ> Ġ 2 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġcomplete . split (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ parts [ 0 ]} Ġ${ parts [ 1 ]} Ġ${ parts [ 2 ]}" ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Complete Time Context ( time : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġtime ĊĠĠĠĠĠĠĠ Ġvar Ġamount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif ( value Ġ>= ĠYEAR ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ( value Ġ/ ĠYEAR ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ amount Ġ${ if ( amount Ġ> Ġ 1 ) Ġ" years " Ġelse Ġ" year "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ% = ĠYEAR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( value . toInt () Ġ!= Ġ 0 ) Ġsb . append (" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( value Ġ>= ĠW EEK ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ( value Ġ/ ĠW EEK ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ amount Ġ${ if ( amount Ġ> Ġ 1 ) Ġ" week s " Ġelse Ġ" week "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ% = ĠW EEK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( value . toInt () Ġ!= Ġ 0 ) Ġsb . append (" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( value Ġ>= ĠDAY ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ( value Ġ/ ĠDAY ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ amount Ġ${ if ( amount Ġ> Ġ 1 ) Ġ" days " Ġelse Ġ" day "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ% = ĠDAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( value . toInt () Ġ!= Ġ 0 ) Ġsb . append (" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( value Ġ>= ĠHO UR ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ( value Ġ/ ĠHO UR ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ amount Ġ${ if ( amount Ġ> Ġ 1 ) Ġ" hours " Ġelse Ġ" hour "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ% = ĠHO UR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( value . toInt () Ġ!= Ġ 0 ) Ġsb . append (" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( value Ġ>= ĠMIN UTE ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ( value Ġ/ ĠMIN UTE ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ amount Ġ${ if ( amount Ġ> Ġ 1 ) Ġ" minutes " Ġelse Ġ" minute "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ% = ĠMIN UTE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( value . toInt () Ġ!= Ġ 0 ) Ġsb . append (" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( value Ġ>= ĠSE COND ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ( value Ġ/ ĠSE COND ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ amount Ġ${ if ( amount Ġ> Ġ 1 ) Ġ" seconds " Ġelse Ġ" second "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ% = ĠSE COND ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġdon 't Ġcare Ġabout Ġms ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} Ċ }