package Ġand rew . studio . com . ul trab udd ym v vm . view Ċ Ċ import Ġand rew . studio . com . ul trab udd ym v vm . R Ċ import Ġand rew . studio . com . ul trab udd ym v vm . data . entity . Point Ċ import Ġand rew . studio . com . ul trab udd ym v vm . data . entity . Polygon Ċ import Ġand rew . studio . com . ul trab udd ym v vm . ui . map . Ul tra Map ViewModel . Robot Position Ċ import Ġand rew . studio . com . ul trab udd ym v vm . view . Robot Ground . Directions . EAST Ċ import Ġand rew . studio . com . ul trab udd ym v vm . view . Robot Ground . Directions . NORTH Ċ import Ġand rew . studio . com . ul trab udd ym v vm . view . Robot Ground . Directions . SO UTH Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠRobot Ground ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: ĠView ( context , Ġattrs ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġpaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINNER _ DOT _ RADIUS Ġ= Ġ 2 0 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠOUT ER _ DOT _ RADIUS Ġ= Ġ 3 0 f ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON E _ HEIGHT Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON E _ RADIUS Ġ= Ġ 2 0 Ġ+ ĠINNER _ DOT _ RADIUS ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠH OR Z _ OFFSET Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠV ERT _ OFFSET Ġ= Ġ 1 6 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ GROUND _ WIDTH Ġ= Ġ 8 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ GROUND _ HEIGHT Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ POSITION _ X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ POSITION _ Y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ DIRECTION Ġ= ĠNOR TH ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ BORDER _ WIDTH Ġ= Ġ 4 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Width : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwidth Ġ- Ġ 2 Ġ* ĠV ERT _ OFFSET ĊĠĠĠ Ġprivate Ġval Ġm Height : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġheight Ġ- Ġ 2 Ġ* ĠH OR Z _ OFFSET ĊĊĠĠĠ Ġprivate Ġval Ġunit : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth On Height Ratio Ġ= Ġm Width . toFloat () Ġ/ Ġm Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Width On Height Ratio Ġ= Ġground Width . toFloat () Ġ/ Ġground Height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Width On Height Ratio Ġ> Ġwidth On Height Ratio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Width . toFloat () Ġ/ Ġground Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Height . toFloat () Ġ/ Ġground Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Color From Id ( id : ĠInt ) Ġ= ĠResources Compat . getColor ( resources , Ġid , Ġnull ) ĊĊĠĠĠ Ġ// ĠTransform Ġint Ġcoord ination Ġvalues Ġto Ġpixel Ġvalue Ġand Ġfit Ġthe Ġscreen ĊĠĠĠ Ġprivate Ġfun ĠInt . to Ul tra Unit (): ĠFloat Ġ= Ġthis Ġ* Ġunit ĊĊĠĠĠ Ġprivate Ġval Ġground Color Ġ= Ġget Color From Id ( R . color . light Blue ) ĊĠĠĠ Ġprivate Ġval Ġground Stroke Color Ġ= Ġget Color From Id ( R . color . dark Blue ) ĊĠĠĠ Ġprivate Ġval Ġobstacle Color Ġ= Ġget Color From Id ( R . color . dark Sky Blue ) ĊĠĠĠ Ġprivate Ġval Ġwhite Ġ= Ġget Color From Id ( R . color . white ) ĊĠĠĠ Ġprivate Ġval Ġrobot Dot Inner Color Ġ= Ġget Color From Id ( R . color . red ) ĊĠĠĠ Ġprivate Ġval Ġrobot Dot Outer Color Ġ= Ġget Color From Id ( R . color . clear Light Red ) ĊĠĠĠ Ġprivate Ġval Ġrobot Direction Color Ġ= Ġget Color From Id ( R . color . light Red ) ĊĠĠĠ Ġprivate Ġval Ġrobot Direction Color Transparent Ġ= Ġget Color From Id ( R . color . transparent ) ĊĠĠĠ Ġprivate Ġval Ġtrack Color Ġ= Ġget Color From Id ( R . color . orange ) ĊĊĠĠĠ Ġvar Ġob stacles : ĠList < Polygon > Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠ Ġset Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġrobot Position Ġ= ĠRobot Position ( 3 * 4 8 , Ġ 2 * 4 8 , ĠNOR TH ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Track . add ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġvalue . direction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġposition Track Ġ= Ġmutable ListOf < Robot Position >() ĊĊĠĠĠ Ġvar ĠborderWidth Ġ= ĠDEFAULT _ BORDER _ WIDTH ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġground Width Ġ= ĠDEFAULT _ GROUND _ WIDTH ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġground Height Ġ= ĠDEFAULT _ GROUND _ HEIGHT ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdirection Ġ= ĠDEFAULT _ DIRECTION ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Attributes ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Attributes ( attrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Robot Ground , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġdirection Ġ= Ġtyped Array . getInt ( R . style able . Robot Ground _ direction , ĠNOR TH . toInt ()). to Long () ĊĠĠĠĠĠĠĠ Ġground Width Ġ= Ġtyped Array . getInt ( R . style able . Robot Ground _ ground Width , ĠDEFAULT _ GROUND _ WIDTH ) ĊĠĠĠĠĠĠĠ Ġground Height Ġ= Ġtyped Array . getInt ( R . style able . Robot Ground _ ground Height , ĠDEFAULT _ GROUND _ HEIGHT ) ĊĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠDirection s Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠE AST Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠW EST Ġ= Ġ 3 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS OUT H Ġ= Ġ 2 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOR TH Ġ= Ġ 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTranslate Ġthe Ġcanvas Ġto ĠDes cart es ĠCoord ination Ġsystem Ġand Ġcenter Ġvertical Ġthe Ġground ĊĠĠĠĠĠĠĠ Ġcanvas . translate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH OR Z _ OFFSET . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Height . toFloat () Ġ- Ġground Height . to Ul tra Unit ()) Ġ/ Ġ 2 Ġ+ Ġground Height . to Ul tra Unit () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcanvas . scale ( 1 f , Ġ- 1 f ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDo Ġthe Ġdraw ings ĊĠĠĠĠĠĠĠ Ġdraw Ground ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Ob stacles ( canvas ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġposition Track . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Track ( canvas , Ġtrack Color , Ġposition Track [ i ], Ġposition Track [ i + 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdraw Robot ( canvas ) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Ob stacles ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( poly : ĠPolygon Ġin Ġob stacles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Polygon ( canvas , Ġpoly . points , Ġobstacle Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Polygon ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġpoints : ĠList < Point >, ĊĠĠĠĠĠĠĠ Ġcolor : ĠInt , ĊĠĠĠĠĠĠĠ Ġstroke Color : ĠInt Ġ= ĠColor . DK GRAY , ĊĠĠĠĠĠĠĠ Ġis Filled : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġis St rok ed : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġis Closed : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġif Ġ( points . size Ġ<= Ġ 2 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( points [ 0 ]. x . to Ul tra Unit (), Ġpoints [ 0 ]. y . to Ul tra Unit ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġpoints . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( points [ i ]. x . to Ul tra Unit (), Ġpoints [ i ]. y . to Ul tra Unit ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Filled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is St rok ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= ĠborderWidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġstroke Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdraw Robot ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Unit Ġ= Ġrobot Position . x . to Ul tra Unit () ĊĠĠĠĠĠĠĠ Ġval Ġy Unit Ġ= Ġrobot Position . y . to Ul tra Unit () ĊĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġrobot Dot Outer Color ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x Unit , Ġy Unit , ĠOUT ER _ DOT _ RADIUS , Ġpaint ) ĊĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġrobot Dot Inner Color ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĊĠĠĠĠĠĠĠ Ġval Ġdirection Indicator : ĠPath Ġ= Ġwhen Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNOR TH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( x Unit Ġ- ĠINNER _ DOT _ RADIUS , Ġy Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ+ ĠINNER _ DOT _ RADIUS , Ġy Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ+ ĠCON E _ RADIUS , Ġy Unit Ġ+ ĠCON E _ HEIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ- ĠCON E _ RADIUS , Ġy Unit Ġ+ ĠCON E _ HEIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS OUT H Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( x Unit Ġ- ĠINNER _ DOT _ RADIUS , Ġy Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ+ ĠINNER _ DOT _ RADIUS , Ġy Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ+ ĠCON E _ RADIUS , Ġy Unit Ġ- ĠCON E _ HEIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ- ĠCON E _ RADIUS , Ġy Unit Ġ- ĠCON E _ HEIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE AST Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( x Unit , Ġy Unit Ġ+ ĠINNER _ DOT _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit , Ġy Unit Ġ- ĠINNER _ DOT _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ+ ĠCON E _ HEIGHT , Ġy Unit Ġ- ĠCON E _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ+ ĠCON E _ HEIGHT , Ġy Unit Ġ+ ĠCON E _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( x Unit , Ġy Unit Ġ+ ĠINNER _ DOT _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit , Ġy Unit Ġ- ĠINNER _ DOT _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ- ĠCON E _ HEIGHT , Ġy Unit Ġ- ĠCON E _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( x Unit Ġ- ĠCON E _ HEIGHT , Ġy Unit Ġ+ ĠCON E _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpaint . shader Ġ= Ġwhen Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNOR TH Ġ-> ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Unit Ġ+ ĠCON E _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Direction Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Direction Color Transparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . MIR ROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE AST Ġ-> ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Unit Ġ+ ĠCON E _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Direction Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Direction Color Transparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . MIR ROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS OUT H Ġ-> ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Unit Ġ- ĠCON E _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Direction Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Direction Color Transparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . MIR ROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Unit Ġ- ĠCON E _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Direction Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Direction Color Transparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . MIR ROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( direction Indicator , Ġpaint ) ĊĊĠĠĠĠĠĠĠ Ġpaint . reset () ĊĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġrobot Dot Inner Color ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x Unit , Ġy Unit , ĠINNER _ DOT _ RADIUS , Ġpaint ) ĊĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġwhite ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= ĠborderWidth ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x Unit , Ġy Unit , ĠINNER _ DOT _ RADIUS , Ġpaint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Ground ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġground Color ĊĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= Ġget Ground Rect ( ground Width , Ġground Height ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( rect , Ġpaint ) ĊĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġground Stroke Color ĊĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= ĠborderWidth ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . ST RO KE ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( get Ground Rect ( ground Width , Ġground Height ), Ġpaint ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Track ( canvas : ĠCanvas , Ġcolor : ĠInt , Ġstart Point : ĠRobot Position , Ġendpoint : ĠRobot Position ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= ĠborderWidth Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( start Point . x . to Ul tra Unit (), Ġstart Point . y . to Ul tra Unit (), Ġ 5 f , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Line ( start Point . x . to Ul tra Unit (), Ġstart Point . y . to Ul tra Unit (), Ġendpoint . x . to Ul tra Unit (), Ġendpoint . y . to Ul tra Unit (), Ġpaint ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( endpoint . x . to Ul tra Unit (), Ġendpoint . y . to Ul tra Unit (), Ġ 5 f , Ġpaint ) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġprivate Ġfun Ġdraw Filled Polygon ( canvas : ĠCanvas , Ġpoly : ĠList < >) ĊĊĠĠĠ Ġprivate Ġfun Ġget Ground Rect ( ground Width : ĠInt , Ġground Height : ĠInt ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth On Height Ratio Ġ= Ġm Width . toFloat () Ġ/ Ġm Height ĊĠĠĠĠĠĠĠ Ġval Ġm Width On Height Ratio Ġ= Ġground Width . toFloat () Ġ/ Ġground Height ĊĊĠĠĠĠĠĠĠ Ġval Ġm Right : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġm Bottom : ĠInt ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Width On Height Ratio Ġ> Ġwidth On Height Ratio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Right Ġ= Ġm Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom Ġ= Ġ( m Right Ġ/ Ġm Width On Height Ratio ). round ToInt () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom Ġ= Ġm Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Right Ġ= Ġ( m Bottom Ġ* Ġm Width On Height Ratio ). round ToInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRect ( 0 , Ġ 0 , Ġm Right , Ġm Bottom ) ĊĠĠĠ Ġ} Ċ }