package Ġcom . dark gravity . k hex grid . map Ċ Ċ import Ġcom . dark gravity . k hex grid . math . Cube Coordinate Ċ import Ġcom . dark gravity . k hex grid . math . Matrix 2 Ċ import Ġk tx . math . Immutable Vector 2 Ċ import Ġkotlin . math . sqrt Ċ Ċ /** Ċ Ġ* Ġ@ author ĠDan ĠMc C abe Ċ Ġ*/ Ċ sealed Ġclass ĠHex ag onal Orientation ( ĊĠĠĠ Ġval Ġforward : ĠMatrix 2 , ĊĠĠĠ Ġval Ġbackward : ĠMatrix 2 , ĊĠĠĠ Ġval Ġstart Angle : ĠFloat , ĊĠĠĠ Ġval Ġsize Multiplier : ĠImmutable Vector 2 , ĊĠĠĠ Ġval Ġpacked Multiplier : ĠImmutable Vector 2 Ċ ) Ġ{ ĊĠĠĠ Ġabstract Ġval Ġid : ĠString ĊĊĠĠĠ Ġobject ĠPoint y Top Ġ: ĠHex ag onal Orientation ( ĊĠĠĠĠĠĠĠ Ġforward Ġ= ĠMatrix 2 ( sqrt ( 3 f ), Ġsqrt ( 3 f ) Ġ/ Ġ 2 . 0 f , Ġ 0 . 0 f , Ġ 3 . 0 f Ġ/ Ġ 2 . 0 f ), ĊĠĠĠĠĠĠĠ Ġbackward Ġ= ĠMatrix 2 ( sqrt ( 3 f ) Ġ/ Ġ 3 . 0 f , Ġ- 1 . 0 f Ġ/ Ġ 3 . 0 f , Ġ 0 . 0 f , Ġ 2 . 0 f Ġ/ Ġ 3 . 0 f ), ĊĠĠĠĠĠĠĠ Ġstart Angle Ġ= Ġ 0 . 5 f , ĊĠĠĠĠĠĠĠ Ġsize Multiplier Ġ= ĠImmutable Vector 2 ( sqrt ( 3 f ), Ġ 2 f ), ĊĠĠĠĠĠĠĠ Ġpacked Multiplier Ġ= ĠImmutable Vector 2 ( 1 f , Ġ 3 f Ġ/ Ġ 4 f ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġid Ġ= Ġ" point y - top " ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ NE Ġ= ĠCube Coordinate . DIRECTION S [ 0 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ E Ġ= ĠCube Coordinate . DIRECTION S [ 1 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ SE Ġ= ĠCube Coordinate . DIRECTION S [ 2 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ SW Ġ= ĠCube Coordinate . DIRECTION S [ 3 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ W Ġ= ĠCube Coordinate . DIRECTION S [ 4 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ NW Ġ= ĠCube Coordinate . DIRECTION S [ 5 ] ĊĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ NE Ġ= ĠCube Coordinate . DIAG ON ALS [ 0 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ SE Ġ= ĠCube Coordinate . DIAG ON ALS [ 1 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ S Ġ= ĠCube Coordinate . DIAG ON ALS [ 2 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ SW Ġ= ĠCube Coordinate . DIAG ON ALS [ 3 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ NW Ġ= ĠCube Coordinate . DIAG ON ALS [ 4 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ N Ġ= ĠCube Coordinate . DIAG ON ALS [ 5 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠFlat Top Ġ: ĠHex ag onal Orientation ( ĊĠĠĠĠĠĠĠ Ġforward Ġ= ĠMatrix 2 ( 3 . 0 f Ġ/ Ġ 2 . 0 f , Ġ 0 . 0 f , Ġsqrt ( 3 f ) Ġ/ Ġ 2 . 0 f , Ġsqrt ( 3 f )), ĊĠĠĠĠĠĠĠ Ġbackward Ġ= ĠMatrix 2 ( 2 . 0 f Ġ/ Ġ 3 . 0 f , Ġ 0 . 0 f , Ġ- 1 . 0 f Ġ/ Ġ 3 . 0 f , Ġsqrt ( 3 f ) Ġ/ Ġ 3 . 0 f ), ĊĠĠĠĠĠĠĠ Ġstart Angle Ġ= Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġsize Multiplier Ġ= ĠImmutable Vector 2 ( 2 f , Ġsqrt ( 3 f )), ĊĠĠĠĠĠĠĠ Ġpacked Multiplier Ġ= ĠImmutable Vector 2 ( 3 f Ġ/ Ġ 4 f , Ġ 1 f ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġid Ġ= Ġ" flat - top " ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ NE Ġ= ĠCube Coordinate . DIRECTION S [ 0 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ SE Ġ= ĠCube Coordinate . DIRECTION S [ 1 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ S Ġ= ĠCube Coordinate . DIRECTION S [ 2 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ SW Ġ= ĠCube Coordinate . DIRECTION S [ 3 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ NW Ġ= ĠCube Coordinate . DIRECTION S [ 4 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION _ N Ġ= ĠCube Coordinate . DIRECTION S [ 5 ] ĊĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ E Ġ= ĠCube Coordinate . DIAG ON ALS [ 0 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ SE Ġ= ĠCube Coordinate . DIAG ON ALS [ 1 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ SW Ġ= ĠCube Coordinate . DIAG ON ALS [ 2 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ W Ġ= ĠCube Coordinate . DIAG ON ALS [ 3 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ NW Ġ= ĠCube Coordinate . DIAG ON ALS [ 4 ] ĊĠĠĠĠĠĠĠ Ġval ĠDI AG ON AL _ NE Ġ= ĠCube Coordinate . DIAG ON ALS [ 5 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Id ( id : ĠString ): ĠHex ag onal Orientation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPoint y Top . id Ġ-> ĠPoint y Top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlat Top . id Ġ-> ĠFlat Top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid Ġorientation : Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }