package Ġhr . fr an p . rs im Ċ Ċ import Ġhr . fr an p . rs im . models .* Ċ import Ġjavafx . beans . property . Simple Double Property Ċ import Ġjavafx . beans . property . Simple ObjectProperty Ċ import Ġjavafx . embed . swing . Swing FX Utils Ċ import Ġjavafx . event . EventHandler Ċ import Ġjavafx . geometry . BoundingBox Ċ import Ġjavafx . geometry . Point 2 D Ċ import Ġjavafx . geometry . V Pos Ċ import Ġjavafx . scene . Snapshot Parameters Ċ import Ġjavafx . scene . canvas . Graphics Context Ċ import Ġjavafx . scene . image . Image Ċ import Ġjavafx . scene . image . Writable Image Ċ import Ġjavafx . scene . layout . Pane Ċ import Ġjavafx . scene . paint . Color Ċ import Ġjavafx . scene . shape . Rectangle Ċ import Ġjavafx . scene . text . Font Ċ import Ġjavafx . scene . text . Text Alignment Ċ import Ġjavafx . scene . transform . Affine Ċ import Ġjavafx . scene . transform . Transform Ċ import Ġjavafx . stage . FileChooser Ċ import Ġorg . apache . commons . collections 4 . map . LR U Map Ċ import Ġt orn ad of x .* Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . lang . Math .* Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ import Ġjava . time . Duration Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Local Time Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util .* Ċ import Ġjava . util . Collections . synchronized Map Ċ import Ġjava . util . stream . Int Stream Ċ import Ġjavax . image io . Image IO Ċ import Ġkotlin . collections . set Ċ import Ġkotlin . concurrent . timer Ċ import Ġkotlin . experimental . or Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ class ĠRad ar Screen View Ġ: ĠView () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCurrent Ġtime Ġin Ġthe Ġsimulation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsimulated Current Time Sec Property Ġ= ĠSimple Double Property ( 0 . 0 ) ĊĊĠĠĠ Ġvar Ġdisplay Parameters Ġby Ġproperty ( read Config ()) ĊĊĠĠĠ Ġval Ġdisplay Parameters Property Ġ= ĠgetProperty ( Rad ar Screen View :: display Parameters ) ĊĊĠĠĠ Ġprivate Ġvar Ġcombined Transform : ĠTransform Ġ= ĠAff ine () ĊĠĠĠ Ġprivate Ġvar Ġinv Combined Transform : ĠTransform Ġ= Ġcombined Transform . create Inverse () ĊĊĠĠĠ Ġprivate Ġval Ġcloud One Image Ġ= Ġprocess Hit Mask Image ( Image ( resources [" / cloud 1 . png "])) ĊĠĠĠ Ġprivate Ġval Ġcloud Two Image Ġ= Ġprocess Hit Mask Image ( Image ( resources [" / cloud 2 . png "])) ĊĊĠĠĠ Ġval Ġmouse Position Property Ġ= ĠSimple ObjectProperty < Rad ar Coordinate >() ĊĠĠĠ Ġval Ġmouse Click Property Ġ= ĠSimple ObjectProperty < Rad ar Coordinate >() ĊĊĠĠĠ Ġval Ġselection Rect Ġ= ĠRectangle (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġfill Ġ= ĠColor . DARK GRAY . derive Color ( 3 . 0 , Ġ 1 . 0 , Ġ 1 . 0 , Ġ 0 . 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġroot Ġ= ĠP ane (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Class ( Styles . radar Screen ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdesigner Controller : ĠDesigner Controller Ġby Ġinject () ĊĠĠĠ Ġprivate Ġval Ġsimulator Controller : ĠSimulator Controller Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġval Ġangle String Converter Ġ= ĠAngle String Converter () ĊĠĠĠ Ġprivate Ġval Ġspeed String Converter Ġ= ĠSpeed String Converter () ĊĠĠĠ Ġprivate Ġval Ġdistance String Converter Ġ= ĠDistance String Converter () ĊĊĠĠĠ Ġprivate Ġval Ġsketch Ġ= ĠSk etch Ġ{ ĊĠĠĠĠĠĠĠ Ġmouse Clicked Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Point Ġ= Ġinv Combined Transform . transform ( it . x , Ġit . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Click Property . set ( Rad ar Coordinate . from Cartesian ( display Point . x , Ġdisplay Point . y )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmouse Moved Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Point Ġ= Ġinv Combined Transform . transform ( it . x , Ġit . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Position Property . set ( Rad ar Coordinate . from Cartesian ( display Point . x , Ġdisplay Point . y )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdraw Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( simulator Controller . simulation Running Property . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimulated Current Time Sec Property . set ( simulator Controller . approx Sim Time ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Rect ( 0 . 0 , Ġ 0 . 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Scene ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġhits Cache Ġ= ĠL RU Map < Int , ĠByteBuffer >( 2 0 ) ĊĠĠĠ Ġprivate Ġvar Ġhit Image : ĠBufferedImage ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġhit Calculator : ĠTimer ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Hits () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġno Ġneed Ġto Ġcalculate Ġif Ġthere Ġare Ġno Ġtargets ĊĠĠĠĠĠĠĠ Ġif Ġ( designer Controller . scenario . moving Targets . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġimg Cnt Ġ= Ġdisplay Parameters . plot History Count ĊĠĠĠĠĠĠĠ Ġif Ġ( img Cnt Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sketch . width Ġ<= Ġ 0 . 0 Ġ|| Ġsketch . height Ġ<= Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġhits Cache . maxSize () Ġ- Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Sec Ġ= Ġsimulated Current Time Sec Property . get () ĊĠĠĠĠĠĠĠ Ġval Ġseek Time Sec Ġ= Ġsimulator Controller . radar Parameters . seek Time Sec ĊĠĠĠĠĠĠĠ Ġval Ġmax Ar p Idx Ġ= Ġceil ( designer Controller . scenario . simulation Duration Min Ġ* ĠMIN _ TO _ S Ġ/ Ġseek Time Sec ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Ar p Idx Ġ= Ġfloor ( currentTime Sec Ġ/ Ġseek Time Sec ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġc Params Ġ= ĠCalcul ation Parameters ( simulator Controller . radar Parameters . copy ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Ar p Idx Ġ= Ġmax ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( current Ar p Idx Ġ- Ġn Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġto Ar p Idx Ġ= Ġmin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ar p Idx , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ar p Idx Ġ+ Ġn ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsm Ġ= Ġsynchronized Map ( hits Cache ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Stream . range ( from Ar p Idx , Ġto Ar p Idx Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! sm . containsKey ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parallel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġar p Idx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Time Sec Ġ= Ġar p Idx Ġ* Ġseek Time Sec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Time Sec Ġ= Ġ( arp Idx Ġ+ Ġ 1 ) Ġ* Ġseek Time Sec ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Calculate Ġhits Ġfor Ġrange Ġ$ from Time Sec Ġto Ġ$ to Time Sec " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuff Ġ= ĠByteBuffer . allocate ( c Params . arp Byte Cnt . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. order ( Byte Order . LIT TLE _ ENDIAN ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalc Time Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesigner Controller . calculate Target Hits ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuff Ġ= Ġbuff , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Time Sec Ġ= Ġfrom Time Sec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Time Sec Ġ= Ġto Time Sec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompress Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Calc Ġtime : Ġ$ calc Time Ġms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsm . put ( arp Idx , Ġbuff ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġe . message Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrent Ac p Idx Ġ= Ġround ( c Params . az imuth Change Pulse Count Ġ* ĠcurrentTime Sec Ġ/ Ġseek Time Sec ). toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġdraw From Ar p Idx Ġ= Ġmax ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( current Ar p Idx Ġ- Ġimg Cnt ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdraw To Ar p Idx Ġ= Ġmin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ar p Idx , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax ( 0 , Ġcurrent Ar p Idx ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuff Ġ= ĠByteBuffer . allocate ( c Params . arp Byte Cnt . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. order ( Byte Order . LIT TLE _ ENDIAN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhist Draw Time Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Stream . range ( draw From Ar p Idx , Ġdraw To Ar p Idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġhits Cache . containsKey ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl ru Buff Ġ= Ġhits Cache [ i ] Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuff . rewind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġmin ( lru Buff . limit (), Ġbuff . limit ()) Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. limit ). forEach Ġ{ Ġidx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuff . put ( idx , Ġbuff [ idx ] Ġor Ġl ru Buff [ idx ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠBufferedImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . width . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . height . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedImage . TYPE _ 4 BYTE _ AB GR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgc Ġ= Ġimg . graphics ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġpast Ġhits ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuff . draw Rad ar Hit Image ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Params , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcombined Transform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġcurrent Ġhits ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhits Cache [ draw To Ar p Idx ]?. draw Rad ar Hit Image ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Params , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcombined Transform , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ac p Idx Ġ- Ġdraw To Ar p Idx Ġ* Ġc Params . az imuth Change Pulse Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexpose Ġfor Ġdrawing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhit Image Ġ= Ġimg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġe . message Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġprintln (" History Ġdraw Ġtime : Ġ$ hist Draw Time Ġms ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcanvas Ġ= ĠCanvas 2 D ( sketch ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Property (). bind ( root . width Property ()) ĊĠĠĠĠĠĠĠ Ġheight Property (). bind ( root . height Property ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters Property . addListener Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhits Cache . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhit Image Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdesigner Controller . scenario Property . addListener Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhits Cache . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhit Image Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith ( root ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Selection Rectangle Gesture ( this , Ġselection Rect , ĠEventHandler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Cons umed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Parameters Ġ= Ġdisplay Parameters . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Port Ġ= Ġif Ġ( selection Rect . width Ġ== Ġ 0 . 0 Ġ&& Ġselection Rect . height Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinv Combined Transform . transform ( selection Rect . bounds In Local ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . children . add ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġconfig ĊĠĠĠĠĠĠĠ Ġwrite Config () ĊĠĠĠĠĠĠĠ Ġdisplay Parameters Property . addListener Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Config () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdesigner Controller . scenario Property . addListener Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhits Cache . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWrite Ġthe Ġview Ġconfig Ġto Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġwrite Config () Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig [" distance Step "] Ġ= Ġdisplay Parameters . distance Step . toString () ĊĠĠĠĠĠĠĠ Ġconfig [" distance Unit "] Ġ= Ġdisplay Parameters . distance Unit . toString () ĊĠĠĠĠĠĠĠ Ġconfig [" az imuth Steps "] Ġ= Ġdisplay Parameters . az imuth Steps . toString () ĊĠĠĠĠĠĠĠ Ġconfig [" az imuth Marker Type "] Ġ= Ġdisplay Parameters . az imuth Marker Type . toString () ĊĠĠĠĠĠĠĠ Ġconfig [" coordinate System "] Ġ= Ġdisplay Parameters . coordinate System . toString () ĊĠĠĠĠĠĠĠ Ġconfig [" target Layer Opacity "] Ġ= Ġdisplay Parameters . target Layer Opacity . toString () ĊĠĠĠĠĠĠĠ Ġconfig [" target Hit Layer Opacity "] Ġ= Ġdisplay Parameters . target Hit Layer Opacity . toString () ĊĠĠĠĠĠĠĠ Ġconfig [" cl utter Layer Opacity "] Ġ= Ġdisplay Parameters . cl utter Layer Opacity . toString () ĊĠĠĠĠĠĠĠ Ġconfig [" plot History Count "] Ġ= Ġdisplay Parameters . plot History Count . toString () ĊĠĠĠĠĠĠĠ Ġconfig [" max Display Distance Km "] Ġ= Ġdisplay Parameters . max Display Distance Km . toString () ĊĠĠĠĠĠĠĠ Ġconfig . save () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRead Ġthe Ġview Ġconfig Ġfrom Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġread Config (): ĠDisplay Parameters Ġ= ĠDisplay Parameters ( ĊĠĠĠĠĠĠĠ Ġdistance Step Ġ= Ġconfig . double (" distance Step ") Ġ?: Ġ 5 0 . 0 , ĊĠĠĠĠĠĠĠ Ġdistance Unit Ġ= ĠDistance Unit . valueOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . string (" distance Unit ", ĠDistance Unit . Km . toString ()) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġaz imuth Steps Ġ= Ġconfig . string (" az imuth Steps ") ?. toInt () Ġ?: Ġ 3 6 , ĊĠĠĠĠĠĠĠ Ġaz imuth Marker Type Ġ= ĠAz imuth Marker Type . valueOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . string (" az imuth Marker Type ", ĠAz imuth Marker Type . FULL . toString ()) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġcoordinate System Ġ= ĠCoordinate System . valueOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . string (" coordinate System ", ĠCoordinate System . R _ AZ . toString ()) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġview Port Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtarget Display Filter Ġ= Ġempty Sequence (), ĊĠĠĠĠĠĠĠ Ġtarget Layer Opacity Ġ= Ġconfig . double (" target Layer Opacity ") Ġ?: Ġ 1 . 0 , ĊĠĠĠĠĠĠĠ Ġtarget Hit Layer Opacity Ġ= Ġconfig . double (" target Hit Layer Opacity ") Ġ?: Ġ 1 . 0 , ĊĠĠĠĠĠĠĠ Ġcl utter Layer Opacity Ġ= Ġconfig . double (" cl utter Layer Opacity ") Ġ?: Ġ 1 . 0 , ĊĠĠĠĠĠĠĠ Ġplot History Count Ġ= Ġconfig . string (" plot History Count ", Ġ" 0 ") ?. toInt () Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠ Ġmax Display Distance Km Ġ= Ġconfig . string (" max Display Distance Km ", Ġ" 4 0 0 ") ?. toDouble () Ġ?: Ġ 0 0 . 0 4 ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġscale Ġof Ġconversion Ġbetween Ġthe Ġselected Ġdisplay Ġunits Ġand Ġthe Ġnative ĠK m ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdistance To Km Scale () Ġ= Ġif Ġ( display Parameters . distance Unit Ġ== ĠDistance Unit . NM ) ĊĠĠĠĠĠĠĠĠ 1 . 8 5 2 ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠ 1 . 0 ĊĊĊĠĠĠ Ġprivate Ġfun Ġsetup View Port () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmax Distance Km Ġ= Ġmax ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . max Rad ar Distance Km , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Parameters . max Display Distance Km ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġview Port Ġ= Ġdisplay Parameters . view Port Ġ?: ĠBounding Box ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- max Distance Km Ġ* Ġ 1 . 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- max Distance Km Ġ* Ġ 1 . 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ* Ġmax Distance Km Ġ* Ġ 1 . 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ* Ġmax Distance Km Ġ* Ġ 1 . 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdest View Port Ġ= ĠBounding Box ( 0 . 0 , Ġ 0 . 0 , Ġroot . width , Ġroot . height ) ĊĊĠĠĠĠĠĠĠ Ġcombined Transform Ġ= Ġsetup View Port ( view Port , Ġdest View Port ) ĊĠĠĠĠĠĠĠ Ġinv Combined Transform Ġ= Ġcombined Transform . create Inverse () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Path Segment ( moving Target : ĠMoving Target , ĠcurrentTime Us : ĠDouble ): ĠPath Segment ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġp 1 Ġ= Ġmoving Target . initial Position ĊĠĠĠĠĠĠĠ Ġvar Ġt 1 Ġ= Ġmoving Target . starting Time Sec Ġ?: Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġps : ĠPath Segment ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġsyn chro Pulse Delay M Ġ= Ġif Ġ( moving Target . syn chro Pulse Rad ar J am ming Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( moving Target . syn chro Pulse Delay M Ġ?: Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( moving Target . directions . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġps Ġ= ĠPath Segment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 Ġ= Ġp 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 2 Ġ= Ġp 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt 1 Us Ġ= Ġt 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt 2 Us Ġ= Ġdesigner Controller . scenario . simulation Duration Min Ġ* ĠMIN _ TO _ US , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvx Km Us Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvy Km Us Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġmoving Target . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj am ming Source Ġ= Ġmoving Target . jam ming Source Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsyn chro Pulse Delay M Ġ= Ġsyn chro Pulse Delay M ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( currentTime Us Ġ< Ġt 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtarget Ġhasn 't Ġstarted Ġmoving Ġyet ĊĠĠĠĠĠĠĠĠĠĠĠ Ġps Ġ= ĠPath Segment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 Ġ= Ġp 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 2 Ġ= Ġp 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt 1 Us Ġ= Ġt 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt 2 Us Ġ= Ġdesigner Controller . scenario . simulation Duration Min Ġ* ĠMIN _ TO _ US , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvx Km Us Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvy Km Us Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġmoving Target . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj am ming Source Ġ= Ġmoving Target . jam ming Source Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsyn chro Pulse Delay M Ġ= Ġsyn chro Pulse Delay M ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġbreak er @ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoving Target . directions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġdirection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġdirection . destination ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspeed Km Us Ġ= Ġdirection . speed K mh Ġ/ ĠHO UR _ TO _ US ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdistance Ġfrom Ġlast Ġcourse Ġchange Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 1 c Ġ= Ġp 1 . to Cartesian () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 2 c Ġ= Ġp 2 . to Cartesian () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġp 2 c . x Ġ- Ġp 1 c . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġp 2 c . y Ġ- Ġp 1 c . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġsqrt ( pow ( dx , Ġ 2 . 0 ) Ġ+ Ġpow ( dy , Ġ 2 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdt Ġ= Ġdistance Ġ/ Ġspeed Km Us ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentTime Us Ġ>= Ġt 1 Ġ&& ĠcurrentTime Us Ġ< Ġt 1 Ġ+ Ġdt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps Ġ= ĠPath Segment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 Ġ= Ġp 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 2 Ġ= Ġp 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt 1 Us Ġ= Ġt 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt 2 Us Ġ= Ġt 1 Ġ+ Ġdt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvx Km Us Ġ= Ġspeed Km Us Ġ* Ġdx Ġ/ Ġdistance , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvy Km Us Ġ= Ġspeed Km Us Ġ* Ġdy Ġ/ Ġdistance , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġmoving Target . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj am ming Source Ġ= Ġmoving Target . jam ming Source Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsyn chro Pulse Delay M Ġ= Ġsyn chro Pulse Delay M ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ break er ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 Ġ= Ġp 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt 1 Ġ+= Ġdt ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġps ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfig Distance Display ( distance Unit : ĠDistance Unit , Ġstep : ĠDouble ? Ġ= Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Parameters Ġ= Ġdisplay Parameters . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Unit Ġ= Ġdistance Unit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Step Ġ= Ġstep Ġ?: Ġdisplay Parameters . distance Step ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfig Az imuth Display ( az imuth Marker Type : ĠAz imuth Marker Type , Ġstep : ĠInt ? Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Parameters Ġ= Ġdisplay Parameters . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaz imuth Marker Type Ġ= Ġaz imuth Marker Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaz imuth Steps Ġ= Ġstep Ġ?: Ġdisplay Parameters . az imuth Steps ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfig Target Layer Opacity ( opacity : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Parameters Ġ= Ġdisplay Parameters . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Layer Opacity Ġ= Ġopacity ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfig Target Hit Layer Opacity ( opacity : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Parameters Ġ= Ġdisplay Parameters . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Hit Layer Opacity Ġ= Ġopacity ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfig Cl utter Layer Opacity ( opacity : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Parameters Ġ= Ġdisplay Parameters . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcl utter Layer Opacity Ġ= Ġopacity ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfig Plot History ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Parameters Ġ= Ġdisplay Parameters . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplot History Count Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Scene ( gc : ĠGraphics Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdraw Time Total Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup View Port () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Cl utter Map ( gc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Static Markers ( gc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Dynamic Markers ( gc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Moving Targets ( gc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Target Hits ( gc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw UI ( gc ) ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġprintln (" Total Ġdraw Ġtime : Ġ$ draw Time Total Ġms ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠdateFormat Pattern Ġ= ĠDateTime Formatter . of Pattern (" yyyy - MM - dd ") ĊĠĠĠ Ġprivate Ġval Ġtime Format Pattern Ġ= ĠDateTime Formatter . of Pattern (" HH : mm : ss ") ĊĠĠĠ Ġprivate Ġval Ġangle Converter Ġ= ĠAngle String Converter () ĊĊĠĠĠ Ġprivate Ġfun Ġdraw UI ( gc : ĠGraphics Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġ 2 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ 1 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġoriginal Font Ġ= Ġgc . font ĊĠĠĠĠĠĠĠ Ġgc . font Ġ= ĠFont ( 3 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġgc . textAlign Ġ= ĠText Alignment . CENTER ĊĠĠĠĠĠĠĠ Ġgc . text Baseline Ġ= ĠV Pos . CENTER ĊĊĠĠĠĠĠĠĠ Ġ// Ġdisplay Ġtime Ġin Ġupper Ġleft ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Fg Color ĊĠĠĠĠĠĠĠ Ġgc . fillRect ( offset , Ġoffset , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Bg Color ĊĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Time . now (). format ( time Format Pattern ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+ Ġwidth Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+ Ġheight Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġoffset ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdisplay Ġdate Ġin Ġupper Ġright ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Fg Color ĊĠĠĠĠĠĠĠ Ġgc . fillRect ( sketch . width Ġ- Ġoffset Ġ- Ġwidth , Ġoffset , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Bg Color ĊĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . now (). format ( date Format Pattern ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . width Ġ- Ġoffset Ġ- Ġwidth Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+ Ġheight Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġoffset ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdisplay Ġan ten na Ġaz imuth Ġin Ġlower Ġleft ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Fg Color ĊĠĠĠĠĠĠĠ Ġgc . fillRect ( offset , Ġsketch . height Ġ- Ġoffset Ġ- Ġheight , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Bg Color ĊĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġangle Converter . toString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormalize Angle Deg ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 6 0 . 0 Ġ* Ġ( sim ulated Current Time Sec Property . get () Ġ/ Ġsimulator Controller . radar Parameters . seek Time Sec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+ Ġwidth Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . height Ġ- Ġoffset Ġ- Ġheight Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġoffset ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdisplay Ġsimulation Ġtime Ġin Ġlower Ġright ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Fg Color ĊĠĠĠĠĠĠĠ Ġgc . fillRect ( sketch . width Ġ- Ġoffset Ġ- Ġwidth , Ġsketch . height Ġ- Ġoffset Ġ- Ġheight , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Bg Color ĊĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Time . MID N IGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Seconds ( sim ulated Current Time Sec Property . get (). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. format ( time Format Pattern ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . width Ġ- Ġoffset Ġ- Ġwidth Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . height Ġ- Ġoffset Ġ- Ġheight Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġoffset ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġgc . font Ġ= Ġoriginal Font ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Static Markers ( gc : ĠGraphics Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġgc . stroke Ġ= ĠStyles . radar Fg Color ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Fg Color ĊĊĠĠĠĠĠĠĠ Ġ// Ġscale Ġin Ġcase Ġof Ġn aut ical Ġm iles ĊĠĠĠĠĠĠĠ Ġval Ġdistance To Km Scale Ġ= Ġdistance To Km Scale () ĊĊĠĠĠĠĠĠĠ Ġ// ĠDistance Ġmarkers ĊĠĠĠĠĠĠĠ Ġval Ġstep Km Ġ= Ġif Ġ( display Parameters . distance Step Ġ== Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . max Rad ar Distance Km ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Parameters . distance Step Ġ* Ġdistance To Km Scale ĊĊĠĠĠĠĠĠĠ Ġval Ġmandatory Distance Markers Ġ= Ġsequence Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . min Rad ar Distance Km , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . max Rad ar Distance Km ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdistance Sequence Ġ= Ġmandatory Distance Markers Ġ+ Ġgenerate Sequence ( 0 . 0 ) Ġ{ Ġit Ġ+ Ġstep Km Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop While Ġ{ Ġit Ġ<= Ġsimulator Controller . radar Parameters . min Rad ar Distance Km Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take While Ġ{ Ġit Ġ<= Ġsimulator Controller . radar Parameters . max Rad ar Distance Km Ġ- Ġstep Km Ġ/ Ġ 2 Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= Ġcombined Transform . transform ( 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġdistance Sequence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdp Ġ= Ġcombined Transform . transform ( r , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdist Ġ= Ġcp . distance ( dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke O val ( cp . x Ġ- Ġdist , Ġcp . y Ġ- Ġdist , Ġ 2 Ġ* Ġdist , Ġ 2 Ġ* Ġdist ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc . textAlign Ġ= ĠText Alignment . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc . text Baseline Ġ= ĠV Pos . TOP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġround ( r Ġ/ Ġdistance To Km Scale ). toInt (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdp . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdp . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġangle Ġmarkers ĊĠĠĠĠĠĠĠ Ġval Ġaz imuth Sequence Ġ= Ġif Ġ( display Parameters . az imuth Steps Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Angle Step Ġ= ĠTWO _ PI Ġ/ Ġdisplay Parameters . az imuth Steps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Sequence ( 0 . 0 ) Ġ{ Ġit Ġ+ Ġdelta Angle Step Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take While Ġ{ Ġit Ġ< Ġ( TWO _ PI Ġ- Ġdelta Angle Step Ġ/ Ġ 3 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( 0 . 0 , ĠHAL F _ PI , ĠPI , Ġ 3 Ġ* ĠHAL F _ PI , ĠTWO _ PI ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( display Parameters . az imuth Marker Type Ġ== ĠAz imuth Marker Type . FULL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġfull Ġlines Ġ( like Ġa Ġsp ider web ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaz imuth Sequence . forEach Ġ{ Ġaz imuth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġaz imuth To Angle ( az imuth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġcombined Transform . transform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . min Rad ar Distance Km Ġ* Ġcos ( angle ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . min Rad ar Distance Km Ġ* Ġsin ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġcombined Transform . transform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . max Rad ar Distance Km Ġ* Ġcos ( angle ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . max Rad ar Distance Km Ġ* Ġsin ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 . x , Ġp 1 . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 2 . x , Ġp 2 . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġonly Ġticks Ġon Ġdistance Ġcircles ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaz imuth Sequence . forEach Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Sequence ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ> Ġsimulator Controller . radar Parameters . min Rad ar Distance Km Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġd Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpc Ġ= Ġcombined Transform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Ġ* ĠMath . cos ( a ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Ġ* ĠMath . sin ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġpc . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- length Ġ/ Ġ 2 . 0 Ġ* ĠMath . cos ( a ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ/ Ġ 2 . 0 Ġ* ĠMath . sin ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġpc . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ/ Ġ 2 . 0 Ġ* ĠMath . cos ( a ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- length Ġ/ Ġ 2 . 0 Ġ* ĠMath . sin ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 . x , Ġp 1 . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 2 . x , Ġp 2 . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġaz imuth Sequence . forEach Ġ{ Ġaz imuth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġaz imuth To Angle ( az imuth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġcombined Transform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . max Rad ar Distance Km Ġ* Ġcos ( angle ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . max Rad ar Distance Km Ġ* Ġsin ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 Ġ* Ġcos ( angle ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 2 0 Ġ* Ġsin ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc . textAlign Ġ= ĠText Alignment . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc . text Baseline Ġ= ĠV Pos . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġround ( to Degrees ( az imuth )). toInt (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Dynamic Markers ( gc : ĠGraphics Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġangle Rad Ġ= Ġaz imuth To Angle ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTWO _ PI Ġ* Ġ( sim ulated Current Time Sec Property . get () Ġ/ Ġsimulator Controller . radar Parameters . seek Time Sec ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġsimulation Ġposition Ġmarkers ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġcombined Transform . transform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . max Rad ar Distance Km Ġ* Ġcos ( angle Rad ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimulator Controller . radar Parameters . max Rad ar Distance Km Ġ* Ġsin ( angle Rad ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠColor . RED . derive Color ( 0 . 0 , Ġ 1 . 0 , Ġ 1 . 0 , Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠ Ġgc . fill O val ( p . x Ġ- Ġ 5 . 0 , Ġp . y Ġ- Ġ 5 . 0 , Ġ 1 0 . 0 , Ġ 1 0 . 0 ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmap : ĠHashMap < Triple < Int , ĠInt , ĠCl utter >, ĠImage > Ġ= ĠHashMap () ĊĠĠĠ Ġfun Ġdraw Cl utter Map ( gc : ĠGraphics Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( display Parameters . cl utter Layer Opacity Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcl utter Ġ= Ġdesigner Controller . scenario . cl utter Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġstation ary Ġtargets ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġ( 2 . 0 Ġ* Ġsimulator Controller . radar Parameters . max Rad ar Distance Km ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ( 2 . 0 Ġ* Ġsimulator Controller . radar Parameters . max Rad ar Distance Km ) ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠTrip le ( width . toInt (), Ġheight . toInt (), Ġcl utter ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcl utter . getImage ( width . toInt (), Ġheight . toInt ()) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Computed Ġnew Ġcl utter Ġmap Ġfor Ġsize Ġ($ width ,$ height )" Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġraster Map Image Ġ= Ġmap [ key ] Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġtransformed Bounds Ġ= Ġcombined Transform . transform ( BoundingBox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- width Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- height Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġgc . global Alpha ĊĠĠĠĠĠĠĠ Ġgc . global Alpha Ġ= Ġdisplay Parameters . cl utter Layer Opacity ĊĠĠĠĠĠĠĠ Ġgc . drawImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraster Map Image , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformed Bounds . min X , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformed Bounds . min Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformed Bounds . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformed Bounds . height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġgc . global Alpha Ġ= Ġalpha ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Moving Targets ( gc : ĠGraphics Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġorig D ashes Ġ= Ġgc . line D ashes Ġ?: Ġdouble ArrayOf ( 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Sec Ġ= Ġsimulated Current Time Sec Property . get () ĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Us Ġ= ĠS _ TO _ US Ġ* ĠcurrentTime Sec ĊĊĠĠĠĠĠĠĠ Ġval Ġbox Ġ= Ġcombined Transform . transform ( BoundingBox ( 0 . 0 , Ġ 0 . 0 , Ġ 3 . 0 , Ġ 3 . 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġwh Ġ= Ġmax ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax ( box . height , Ġbox . width ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġmoving Ġtargets ĊĠĠĠĠĠĠĠ Ġval Ġmoving Target Count Ġ= Ġdesigner Controller . scenario ?. moving Targets ?. size Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġselected Target Ġ= Ġdesigner Controller . selected Moving Target ĊĠĠĠĠĠĠĠ Ġdesigner Controller . scenario . moving Targets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshow Ġonly Ġif Ġthe Ġtarget Ġis Ġselected Ġor Ġmarked Ġas Ġdisplay ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ== Ġdesigner Controller . selected Moving Target Ġ|| Ġdisplay Parameters . target Display Filter . none () Ġ|| Ġit . name Ġin Ġdisplay Parameters . target Display Filter Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Indexed Ġ{ Ġi , Ġtarget Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġtarget . type Ġ?: Ġreturn @ forEach Indexed ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġfuture Ġtargets Ġas Ġdas hed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstarting Time Sec Ġ= Ġtarget . starting Time Sec Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( starting Time Sec Ġ> ĠcurrentTime Sec ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . set Line D ashes ( 5 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . set Line D ashes (* orig D ashes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinit Pos Cart Ġ= Ġtarget . initial Position . to Cartesian () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġcombined Transform . transform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Pos Cart . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Pos Cart . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Target Opacity Factor Ġ= Ġif Ġ( selected Target Ġ== Ġnull Ġ|| Ġselected Target Ġ== Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshift Ġcolors Ġfor Ġeach Ġtarget Ġand Ġif Ġthe Ġtarget Ġis Ġselected Ġdisplay Ġother Ġtargets Ġsemi - transparent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor . RED . derive Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ* Ġ( 3 6 0 . 0 Ġ/ Ġmoving Target Count ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Parameters . target Layer Opacity Ġ* Ġselected Target Opacity Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġsegments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġp From Ġ= ĠPoint 2 D ( p . x , Ġp . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . beginPath () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . directions . forEach Ġ{ Ġd Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd pc Ġ= Ġcombined Transform . transform ( d . destination . to Cartesian ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp From . x , Ġp From . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd pc . x , Ġd pc . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp From Ġ= Ġd pc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . close Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġcourse Ġchange Ġ( initial ) Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill O val ( p . x Ġ- Ġ 0 . 5 , Ġp . y Ġ- Ġ 0 . 5 , Ġ 1 . 0 , Ġ 1 . 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġpoint Ġmarkers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . directions . forEach Ġ{ Ġd Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd pc Ġ= Ġcombined Transform . transform ( d . destination . to Cartesian ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill O val ( d pc . x Ġ- Ġ 1 . 0 , Ġd pc . y Ġ- Ġ 1 . 0 , Ġ 2 . 0 , Ġ 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġcurrent Ġsimulated Ġposition Ġmarker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplot Path Segment Ġ= ĠgetCurrent Path Segment ( target , ĠcurrentTime Us ) Ġ?: Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplot Pos Ġ= Ġplot Path Segment . getPosition For Time ( currentTime Us ) Ġ?: Ġtarget . initial Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplot Pos Cart Ġ= Ġplot Pos . to Cartesian () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpt Ġ= Ġcombined Transform . transform ( plot Pos Cart ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Km Ġ= Ġsqrt ( pow ( plot Pos Cart . x , Ġ 2 . 0 ) Ġ+ Ġpow ( plot Pos Cart . y , Ġ 2 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaz Ġ= Ġto Degrees ( angle To Az imuth ( atan 2 ( plot Pos Cart . y , Ġplot Pos Cart . x ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ""" ${ target . name } Ċ hd g =${ angle String Converter . toString ( plot Path Segment . heading Deg )} Ċ spd =${ speed String Converter . toString ( plot Path Segment . v K mh )} Ċ r =${ distance String Converter . toString ( distance Km Ġ/ Ġdistance To Km Scale ()) } Ċ az =${ angle String Converter . toString ( az )} """ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . radar Fg Color . derive Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Parameters . target Layer Opacity Ġ* Ġselected Target Opacity Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke Ġ= Ġcolor ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMoving Target Type . Cloud 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġcombined Transform . transform ( BoundingBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplot Pos Cart . x Ġ- Ġcloud One Image . width Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplot Pos Cart . y Ġ- Ġcloud One Image . height Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloud One Image . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloud One Image . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . drawImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloud One Image , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x Ġ- Ġbounds . width Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ- Ġbounds . height Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . text Baseline Ġ= ĠV Pos . TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ+ Ġbounds . height Ġ/ Ġ 2 Ġ+ Ġ 1 . 5 Ġ* ĠFont . getDefault (). size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMoving Target Type . Cloud 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġcombined Transform . transform ( BoundingBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplot Pos Cart . x Ġ- Ġcloud Two Image . width Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplot Pos Cart . y Ġ- Ġcloud Two Image . height Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Two Image . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Two Image . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . drawImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Two Image , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x Ġ- Ġbounds . width Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ- Ġbounds . height Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . text Baseline Ġ= ĠV Pos . TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . moving Target Position Label Color . derive Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Parameters . target Layer Opacity Ġ* Ġselected Target Opacity Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ+ Ġbounds . height Ġ/ Ġ 2 Ġ+ Ġ 1 . 5 Ġ* ĠFont . getDefault (). size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMoving Target Type . Point Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x Ġ- Ġwh Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ- Ġwh Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwh , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . text Baseline Ġ= ĠV Pos . TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . moving Target Position Label Color . derive Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Parameters . target Layer Opacity Ġ* Ġselected Target Opacity Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ+ Ġ 1 0 . 0 Ġ/ Ġ 2 Ġ+ Ġ 1 . 5 Ġ* ĠFont . getDefault (). size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMoving Target Type . Test 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x Ġ- Ġ 1 0 . 0 Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ- Ġ 1 0 . 0 Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . text Baseline Ġ= ĠV Pos . TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . moving Target Position Label Color . derive Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Parameters . target Layer Opacity Ġ* Ġselected Target Opacity Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ+ Ġ 1 0 . 0 Ġ/ Ġ 2 Ġ+ Ġ 1 . 5 Ġ* ĠFont . getDefault (). size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMoving Target Type . Test 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . stroke Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x Ġ- Ġ 1 0 . 0 Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ- Ġ 1 0 . 0 Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . text Baseline Ġ= ĠV Pos . TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Ġ= ĠStyles . moving Target Position Label Color . derive Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Parameters . target Layer Opacity Ġ* Ġselected Target Opacity Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgc . fill Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpt . y Ġ+ Ġ 1 0 . 0 Ġ/ Ġ 2 Ġ+ Ġ 1 . 5 Ġ* ĠFont . getDefault (). size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġreset Ġdas hes ĊĠĠĠĠĠĠĠ Ġgc . set Line D ashes (* orig D ashes ) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġbuffer Image : ĠWrit able Image ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġdraw Target Hits ( gc : ĠGraphics Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( display Parameters . target Hit Layer Opacity Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( designer Controller . scenario . moving Targets . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sketch . width Ġ<= Ġ 0 . 0 Ġ|| Ġsketch . height Ġ<= Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= Ġhit Image Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġgc . global Alpha ĊĠĠĠĠĠĠĠ Ġgc . global Alpha Ġ= Ġdisplay Parameters . target Hit Layer Opacity ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrent Width Ġ= Ġ( buffer Image ?. width Ġ?: Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Height Ġ= Ġ( buffer Image ?. height Ġ?: Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( buffer Image Ġ== Ġnull Ġ|| Ġcurrent Width Ġ!= Ġsketch . width Ġ|| Ġcurrent Height Ġ!= Ġsketch . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Image Ġ= ĠWrit able Image ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . width . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . height . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbi Ġ= Ġbuffer Image Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġgc . drawImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSw ing FX Utils . to FX Image ( img , Ġbi ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsketch . height ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġgc . global Alpha Ġ= Ġalpha ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsnapshot () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsnapshot Parameters Ġ= ĠSnapshot Parameters () ĊĠĠĠĠĠĠĠ Ġsnapshot Parameters . fill Ġ= ĠStyles . radar Bg Color ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= Ġcanvas . snapshot ( snapshot Parameters , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġchoose File (" Select Ġsnapshot Ġfile ", ĠarrayOf ( FileChooser . Extension Filter (" Simulation Ġscenario Ġfile ", Ġ"*. png ")), ĠFile Chooser Mode . Save ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ ĠImage IO . write ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSw ing FX Utils . from FX Image ( img , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" png ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Un dock () Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas . stop () ĊĠĠĠĠĠĠĠ Ġhit Calculator ?. cancel () ĊĠĠĠĠĠĠĠ Ġhit Calculator ?. purge () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dock () Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas . start () ĊĠĠĠĠĠĠĠ Ġhit Calculator Ġ= Ġtimer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaemon Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" hit Calculator ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperiod Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Hits () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ