package Ġt are h art . rl bot . ui Ċ Ċ import Ġt are h art . rl bot . Agent Input Ċ import Ġt are h art . rl bot . bots . Team Ċ import Ġt are h art . rl bot . input . Car Data Ċ import Ġt are h art . rl bot . intercept . Intercept Ċ import Ġt are h art . rl bot . math . Polygon Ċ import Ġt are h art . rl bot . math . vector . Vector 3 Ċ import Ġt are h art . rl bot . planning .* Ċ import Ġt are h art . rl bot . routing . Boost Ad visor Ċ import Ġt are h art . rl bot . routing . Position Facing Ċ import Ġt are h art . rl bot . t act ics . T act ical Sit uation Ċ import Ġt are h art . rl bot . t act ics . T act ics Telemetry Ċ import Ġjava . awt .* Ċ import Ġjava . awt . geom .* Ċ import Ġjava . util .* Ċ import Ġjavax . swing . JPanel ĊĊ Ċ class ĠA rena Display Ġ: ĠJPanel () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġreal Ball Color Ġ= ĠNE UT R AL _ B ALL _ COLOR ĊĊĠĠĠ Ġprivate Ġvar Ġinput : ĠAgent Input ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmy Car : ĠCar Data ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġball : ĠVector 3 ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġball Prediction Ġ= ĠVector 3 () ĊĠĠĠ Ġprivate Ġvar Ġexpected Enemy Contact : ĠVector 3 ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġupdate Input ( input : ĠAgent Input ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . input Ġ= Ġinput ĊĠĠĠĠĠĠĠ Ġmy Car Ġ= Ġinput . my Car Data ĊĠĠĠĠĠĠĠ Ġball Ġ= Ġinput . ball Position ĊĠĠĠĠĠĠĠ Ġreal Ball Color Ġ= Ġinput . latest Ball Touch ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . team Ġ=== ĠTeam . BLUE ) ĠBL UE _ B ALL _ COLOR Ġelse ĠOR ANGE _ B ALL _ COLOR ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠNE UT R AL _ B ALL _ COLOR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Ball Prediction ( ball Prediction : ĠVector 3 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . ball Prediction Ġ= Ġball Prediction ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Expected Enemy Contact ( expected Enemy Contact : ĠInter cept ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . expected Enemy Contact Ġ= Ġexpected Enemy Contact ?. space ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpaint Component ( g : ĠGraphics ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . paint Component ( g ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlatest Input Ġ= Ġinput Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġlatest Ball Ġ= Ġball Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġsituation Ġtelemetry ĊĠĠĠĠĠĠĠ Ġval Ġsituation Ġ= Ġmy Car ?. let Ġ{ ĠT act ics Telemetry [ it . player Index ] Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġteam Plan Ġ= Ġmy Car ?. let Ġ{ ĠTeam Telemetry [ it . player Index ] Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Create Ġa ĠGraphics 2 D Ġobject Ġfrom Ġg ĊĠĠĠĠĠĠĠ Ġval Ġgraphics 2 D Ġ= Ġg Ġas ĠGraphics 2 D ĊĊĠĠĠĠĠĠĠ Ġ// Ant ialias ing ĠON ĊĠĠĠĠĠĠĠ Ġgraphics 2 D . set Rendering Hint ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRendering Hints . KEY _ ANTI ALIAS ING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRendering Hints . VALUE _ ANTI ALIAS _ ON ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFlip Ġthe Ġy Ġaxis Ġand Ġmirror Ġthe Ġx Ġaxis ĊĠĠĠĠĠĠĠ Ġgraphics 2 D . translate ( this . width Ġ/ Ġ 2 , Ġthis . height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġthis . width Ġ/ ĠN ATUR AL _ WIDTH ĊĠĠĠĠĠĠĠ Ġgraphics 2 D . scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠ Ġgraphics 2 D . scale ( 1 . 0 , Ġ- 1 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġzone Ġdefinitions ĊĠĠĠĠĠĠĠ Ġgraphics 2 D . stroke Ġ= ĠBasic Stroke ( 1 f ) ĊĠĠĠĠĠĠĠ Ġgraphics 2 D . color Ġ= ĠColor ( 2 0 1 , Ġ 2 2 4 , Ġ 1 9 6 ) ĊĠĠĠĠĠĠĠ ĠArrays . stream ( areas ). forEach ({ Ġgraphics 2 D . draw ( it ) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġfield Ġoutline ĊĠĠĠĠĠĠĠ Ġgraphics 2 D . color Ġ= ĠColor ( 5 9 , Ġ 1 3 3 , Ġ 8 1 ) ĊĠĠĠĠĠĠĠ Ġgraphics 2 D . draw ( Zone Definitions . FULL FIELD . awt Area ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sit uation Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Shot Def ense Zones ( sit uation , Ġgraphics 2 D ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Def ensive Reach Zones ( sit uation , Ġgraphics 2 D ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of Nullable ( sit uation . current Plan ). if Present Ġ{ Ġcurrent Plan Ġ-> Ġdraw Plan ( current Plan , Ġgraphics 2 D ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( team Plan Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Team Plan Info ( team Plan , Ġgraphics 2 D ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġste ering Ġway point ĊĠĠĠĠĠĠĠ Ġ// Ġdraw Waypoint ( graphics 2 D ); ĊĊĠĠĠĠĠĠĠ Ġ// ĠReset Ġthe Ġstroke Ġwidth ĊĠĠĠĠĠĠĠ Ġgraphics 2 D . stroke Ġ= ĠBasic Stroke ( 0 f ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġcars Ġ( and Ġtheir Ġboost Ġvalues ) ĊĊĠĠĠĠĠĠĠ Ġval Ġenemy Initi ative Ġ= Ġsituation ?. enemy Player With Initi ative ?. car ĊĠĠĠĠĠĠĠ Ġval Ġfriendly Initi ative Ġ= Ġsituation ?. team Player With Initi ative ?. car ĊĊĠĠĠĠĠĠĠ Ġval Ġblue Initi ative Ġ= Ġif Ġ( latest Input . team Ġ=== ĠTeam . BLUE ) Ġfriendly Initi ative Ġelse Ġenemy Initi ative ĊĠĠĠĠĠĠĠ Ġval Ġorange Initi ative Ġ= Ġif Ġ( latest Input . team Ġ=== ĠTeam . OR ANGE ) Ġfriendly Initi ative Ġelse Ġenemy Initi ative ĊĊĠĠĠĠĠĠĠ Ġlatest Input . orange C ars . forEach Ġ{ Ġc Ġ-> Ġdraw Car ( c , Ġc Ġ== Ġthis . my Car , Ġorange Initi ative ?. let Ġ{ Ġit Ġ== Ġc Ġ} Ġ== Ġtrue , Ġgraphics 2 D ) Ġ} ĊĠĠĠĠĠĠĠ Ġlatest Input . blue C ars . forEach Ġ{ Ġc Ġ-> Ġdraw Car ( c , Ġc Ġ== Ġthis . my Car , Ġblue Initi ative ?. let Ġ{ Ġit Ġ== Ġc Ġ} Ġ== Ġtrue , Ġgraphics 2 D ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġball Ġ( and Ġits Ġprediction Ġg hosts ) ĊĠĠĠĠĠĠĠ Ġdraw Ball ( latest Ball , Ġgraphics 2 D , Ġreal Ball Color ) ĊĠĠĠĠĠĠĠ Ġdraw Ball ( ball Prediction , Ġgraphics 2 D , ĠColor . BLACK , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġexpected Enemy Contact ?. let Ġ{ Ġdraw Ball ( it , Ġgraphics 2 D , ĠE NE MY _ CONTACT _ B ALL _ COLOR ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġavailable Ġfull Ġboost Ġp ads ĊĠĠĠĠĠĠĠ Ġdraw Boost s ( graphics 2 D ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Plan ( plan : ĠPlan , Ġgraphics 2 D : ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! plan . is Complete ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplan . current Step . draw Debug Info ( graphics 2 D ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Car ( car : ĠCar Data , Ġis Our Car : ĠBoolean , Ġhas Initi ative : ĠBoolean , Ġg : ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġcar ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġif Ġ( car . team Ġ=== ĠTeam . BLUE ) ĠBL UE _ COLOR Ġelse ĠOR ANGE _ COLOR ĊĠĠĠĠĠĠĠ Ġg . color Ġ= Ġif Ġ( is Our Car ) Ġc . dark er () Ġelse Ġc ĊĠĠĠĠĠĠĠ Ġval Ġposition Facing Ġ= ĠPosition Facing ( car . position . flatten (), Ġcar . orientation . nose Vector . flatten ()) ĊĠĠĠĠĠĠĠ Ġdraw Car ( position Facing , Ġcar . position . z , Ġg ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Initi ative ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunderline Ġ= ĠLine 2 D . Double (- 2 . 0 , Ġ 0 . 0 , Ġ 2 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransform Ġ= ĠAff ine Transform () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform . translate ( car . position . x . toDouble (), Ġ( car . position . y Ġ- Ġ 4 ). toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . stroke Ġ= ĠBasic Stroke ( 0 . 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw ( transform . create Trans formed Shape ( underline )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Boost s ( g : ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBoost Ad visor . boost Data . full Boost s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Boost ( it . location , Ġg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Boost ( position : ĠVector 3 , Ġg : ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġball Shape Ġ= ĠEl lipse 2 D . Double (- BOOST _ DRAW _ RADIUS , Ġ- BOOST _ DRAW _ RADIUS , ĠBOOST _ DRAW _ RADIUS Ġ* Ġ 2 , ĠBOOST _ DRAW _ RADIUS Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġball Transform Ġ= ĠAff ine Transform () ĊĠĠĠĠĠĠĠ Ġball Transform . translate ( position . x . toDouble (), Ġposition . y . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġtransformed Ball Ġ= Ġball Transform . create Trans formed Shape ( ball Shape ) ĊĊĠĠĠĠĠĠĠ Ġg . color Ġ= ĠBOOST _ COLOR ĊĠĠĠĠĠĠĠ Ġg . fill ( transformed Ball ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Shot Def ense Zones ( sit uation : ĠT act ical Sit uation , Ġg : ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcar Ġ= Ġmy Car Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( sit uation . needs Def ensive Clear ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor ( 2 5 5 , Ġ 0 , Ġ 0 , Ġ 7 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Goal Center Ġ= ĠGoal Util . get Own Goal ( car . team ). center . flatten () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġball ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshot Def ense Zone Ġ= ĠZone Util . get Shot Def ense Zone ( it , Ġmy Goal Center ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw ( shot Def ense Zone . awt Area ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sit uation . shot On Goal Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor ( 0 , Ġ 2 5 5 , Ġ 0 , Ġ 7 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenemy Goal Center Ġ= ĠGoal Util . get Enemy Goal ( car . team ). center . flatten () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġball ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshot Def ense Zone Ġ= ĠZone Util . get Shot Def ense Zone ( it , Ġenemy Goal Center ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw ( shot Def ense Zone . awt Area ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Def ensive Reach Zones ( sit uation : ĠT act ical Sit uation , Ġg : ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcar Ġ= Ġmy Car Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġmy Goal Center Ġ= ĠGoal Util . get Own Goal ( car . team ). center ĊĠĠĠĠĠĠĠ Ġval Ġmy Car IsIn Net Ġ= ĠMath . sign um ( car . position . y ) Ġ== ĠMath . sign um ( my Goal Center . y ) Ġ&& ĠMath . abs ( car . position . y ) Ġ> ĠMath . abs ( my Goal Center . y ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( sit uation . needs Def ensive Clear ) Ġ&& Ġmy Car IsIn Net ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor ( 0 , Ġ 2 5 5 , Ġ 0 , Ġ 7 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshot Def ense Zone Ġ= ĠZone Util . get Def ensive Reach ( car . position , Ġmy Goal Center . flatten ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw ( shot Def ense Zone . awt Area ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġenemy With Initi ative Ġ= Ġsituation . enemy Player With Initi ative ĊĠĠĠĠĠĠĠ Ġif Ġ( enemy With Initi ative Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenemy Car Ġ= Ġenemy With Initi ative . car ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenemy Goal Center Ġ= ĠGoal Util . get Enemy Goal ( my Car !!. team ). center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenemy Car IsIn Net Ġ= ĠMath . sign um ( enemy Car . position . y ) Ġ== ĠMath . sign um ( enemy Goal Center . y ) Ġ&& ĠMath . abs ( enemy Car . position . y ) Ġ> ĠMath . abs ( enemy Goal Center . y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sit uation . shot On Goal Available Ġ&& Ġenemy Car IsIn Net ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor ( 2 5 5 , Ġ 0 , Ġ 0 , Ġ 7 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshot Def ense Zone Ġ= ĠZone Util . get Def ensive Reach ( enemy Car . position , Ġenemy Goal Center . flatten ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw ( shot Def ense Zone . awt Area ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Team Plan Info ( team Plan : ĠTeam Plan , Ġg : ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcar Ġ= Ġmy Car Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġteam Plan . team Intent s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// draw Ġthe Ġlabel Ġof Ġwhat Ġteam Ġbased Ġplan Ġthey Ġmight Ġbe Ġdoing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// transform . set To Rotation ( Math . PI Ġ/ Ġ 4 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . scale ( 0 . 2 5 , Ġ- 0 . 2 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠTE AM _ INT ENT _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġit . action . toString () Ġ+ Ġif Ġ( it . has Pos session ) Ġ" Ġ*" Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw String ( text , Ġ 4 Ġ* Ġ( it . car . position . x . toFloat () Ġ+ Ġ 2 ), Ġ 4 Ġ* Ġ(- it . car . position . y . toFloat () Ġ+ Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . scale ( 4 . 0 , Ġ- 4 . 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// draw Ġa Ġline Ġbetween Ġcars Ġif Ġthey Ġare Ġpotentially Ġgoing Ġto Ġpass ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . action Ġ== ĠTeam Action . PASS ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// filter Ġto Ġsee Ġif Ġthere Ġis Ġsomeone Ġmaybe Ġwaiting Ġfor Ġa Ġpass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġteam Plan . team Intent s . filter Ġ{ Ġti Ġ-> Ġti . action Ġ== ĠTeam Action . RECE IV ING _ PASS Ġ}. forEach Ġ{ Ġrecipient Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recipient . car . team Ġ== Ġit . car . team ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= ĠLine 2 D . Float ( it . car . position . x , Ġit . car . position . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient . car . position . x , Ġrecipient . car . position . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . stroke Ġ= ĠBasic Stroke (. 5 f , ĠBasic Stroke . CAP _ B UT T , ĠBasic Stroke . JOIN _ BE VEL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġfloat ArrayOf ( 2 f ), Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠTE AM _ INT ENT _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġareas Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . BLUE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . MID ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . OR ANGE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . BOTTOM ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . TOP ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . BOT TO MC OR NER ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . TO PC OR NER ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . BLUE BOX ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . OR ANGE BOX ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . BOT TO MS ID EL INE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Field ( Zone Definitions . TO PS ID EL INE )) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNE UT R AL _ B ALL _ COLOR Ġ= ĠColor ( 1 7 7 , Ġ 1 7 7 , Ġ 1 7 7 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBL UE _ B ALL _ COLOR Ġ= ĠColor ( 7 7 , Ġ 1 4 7 , Ġ 1 7 7 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠOR ANGE _ B ALL _ COLOR Ġ= ĠColor ( 2 2 6 , Ġ 1 5 9 , Ġ 6 3 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠE NE MY _ CONTACT _ B ALL _ COLOR Ġ= ĠColor ( 1 4 0 , Ġ 2 4 , Ġ 1 9 4 , Ġ 1 9 ) ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠN ATUR AL _ WIDTH Ġ= Ġ 1 7 0 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCAR _ LENGTH Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCAR _ WIDTH Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġclip To Field ( p : ĠPolygon ): ĠArea Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġp . awt Area ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . intersect ( Zone Definitions . FULL FIELD . awt Area ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġa ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠB ALL _ DRAW _ RADIUS Ġ= Ġ 1 . 9 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBOOST _ DRAW _ RADIUS Ġ= Ġ 1 . 3 ĊĠĠĠĠĠĠĠ Ġval ĠBL UE _ COLOR Ġ= ĠColor ( 8 4 , Ġ 1 6 4 , Ġ 2 1 3 ) ĊĠĠĠĠĠĠĠ Ġval ĠOR ANGE _ COLOR Ġ= ĠColor ( 2 4 7 , Ġ 1 5 1 , Ġ 6 6 ) ĊĠĠĠĠĠĠĠ Ġval ĠBOOST _ COLOR Ġ= ĠColor ( 2 5 5 , Ġ 2 0 7 , Ġ 6 4 ) ĊĠĠĠĠĠĠĠ Ġval ĠTE AM _ INT ENT _ COLOR Ġ= ĠColor ( 4 1 , Ġ 4 1 , Ġ 4 1 , Ġ 1 7 0 ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġdraw Car ( position Facing : ĠPosition Facing , Ġheight : ĠFloat , Ġg : ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġsize Ġand Ġrotation Ġof Ġcar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcar Shape Ġ= ĠRectangle 2 D . Double ((- CAR _ LENGTH Ġ/ Ġ 2 ). toDouble (), Ġ(- CAR _ WIDTH Ġ/ Ġ 2 ). toDouble (), ĠCAR _ LENGTH . toDouble (), ĠCAR _ WIDTH . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcar Transformation Ġ= ĠAff ine Transform () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcar Transformation . translate ( position Facing . position . x . toDouble (), Ġposition Facing . position . y . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcar Transformation . rotate ( position Facing . facing . x . toDouble (), Ġposition Facing . facing . y . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġget Height Scaling ( height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcar Transformation . scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransformed Car Ġ= Ġcar Transformation . create Trans formed Shape ( car Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . fill ( transformed Car ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdraw Ball ( position : ĠVector 3 , Ġg : ĠGraphics 2 D , Ġcolor : ĠColor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Ball ( position , Ġg , Ġcolor , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdraw Ball ( position : ĠVector 3 , Ġg : ĠGraphics 2 D , Ġcolor : ĠColor , Ġoutline : ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġball Shape Ġ= ĠEl lipse 2 D . Double (- B ALL _ DRAW _ RADIUS , Ġ- B ALL _ DRAW _ RADIUS , ĠB ALL _ DRAW _ RADIUS Ġ* Ġ 2 , ĠB ALL _ DRAW _ RADIUS Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġball Transform Ġ= ĠAff ine Transform () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġget Height Scaling ( position . z ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġball Transform . translate ( position . x . toDouble (), Ġposition . y . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġball Transform . scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransformed Ball Ġ= Ġball Transform . create Trans formed Shape ( ball Shape ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( outline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . stroke Ġ= ĠBasic Stroke (. 5 f , ĠBasic Stroke . CAP _ B UT T , ĠBasic Stroke . JOIN _ BE VEL , Ġ 0 f , Ġfloat ArrayOf ( 2 f ), Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw ( transformed Ball ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . fill ( transformed Ball ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Height Scaling ( height : ĠFloat ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 Ġ+ Ġheight . toDouble () Ġ/ Ġ 4 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ