/** Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ġthe ĠONE MA Ġkt robots ĠPackage . Ċ Ġ* ĠFor Ġthe Ġfull Ġcopyright Ġand Ġlicense Ġinformation , Ċ Ġ* Ġplease Ġview Ġthe ĠLICENSE Ġfile Ġthat Ġwas Ġdistributed Ċ Ġ* Ġwith Ġthis Ġsource Ġcode . Ċ Ġ* Ċ Ġ* Ġcopyright Ġ( c ) Ġ 2 0 2 0 , ĠJ uan ĠMan uel ĠTor res Ġ( http :// on ema . io ) Ċ Ġ* Ċ Ġ* Ġ@ author ĠJ uan ĠMan uel ĠTor res Ġ< software @ on ema . io > Ċ Ġ*/ Ċ Ċ package Ġio . on ema . kt robots . server . controller Ċ Ċ import Ġio . on ema . kt robots . commons . domain . Scan En emies Request Ċ import Ġio . on ema . kt robots . commons . domain . Scan En emies Response Ċ import Ġio . on ema . kt robots . commons . utils . angle To XY Ċ import Ġio . on ema . kt robots . commons . utils . distance To XY Ċ import Ġio . on ema . kt robots . server . data . Game Table Repository Ċ import Ġio . on ema . kt robots . server . domain . Game Record Ċ import Ġio . on ema . kt robots . server . service . Game Logic Ċ import Ġorg . springframework . web . bind . annotation . PostMapping Ċ import Ġorg . springframework . web . bind . annotation . RequestBody Ċ import Ġorg . springframework . web . bind . annotation . RequestMapping Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ Ċ /** Ċ Ġ* ĠThis Ġcontroller Ġscans Ġfor Ġenemies Ġwith Ġin Ġa Ġheading Ġand Ġresolution Ċ Ġ*/ Ċ @ RestController Ċ @ RequestMapping ("/ scan ") Ċ class ĠScan Controller ( val Ġrepo : ĠGame Table Repository ) Ġ{ ĊĊĠĠĠ Ġ// --- ĠMethods Ġ--- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScan Ġfor Ġenemies Ġwithin Ġthe Ġgiven Ġscan Ġheading Ġand Ġresolution . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ PostMapping ĊĠĠĠ Ġfun Ġscan (@ RequestBody Ġrequest : ĠScan En emies Request ): ĠScan En emies Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgame Record : ĠGame Record Ġ= Ġrepo . findBy PrimaryKey ( request . game Id ). orElse Throw { ĠRuntimeException (" Game Ġ${ request . game Id } Ġnot Ġfound ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrobot Ġ= Ġgame Record . game . robots . first Ġ{ Ġit . id Ġ== Ġrequest . robot Id Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrobot Option Ġ= ĠGame Logic . scan Robot s ( game Record . game , Ġrobot , Ġrequest . heading , Ġrequest . resolution ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( robot Option . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġrobot Option . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġdistance To XY ( robot , Ġother ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheading Ġ= Ġangle To XY ( other , Ġrobot ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScan En emies Response ( found Ġ= Ġtrue , Ġdistance Ġ= Ġdistance , Ġheading Ġ= Ġheading ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScan En emies Response () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ