/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 . ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġjet brains . liv emap . core . mult it ask ing Ċ Ċ import Ġjet brains . liv emap . core . ecs . E cs Clock Ċ Ċ class ĠMicro Task C ooper ative Executor ( ĊĠĠĠ Ġprivate Ġval Ġmy Clock : ĠE cs Clock , ĊĠĠĠ Ġprivate Ġval Ġmy Frame Duration Limit : ĠLong Ċ ) Ġ: ĠMicro Task Executor Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate AndGet Finished ( tasks : ĠMutable Set < Micro Thread Component >): ĠSet < Micro Thread Component > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinished Tasks Ġ= ĠHashSet < Micro Thread Component >() ĊĊĠĠĠĠĠĠĠ Ġvar Ġenough Time Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġwhile Ġ( en ough Time Ġ&& Ġtasks . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Iterator Ġ= Ġtasks . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( task Iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Clock . frame Duration Ms Ġ> Ġmy Frame Duration Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenough Time Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Iterator . next (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresume s Count down Ġ= Ġresume s Before Time Check ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( resume s Count down -- Ġ> Ġ 0 Ġ&& Ġmicro Task . alive ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmicro Task . resume () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! micro Task . alive ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinished Tasks . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Iterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfinished Tasks ĊĠĠĠ Ġ} Ċ }