@ file : Suppress (" Member Visibility Can Be Private ") Ċ Ċ package Ġfeature a . app Ċ Ċ import Ġfeature a . runtime . Component Ċ import Ġfeature a . runtime . Module Ċ import Ġfeature a . runtime . Task Ċ import Ġfeature a . utils . Buffer edList Ċ import Ġfeature a . utils . Property Ċ import Ġfeature a . utils . forEach Event Ċ import Ġfeature a . utils . update Tasks With Delay Ċ Ċ class ĠApplication ( override Ġval Ġmodule : ĠModule ) Ġ: ĠComponent Ġ{ ĊĊĠĠĠ Ġval Ġcontrollers Ġ= Ġmutable ListOf < Application Controller >() ĊĠĠĠ Ġval Ġdelegate Property Ġ= ĠProperty < Application Delegate ? >( null ) ĊĠĠĠ Ġvar Ġdelegate : ĠApplication Delegate ? Ġby Ġdelegate Property ĊĠĠĠ Ġvar Ġelapsed Time : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġis Enable : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġval Ġlisteners Ġ= Ġmutable ListOf < Application Listener >() ĊĠĠĠ Ġval Ġtasks To Repeat On Update Application Ġ= Ġmutable ListOf <( elapsed Time : ĠFloat ) Ġ-> ĠUnit >() ĊĠĠĠ Ġval Ġtasks To Run On Update Ġ= ĠBuffer edList < () Ġ-> ĠUnit >() ĊĠĠĠ Ġval Ġtasks With Period To Repeat On Update Ġ= Ġmutable Map Of < () Ġ-> ĠUnit , ĠFloat >() ĊĠĠĠ Ġval Ġtasks With Period To Repeat On Update Initial Ġ= Ġmutable Map Of < () Ġ-> ĠUnit , ĠFloat >() ĊĠĠĠ Ġval Ġtasks With Delay To Run On Update Ġ= Ġmutable Map Of < () Ġ-> ĠUnit , ĠFloat >() ĊĠĠĠ Ġval Ġtasks To Run On Complete Loading Ġ= ĠBuffer edList < Task >() ĊĠĠĠ Ġval Ġtasks To Repeat On Build Application Ġ= Ġmutable ListOf < Task >() ĊĠĠĠ Ġval Ġtasks To Repeat On Start Loading Ġ= Ġmutable ListOf < Task >() ĊĠĠĠ Ġvar Ġframe Count : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate Property . watch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Count Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġupdate Controllers () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontrollers Ġ= ĠArrayList ( controllers ) Ġ// Ġquick fix Ġtodo Ġimprove ĊĠĠĠĠĠĠĠ Ġfor Ġ( controller Ġin Ġcontrollers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Delegate () Ġ{ ĊĠĠĠĠĠĠĠ Ġframe Count ++ ĊĠĠĠĠĠĠĠ Ġdelegate ?. update ( elapsed Time ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( task Ġin Ġtasks To Repeat On Update Application ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask ( elapsed Time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks With Period To Repeat On Update . update Tasks With Delay ( elapsed Time , Ġtasks With Period To Repeat On Update Initial ) ĊĠĠĠĠĠĠĠ Ġtasks To Run On Update . poll Ġ{ Ġold Tasks , Ġnew Tasks Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( old Task Ġin Ġold Tasks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Task () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( new Task Ġin Ġnew Tasks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Task () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtasks With Delay To Run On Update . update Tasks With Delay ( elapsed Time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ?. create () ĊĠĠĠĠĠĠĠ Ġlisteners . forEach Event Ġ{ Ġit . onCreate Application () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ?. start () ĊĠĠĠĠĠĠĠ Ġlisteners . forEach Event Ġ{ Ġit . onStart Application () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ?. resume () ĊĠĠĠĠĠĠĠ Ġlisteners . forEach Event Ġ{ Ġit . on Resume Application () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ?. pause () ĊĠĠĠĠĠĠĠ Ġlisteners . forEach Event Ġ{ Ġit . on Pause Application () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ?. stop () ĊĠĠĠĠĠĠĠ Ġlisteners . forEach Event Ġ{ Ġit . on Stop Application () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ?. destroy () ĊĠĠĠĠĠĠĠ Ġlisteners . forEach Event Ġ{ Ġit . on Destroy Application () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrepeat On Start Loading ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks To Repeat On Start Loading . add ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun On Complete Loading ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks To Run On Complete Loading . add ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrepeat On Build Application ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks To Repeat On Build Application . add ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun On Update ( task : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks To Run On Update . add ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun On Update ( delay : ĠFloat , Ġtask : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks With Delay To Run On Update [ task ] Ġ= Ġdelay ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrepeat On Update ( task : Ġ( elapsed Time : ĠFloat ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks To Repeat On Update Application . add ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrepeat On Update ( period : ĠFloat , Ġtask : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks With Period To Repeat On Update [ task ] Ġ= Ġperiod ĊĠĠĠĠĠĠĠ Ġtasks With Period To Repeat On Update Initial [ task ] Ġ= Ġperiod ĊĠĠĠ Ġ} Ċ Ċ } Ċ