package Ġcom . in ari . fire fly . physics . contact Ċ Ċ import Ġcom . in ari . fire fly . core . system . System Component SubType Ċ import Ġcom . in ari . fire fly . entity . Entity Ċ import Ġcom . in ari . fire fly . graphics . E Transform Ċ import Ġcom . in ari . util . collection . Bit Set Ċ import Ġcom . in ari . util . geom . Vector 4 i Ċ Ċ class ĠSimple Contact Map Ġ: ĠContact Map () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġentities Ġ= ĠBit Set ( 1 0 0 ) ĊĠĠĠ Ġprivate Ġval Ġpool Ġ= ĠArray Deque < EntityId Iterator >() ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġpool . add ( EntityId Iterator ()) ĊĠĠĠĠĠĠĠ Ġpool . add ( EntityId Iterator ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( entity : ĠEntity ) Ġ= ĊĠĠĠĠĠĠĠ Ġentities . set ( entity . index ) ĊĊĊĠĠĠ Ġoverride Ġfun Ġremove ( entity : ĠEntity ) Ġ= ĊĠĠĠĠĠĠĠ Ġentities . set ( entity . index , Ġfalse ) ĊĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( entity : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnot Ġneeded Ġhere ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( entityId : ĠInt , Ġtransform : ĠE Transform , Ġcollision : ĠE Contact ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnot Ġneeded Ġhere ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( region : ĠVector 4 i , Ġentity : ĠEntity ): ĠInt Iterator Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pool . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool . add ( EntityId Iterator ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġpool . remove First () ĊĠĠĠĠĠĠĠ Ġiterator . reset ( entity . index ) ĊĠĠĠĠĠĠĠ Ġreturn Ġiterator ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ= ĊĠĠĠĠĠĠĠ Ġentities . clear () ĊĊĊĠĠĠ Ġoverride Ġfun Ġcomponent Type () Ġ= ĠComp anion ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠSystem Component SubType < Contact Map , ĠSimple Contact Map >( Contact Map , ĠSimple Contact Map :: class ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Empty () Ġ= ĠSimple Contact Map () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠEntity Id Iterator Ġ: ĠInt Iterator () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġindex : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġexclude : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ>= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext Int (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfind Next () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġentities . next Set Bit ( index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġexclude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġentities . next Set Bit ( index Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpool . add ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġreset ( exclude : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . exclude Ġ= Ġexclude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Next () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }