/* Ċ Ġ* ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠFX GL Ġ- ĠJava FX ĠGame ĠLibrary Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 5 - 2 0 1 7 ĠAl mas B Ġ( al mas lvl @ gmail . com ) Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . al mas b . fx gl . app Ċ Ċ import Ġcom . al mas b . easy io . FS Ċ import Ġcom . al mas b . easy io . serialization . Bundle Ċ import Ġcom . al mas b . fx gl . logging . Logger Ċ import Ġcom . al mas b . fx gl . time . Local Timer Ċ import Ġcom . al mas b . fx gl . time . Offline Timer Ċ import Ġcom . google . inject . Abstract Module Ċ import Ġcom . google . inject . Gu ice Ċ import Ġcom . google . inject . Injector Ċ import Ġcom . google . inject . Module Ċ import Ġcom . google . inject . name . Named Ċ import Ġcom . google . inject . name . Names Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . function . Consumer Ċ Ċ /** Ċ Ġ* ĠRepresents Ġthe Ġentire ĠFX GL Ġinfrastructure . Ċ Ġ* ĠCan Ġbe Ġused Ġto Ġpass Ġinternal Ġproperties Ġ( key - value Ġpair ) Ġaround . Ċ Ġ* ĠCan Ġbe Ġused Ġfor Ġcommunication Ġbetween Ġnon - related Ġparts . Ċ Ġ* ĠNot Ġto Ġbe Ġab used . Ċ Ġ* Ċ Ġ* Ġ@ author ĠAl mas ĠB aim ag amb et ov Ġ( Al mas B ) Ġ( al mas lvl @ gmail . com ) Ċ Ġ*/ Ċ class ĠFX GL Ġprivate Ġconstructor () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġinternal App : ĠGame Application ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġinternal Bundle : ĠBundle ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġinternal Logger : ĠLogger ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTemp or arily Ġholds Ġk - v Ġpairs Ġfrom Ġsystem . properties . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinternal Properties Ġ= ĠProperties () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġconfigured Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠFX GL Ġsystem Ġsettings ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Settings () Ġ= Ġinternal App . settings ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġinstance Ġof Ġthe Ġrunning Ġgame Ġapplication ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget App () Ġ= Ġinternal App ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġinstance Ġof Ġthe Ġrunning Ġgame Ġapplication Ġcast Ġto Ġthe Ġactual Ġtype ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġ< T Ġ: ĠGame Application > Ġget App Cast () Ġ= Ġinternal App Ġas ĠT ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠNote : Ġthe Ġsystem Ġbundle Ġis Ġsaved Ġon Ġexit Ġand Ġloaded Ġon Ġinit . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġbundle Ġis Ġmeant Ġto Ġbe Ġused Ġby Ġthe ĠFX GL Ġsystem Ġonly . ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġyou Ġwant Ġto Ġsave Ġglobal Ġ( non - game play ) Ġdata Ġuse Ġuser Ġprofiles Ġinstead . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠFX GL Ġsystem Ġdata Ġbundle ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget System Bundle () Ġ= Ġinternal Bundle ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConstructs ĠFX GL . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġconfigure ( app Module : ĠApplication Module , Ġvar arg Ġmodules : ĠModule ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( configured ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigured Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal App Ġ= Ġapp Module . app ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Required Dirs () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Modules Ġ= Ġarray ListOf (* modules ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Modules . add ( build Properties Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Modules . add ( app Module ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinjector Ġ= ĠGu ice . create Injector ( all Modules ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlog Ġthat Ġwe Ġare Ġready , Ġalso Ġforce Ġlogger Ġservice Ġto Ġinit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Logger Ġ= Ġget Logger (" FX GL ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Logger . debug (" FX GL Ġconfiguration Ġcomplete ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Run ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Default System Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload System Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDest ruct s ĠFX GL . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġprotected Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! configured ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" FX GL Ġhas Ġnot Ġbeen Ġconfigured ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave System Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġfirst Run Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġiff ĠFX GL Ġis Ġrunning Ġfor Ġthe Ġfirst Ġtime ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ impl Note Ġwe Ġactually Ġcheck Ġif Ġ" system /" Ġexists Ġin Ġrunning Ġdir , Ġso Ġif Ġit Ġwas ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġdeleted , Ġthen Ġthis Ġmethod Ġalso Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġis First Run () Ġ= Ġfirst Run ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Required Dirs () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsystem Dir Ġ= ĠPaths . get (" system /") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Files . exists ( system Dir )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Run Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directories ( system Dir ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreadme File Ġ= ĠPaths . get (" system / Read me . txt ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . write ( readme File , Ġ" This Ġdirectory Ġcontains ĠFX GL Ġsystem Ġdata Ġfiles .". lines ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsave System Data () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Logger . debug (" Saving ĠFX GL Ġsystem Ġdata ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFS . write Data Task ( internal Bundle , Ġ" system / fx gl . bundle ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure ( Consumer Ġ{ Ġinternal Logger . warning (" Failed Ġto Ġsave : Ġ$ it ") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġload System Data () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Logger . debug (" Loading ĠFX GL Ġsystem Ġdata ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFS . read Data Task < Bundle >(" system / fx gl . bundle ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success ( Consumer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Bundle Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Bundle . log () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure ( Consumer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Logger . warning (" Failed Ġto Ġload : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Default System Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġload Default System Data () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Logger . debug (" Loading Ġdefault ĠFX GL Ġsystem Ġdata ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpopulate Ġwith Ġdefault Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Bundle Ġ= ĠBundle (" FX GL ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// internal Bundle . put (" version . check ", ĠLocalDate . now ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDependency Ġinjector . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġinjector : ĠInject or ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠObtain Ġan Ġinstance Ġof Ġa Ġservice . ĊĠĠĠĠĠĠĠĠ Ġ* ĠIt Ġmay Ġbe Ġexpensive Ġto Ġuse Ġthis Ġin Ġa Ġloop . ĊĠĠĠĠĠĠĠĠ Ġ* ĠStore Ġa Ġreference Ġto Ġthe Ġinstance Ġinstead . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġservice Type Ġservice Ġtype ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġservice ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġ< T > Ġget Service ( service Type : ĠService Type < T >) Ġ= Ġinjector . getInstance ( service Type . service ()) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠObtain Ġan Ġinstance Ġof Ġa Ġtype . ĊĠĠĠĠĠĠĠĠ Ġ* ĠIt Ġmay Ġbe Ġexpensive Ġto Ġuse Ġthis Ġin Ġa Ġloop . ĊĠĠĠĠĠĠĠĠ Ġ* ĠStore Ġa Ġreference Ġto Ġthe Ġinstance Ġinstead . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtype Ġtype ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġinstance ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġ< T > ĠgetInstance ( type : ĠClass < T >) Ġ= Ġinjector . getInstance ( type ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Properties Module (): ĠModule Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠAbstract Module () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfigure () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( k , Ġv ) Ġin Ġinternal Properties . int Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( Int :: class . java ). annotated With ( k ). to Instance ( v ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( k , Ġv ) Ġin Ġinternal Properties . double Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( Double :: class . java ). annotated With ( k ). to Instance ( v ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( k , Ġv ) Ġin Ġinternal Properties . boolean Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( Boolean :: class . java ). annotated With ( k ). to Instance ( v ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( k , Ġv ) Ġin Ġinternal Properties . string Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( String :: class . java ). annotated With ( k ). to Instance ( v ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Properties . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġconfigure ( mock ing Module : ĠModule ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( configured ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġinjector Ġ= ĠGu ice . create Injector ( mock ing Module ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġinternal App Ġ= Ġinjector . getInstance ( Game Application :: class . java ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġconfigured Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠCON VEN I ENCE ĠACCESS ORS Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ logger Factory Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . LOGGER _ FACTORY ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Logger ( name : ĠString ) Ġ= Ġ_ logger Factory . new Logger ( name ) ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Logger ( caller : ĠClass <* >) Ġ= Ġ_ logger Factory . new Logger ( caller ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ asset Loader Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . AS SET _ LOAD ER ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Asset Loader () Ġ= Ġ_ asset Loader ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ event Bus Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . EVENT _ BUS ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget EventBus () Ġ= Ġ_ event Bus ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ input Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . INPUT ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Input () Ġ= Ġ_ input ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ audio Player Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . AUDIO _ PLAYER ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Audio Player () Ġ= Ġ_ audio Player ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ display Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . DISPLAY ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Display () Ġ= Ġ_ display ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ notification Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . NOTIFICATION _ SERVICE ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Notification Service () Ġ= Ġ_ notification ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ executor Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . EXECUT OR ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Executor () Ġ= Ġ_ executor ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ ach ievement Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . ACH IE VE MENT _ MANAGER ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Ach ievement Manager () Ġ= Ġ_ ach ievement ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ q te Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . Q TE ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Q TE () Ġ= Ġ_ q te ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ net Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . NET ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Net () Ġ= Ġ_ net ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ pool er Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . POOL ER ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Pool er () Ġ= Ġ_ pool er ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ exception Handler Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . EXCEPTION _ HANDLER ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget ExceptionHandler () Ġ= Ġ_ exception Handler ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ ui Factory Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . UI _ FACTORY ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget UI Factory () Ġ= Ġ_ ui Factory ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ quest Manager Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . QUEST _ MANAGER ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Quest Manager () Ġ= Ġ_ quest Manager ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġnew Ġinstance Ġon Ġeach Ġcall ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġnew Local Timer () Ġ= Ġget Service ( ServiceType . LOCAL _ TIMER ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġname Ġunique Ġname Ġfor Ġtimer ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġnew Ġinstance Ġon Ġeach Ġcall ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġnew Offline Timer ( name : ĠString ): ĠLocal Timer Ġ= ĠOff line Timer ( name ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ master Timer Ġby Ġlazy Ġ{ Ġget Service ( ServiceType . MASTER _ TIMER ) Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Master Timer () Ġ= Ġ_ master Timer ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġnew Ġinstance Ġon Ġeach Ġcall ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġnew Profiler () Ġ= Ġget Service ( ServiceType . PRO FIL ER ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġvalue Ġof Ġan Ġint Ġproperty . ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġkey Ġproperty Ġkey ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġint Ġvalue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Int ( key : ĠString ) Ġ= ĠInteger . parseInt ( getProperty ( key )) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġvalue Ġof Ġa Ġdouble Ġproperty . ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġkey Ġproperty Ġkey ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġdouble Ġvalue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Double ( key : ĠString ) Ġ= Ġjava . lang . Double . parseDouble ( getProperty ( key )) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġvalue Ġof Ġa Ġboolean Ġproperty . ĊĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġkey Ġproperty Ġkey ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġboolean Ġvalue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġget Boolean ( key : ĠString ) Ġ= Ġjava . lang . Boolean . parse Boolean ( getProperty ( key )) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġkey Ġproperty Ġkey ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġstring Ġvalue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun ĠgetString ( key : ĠString ) Ġ= ĠgetProperty ( key ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġkey Ġproperty Ġkey ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġproperty Ġvalue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetProperty ( key : ĠString ) Ġ= ĠSystem . getProperty (" FX GL .$ key ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Key Ġ\"$ key \" Ġnot Ġfound !") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġan Ġint , Ġdouble , Ġboolean Ġor ĠString Ġproperty . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġvalue Ġcan Ġthen Ġbe Ġretrieved Ġwith ĠFX GL . get * Ġmethods . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġkey Ġproperty Ġkey ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġproperty Ġvalue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġset Property ( key : ĠString , Ġvalue : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . setProperty (" FX GL .$ key ", Ġvalue . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! configured ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġ" true " Ġ|| Ġvalue Ġ== Ġ" false ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Properties . boolean Map [ Names . named ( key )] Ġ= Ġjava . lang . Boolean . parse Boolean ( value Ġas ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Properties . int Map [ Names . named ( key )] Ġ= ĠInteger . parseInt ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Properties . double Map [ Names . named ( key )] Ġ= Ġjava . lang . Double . parseDouble ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Properties . string Map [ Names . named ( key )] Ġ= Ġvalue . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠProperties Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Map Ġ= Ġhash Map Of < Named , ĠInt >() ĊĠĠĠĠĠĠĠ Ġval Ġdouble Map Ġ= Ġhash Map Of < Named , ĠDouble >() ĊĠĠĠĠĠĠĠ Ġval Ġboolean Map Ġ= Ġhash Map Of < Named , ĠBoolean >() ĊĠĠĠĠĠĠĠ Ġval Ġstring Map Ġ= Ġhash Map Of < Named , ĠString >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint Map . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Map . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboolean Map . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Map . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }