package Ġcom . qu ill r aven . mas am une . phys ic Ċ Ċ import Ġcom . badlogic . ash ley . core . Entity Ċ import Ġcom . badlogic . gdx . physics . box 2 d .* Ċ import Ġcom . qu ill r aven . mas am une . Main Game Ċ import Ġcom . qu ill r aven . mas am une . ecs . EntityType Ċ import Ġcom . qu ill r aven . mas am une . model . ObjectType Ċ Ċ class ĠQ 2 D Contact Listener Ġconstructor ( game : ĠMain Game ) Ġ: ĠContact Listener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġid Cmp Mapper Ġ= Ġgame . cmp Mapper . identify ĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠEntity ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcharacter : ĠEntity ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġitem : ĠEntity ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġgame Event Manager Ġ= Ġgame . game Event Manager ĊĊĠĠĠ Ġprivate Ġfun Ġset Collision Entities ( fix A : ĠFix ture , Ġfix B : ĠFix ture ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcharacter Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġitem Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġplayer Sensor Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġdata A Ġ= Ġfix A . body . userData ĊĠĠĠĠĠĠĠ Ġif Ġ( data A Ġis ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Cmp Ġ= Ġid Cmp Mapper . get ( data A ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Cmp . entity Type Ġ== ĠEntityType . CHARACTER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Cmp . type Ġ== ĠObjectType . HER O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġdata A ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Sensor Ġ= Ġfix A . is Sensor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Ġ= Ġdata A ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( id Cmp . entity Type Ġ== ĠEntityType . ITEM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġdata A ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdata B Ġ= Ġfix B . body . userData ĊĠĠĠĠĠĠĠ Ġif Ġ( data B Ġis ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Cmp Ġ= Ġid Cmp Mapper . get ( data B ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Cmp . entity Type Ġ== ĠEntityType . CHARACTER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Cmp . type Ġ== ĠObjectType . HER O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġdata B ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Sensor Ġ= Ġfix B . is Sensor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Ġ= Ġdata B ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( id Cmp . entity Type Ġ== ĠEntityType . ITEM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġdata B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( character Ġ!= Ġnull Ġ|| Ġitem Ġ!= Ġnull ) Ġ&& Ġplayer Ġ!= Ġnull Ġ&& Ġ! player Sensor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchar / item Ġ< -> Ġplayer Ġcontact Ġshould Ġonly Ġhappen Ġwith Ġplayer Ġdetection Ġradius Ġand Ġnot Ġwith Ġits Ġreal Ġcollision Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Contact ( contact : ĠContact ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Collision Entities ( contact . fixture A , Ġcontact . fixture B ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtmp Player Ġ= Ġplayer Ġ?: Ġreturn Ġ// Ġno Ġcollision Ġwith Ġplayer ĊĠĠĠĠĠĠĠ Ġval Ġtmp Char Ġ= Ġcharacter ĊĠĠĠĠĠĠĠ Ġval Ġtmp Item Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġif Ġ( tmp Char Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġplayer Ġ< -> Ġcharacter Ġcollision ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Event Manager . dispatch Contact Begin Character ( tmp Player , Ġtmp Char ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( tmp Item Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Event Manager . dispatch Contact Begin Item ( tmp Player , Ġtmp Item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Contact ( contact : ĠContact ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Collision Entities ( contact . fixture A , Ġcontact . fixture B ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtmp Player Ġ= Ġplayer Ġ?: Ġreturn Ġ// Ġno Ġcollision Ġwith Ġplayer ĊĠĠĠĠĠĠĠ Ġval Ġtmp Char Ġ= Ġcharacter ĊĠĠĠĠĠĠĠ Ġval Ġtmp Item Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġif Ġ( tmp Char Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġplayer Ġ< -> Ġcharacter Ġcollision ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Event Manager . dispatch Contact End Character ( tmp Player , Ġtmp Char ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( tmp Item Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Event Manager . dispatch Contact End Item ( tmp Player , Ġtmp Item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpre Solve ( contact : ĠContact , Ġold Man ifold : ĠMan ifold ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Solve ( contact : ĠContact , Ġimp ulse : ĠContact Imp ulse ) Ġ{ ĊĊĠĠĠ Ġ} Ċ }