package Ġorg . hex works . z ir con . api . data . base Ċ Ċ import Ġorg . hex works . z ir con . api . component . Component Ċ import Ġorg . hex works . z ir con . api . data . Position Ċ import Ġorg . hex works . z ir con . api . data . Position 3 D Ċ import Ġorg . hex works . z ir con . api . data . Size Ċ import Ġorg . hex works . z ir con . api . resource . Tile set Resource Ċ import Ġorg . hex works . z ir con . internal . data . Grid Position Ċ import Ġorg . hex works . z ir con . internal . data . Pixel Position Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġ[ Position ] Ġimplementations . Ċ Ġ*/ Ċ abstract Ġclass ĠBase Position Ġ: ĠPosition Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTell s Ġwhether Ġthis Ġ[ Position ] Ġis Ġ` UNKNOWN `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġis Unknown : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġ=== ĠPosition . unknown () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTell s Ġwhether Ġthis Ġ[ Position ] Ġis Ġnot Ġ` UNKNOWN `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġis Not Unknown : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġ!== ĠPosition . unknown () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTell s Ġwhether Ġthis Ġ[ Position ] Ġhas Ġa Ġnegative Ġcomponent Ġ( x Ġor Ġy ) Ġor Ġnot . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġhas Negative Component : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġx Ġ< Ġ 0 Ġ|| Ġy Ġ< Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTurn s Ġthis Ġ[ Position ] Ġto Ġa Ġ[ Pixel Position ]. ĠHas Ġno Ġeffect Ġif ĊĠĠĠĠ Ġ* Ġ` this ` Ġobject Ġis Ġa Ġ[ Pixel Position ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġto Pixel Position ( tile set : ĠTile set Resource ): ĠPixel Position Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġas ? ĠPixel Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠPixel Position ( x Ġ* Ġtile set . width , Ġy Ġ* Ġtile set . height ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġ[ Position ] Ġwhich Ġis Ġthe Ġsum Ġof Ġ` x ` Ġand Ġ` y ` Ġin Ġboth Ġ[ Position ] s . ĊĠĠĠĠ Ġ* Ġso Ġ` Position ( x Ġ= Ġ 1 , Ġy Ġ= Ġ 1 ). plus ( Position ( x Ġ= Ġ 2 , Ġy Ġ= Ġ 2 )) ` Ġwill Ġbe ĊĠĠĠĠ Ġ* Ġ` Position ( x Ġ= Ġ 3 , Ġy Ġ= Ġ 3 )`. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġoperator Ġfun Ġplus ( other : ĠPosition ): ĠPosition Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Type ( this , Ġother ) ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== ĠPosition . zero ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPixel Position Ġ-> ĠPixel Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġx Ġ+ Ġother . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġy Ġ+ Ġother . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid Position Ġ-> ĠGrid Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġx Ġ+ Ġother . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġy Ġ+ Ġother . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Can 't Ġadd Ġunknown ĠPosition Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġ[ Position ] Ġwhich Ġis Ġthe Ġdifference Ġof Ġ` x ` Ġand Ġ` y ` Ġ Ġboth Ġ[ Position ] s . ĊĠĠĠĠ Ġ* Ġso Ġ` Position ( x Ġ= Ġ 3 , Ġy Ġ= Ġ 3 ). minus ( Position ( x Ġ= Ġ 2 , Ġy Ġ= Ġ 2 )) ` Ġwill Ġbe ĊĠĠĠĠ Ġ* Ġ` Position ( x Ġ= Ġ 1 , Ġy Ġ= Ġ 1 )`. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġoperator Ġfun Ġminus ( other : ĠPosition ): ĠPosition Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Type ( this , Ġother ) ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== ĠPosition . zero ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPixel Position Ġ-> ĠPixel Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġx Ġ- Ġother . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġy Ġ- Ġother . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid Position Ġ-> ĠGrid Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġx Ġ- Ġother . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġy Ġ- Ġother . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Can 't Ġsubtract Ġunknown ĠPosition Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Position ] Ġobject Ġrepresenting Ġa Ġposition Ġwith Ġthe Ġsame Ġy Ġindex Ġas Ġthis Ġbut Ġwith Ġa ĊĠĠĠĠ Ġ* Ġsupplied Ġx Ġindex . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġwith X ( x : ĠInt ): ĠPosition Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . x Ġ== Ġx ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( x Ġ== Ġ 0 Ġ&& Ġy Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPosition . zero () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ( x , Ġy , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Position ] Ġobject Ġrepresenting Ġa Ġposition Ġwith Ġthe Ġsame Ġy Ġindex Ġas Ġthis Ġbut Ġwith Ġa ĊĠĠĠĠ Ġ* Ġsupplied Ġy Ġindex . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġwith Y ( y : ĠInt ): ĠPosition Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . y Ġ== Ġy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( x Ġ== Ġ 0 Ġ&& Ġy Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPosition . zero () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ( x , Ġy , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Position ] Ġobject Ġrepresenting Ġa Ġposition Ġon Ġthe Ġsame Ġy , Ġbut Ġwith Ġa Ġx Ġoffset Ġby Ġa ĊĠĠĠĠ Ġ* Ġsupplied Ġvalue . ĠCalling Ġthis Ġmethod Ġwith Ġdelta Ġ 0 Ġwill Ġreturn This Ġthis , Ġcalling Ġit Ġwith Ġa Ġpositive ĊĠĠĠĠ Ġ* Ġdelta Ġwill Ġreturn This Ġa Ġgrid Ġposition Ġ< code > delta </ code > Ġnumber Ġof Ġx Ġto Ġthe Ġright Ġand ĊĠĠĠĠ Ġ* Ġfor Ġnegative Ġnumbers Ġthe Ġsame Ġto Ġthe Ġleft . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġwith Relative X ( delta : ĠInt ): ĠPosition Ġ= Ġif Ġ( delta Ġ== Ġ 0 ) Ġthis Ġelse Ġwith X ( x Ġ+ Ġdelta ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Position ] Ġobject Ġrepresenting Ġa Ġposition Ġon Ġthe Ġsame Ġx , Ġbut Ġwith Ġa Ġy Ġoffset Ġby Ġa ĊĠĠĠĠ Ġ* Ġsupplied Ġvalue . ĠCalling Ġthis Ġmethod Ġwith Ġdelta Ġ 0 Ġwill Ġreturn This Ġthis , Ġcalling Ġit Ġwith Ġa Ġpositive Ġdelta ĊĠĠĠĠ Ġ* Ġwill Ġreturn This Ġa Ġgrid Ġposition Ġ< code > delta </ code > Ġnumber Ġof Ġy Ġto Ġthe Ġdown Ġand Ġfor Ġnegative ĊĠĠĠĠ Ġ* Ġnumbers Ġthe Ġsame Ġup . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġwith Relative Y ( delta : ĠInt ): ĠPosition Ġ= Ġif Ġ( delta Ġ== Ġ 0 ) Ġthis Ġelse Ġwith Y ( y Ġ+ Ġdelta ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Position ] Ġobject Ġthat Ġis Ġtranslated Ġby Ġan Ġamount Ġof Ġx Ġand Ġy Ġspecified Ġby Ġanother ĊĠĠĠĠ Ġ* Ġ[ Position ]. ĠSame Ġas Ġcalling Ġ` with Relative Y ( translate . getY Length ()). with Relative X ( translate . getX Length ()) `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġwith Relative ( translate : ĠPosition ): ĠPosition Ġ= Ġwith Relative Y ( translate . y ). with Relative X ( translate . x ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġthis Ġ[ Position ] Ġto Ġa Ġ[ Size ] Ġso Ġif ĊĠĠĠĠ Ġ* Ġthis Ġposition Ġis ĠPosition ( x = 2 , Ġy = 3 ) Ġit Ġwill Ġbecome ĊĠĠĠĠ Ġ* ĠSize ( x = 2 , Ġy = 3 ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġto Size (): ĠSize Ġ= ĠSize . create ( x , Ġy ) ĊĊĠĠĠ Ġoverride Ġfun Ġto Position 3 D ( z : ĠInt ): ĠPosition 3 D Ġ= Ġthis . to 3 D Position ( z ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Position ] Ġwhich Ġis Ġrelative Ġto Ġthe Ġtop Ġof Ġthe Ġgiven Ġ[ Component ]. ĊĠĠĠĠ Ġ* ĠThe Ġx Ġcoordinate Ġis Ġused Ġto Ġshift Ġright ĊĠĠĠĠ Ġ* ĠThe Ġy Ġcoordinate Ġis Ġused Ġto Ġshift Ġup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġrelative To Top Of ( component : ĠComponent ): ĠPosition Ġ= Ġcomponent . position . let Ġ{ Ġ( comp X , Ġcomp Y ) Ġ-> ĊĠĠĠĠĠĠĠ ĠPosition . create ( comp X Ġ+ Ġx , Ġmax Of ( comp Y Ġ- Ġy , Ġ 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Position ] Ġwhich Ġis Ġrelative Ġto Ġthe Ġright Ġof Ġthe Ġgiven Ġ[ Component ]. ĊĠĠĠĠ Ġ* ĠThe Ġx Ġcoordinate Ġis Ġused Ġto Ġshift Ġright ĊĠĠĠĠ Ġ* ĠThe Ġy Ġcoordinate Ġis Ġused Ġto Ġshift Ġdown ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġrelative To Right Of ( component : ĠComponent ): ĠPosition Ġ= Ġcomponent . position . let Ġ{ Ġ( comp X , Ġcomp Y ) Ġ-> ĊĠĠĠĠĠĠĠ ĠPosition . create ( comp X Ġ+ Ġcomponent . width Ġ+ Ġx , Ġcomp Y Ġ+ Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Position ] Ġwhich Ġis Ġrelative Ġto Ġthe Ġbottom Ġof Ġthe Ġgiven Ġ[ Component ]. ĊĠĠĠĠ Ġ* ĠThe Ġx Ġcoordinate Ġis Ġused Ġto Ġshift Ġright ĊĠĠĠĠ Ġ* ĠThe Ġy Ġcoordinate Ġis Ġused Ġto Ġshift Ġdown ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġrelative To Bottom Of ( component : ĠComponent ) Ġ= Ġcomponent . position . let Ġ{ Ġ( comp X , Ġcomp Y ) Ġ-> ĊĠĠĠĠĠĠĠ ĠPosition . create ( comp X Ġ+ Ġx , Ġcomp Y Ġ+ Ġcomponent . size . height Ġ+ Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Position ] Ġwhich Ġis Ġrelative Ġto Ġthe Ġtop Ġleft Ġof Ġthe Ġgiven Ġ[ Component ]. ĊĠĠĠĠ Ġ* ĠThe Ġx Ġcoordinate Ġis Ġused Ġto Ġshift Ġleft ĊĠĠĠĠ Ġ* ĠThe Ġy Ġcoordinate Ġis Ġused Ġto Ġshift Ġdown ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġrelative To Left Of ( component : ĠComponent ) Ġ= Ġcomponent . position . let Ġ{ Ġ( comp X , Ġcomp Y ) Ġ-> ĊĠĠĠĠĠĠĠ ĠPosition . create ( max Of ( comp X Ġ- Ġx , Ġ 0 ), Ġcomp Y Ġ+ Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠPosition ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Type ( this , Ġother ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ> Ġother . y Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ== Ġother . y Ġ&& Ġx Ġ> Ġother . x Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ== Ġother . y Ġ&& Ġx Ġ== Ġother . x Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Position ] Ġof Ġthe Ġsame Ġtype Ġwith Ġthe Ġgiven Ġ` x ` Ġand Ġ` y ` Ġas Ġthe Ġgiven Ġ` pos `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate ( x : ĠInt , Ġy : ĠInt , Ġpos : ĠPosition ): ĠPosition Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid Position Ġ-> ĠGrid Position ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPixel Position Ġ-> ĠPixel Position ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Unsupported ĠPosition Ġtype : Ġ${ pos :: class . simple Name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Type ( pos 0 : ĠPosition , Ġpos 1 : ĠPosition ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( pos 0 :: class Ġ== Ġpos 1 :: class ) ĊĠĠĠ Ġ} Ċ } Ċ