package Ġde . rob ol ab . common . utils Ċ Ċ import Ġde . rob ol ab . client . renderer . transition . I Interpol atable Ċ import Ġde . rob ol ab . common . planet . Planet Coordinate Ċ import Ġkotlin . math .* Ċ Ċ data Ġclass ĠVector ( ĊĠĠĠ Ġval Ġleft : ĠDouble , ĊĠĠĠ Ġval Ġtop : ĠDouble Ċ ) Ġ: ĠI Interpol atable < Vector > Ġ{ ĊĊĠĠĠ Ġconstructor ( left : ĠNumber , Ġtop : ĠNumber ) Ġ: Ġthis ( left . toDouble (), Ġtop . toDouble ()) ĊĠĠĠ Ġconstructor ( point : ĠPair < Number , ĠNumber >) Ġ: Ġthis ( point . first . toDouble (), Ġpoint . second . toDouble ()) ĊĠĠĠ Ġconstructor ( point : ĠPlan et Coordinate ) Ġ: Ġthis ( point . x . toDouble (), Ġpoint . y . toDouble ()) ĊĊĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠVector ) Ġ= ĠVector ( left Ġ+ Ġother . left , Ġtop Ġ+ Ġother . top ) ĊĠĠĠ Ġoperator Ġfun Ġminus ( other : ĠVector ) Ġ= ĠVector ( left Ġ- Ġother . left , Ġtop Ġ- Ġother . top ) ĊĠĠĠ Ġoperator Ġfun Ġtimes ( factor : ĠNumber ) Ġ= ĠVector ( left Ġ* Ġfactor . toDouble (), Ġtop Ġ* Ġfactor . toDouble ()) ĊĠĠĠ Ġoperator Ġfun Ġtimes ( other : ĠVector ) Ġ= ĠVector ( left Ġ* Ġother . left , Ġtop Ġ* Ġother . top ) ĊĠĠĠ Ġoperator Ġfun Ġdiv ( factor : ĠNumber ) Ġ= ĠVector ( left Ġ/ Ġfactor . toDouble (), Ġtop Ġ/ Ġfactor . toDouble ()) ĊĠĠĠ Ġoperator Ġfun Ġdiv ( other : ĠVector ) Ġ= ĠVector ( left Ġ/ Ġother . left , Ġtop Ġ/ Ġother . top ) ĊĠĠĠ Ġoperator Ġfun Ġunary Minus () Ġ= ĠVector (- left , Ġ- top ) ĊĠĠĠ Ġoperator Ġfun Ġunary Plus () Ġ= Ġthis ĊĠĠĠ Ġoperator Ġfun Ġcompare To ( other : ĠVector ): ĠInt Ġ= Ġmagnitude (). compareTo ( other . magnitude ()) ĊĊĠĠĠ Ġin fix Ġfun Ġdistance To ( other : ĠVector ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġleft Ġ- Ġother . left ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġtop Ġ- Ġother . top ĊĠĠĠĠĠĠĠ Ġreturn Ġsqrt ( l Ġ* Ġl Ġ+ Ġr Ġ* Ġr ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun Ġman h att an Distance To ( other : ĠVector ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġabs ( left Ġ- Ġother . left ) Ġ+ Ġabs ( top Ġ- Ġother . top ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġangle ( other : ĠVector ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġatan 2 ( other . top , Ġother . left ) Ġ- Ġatan 2 ( top , Ġleft ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmid point ( other : ĠVector ) Ġ= ĠVector ( ĊĠĠĠĠĠĠĠ Ġ( left Ġ+ Ġother . left ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠ Ġ( top Ġ+ Ġother . top ) Ġ/ Ġ 2 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġmagnitude () Ġ= Ġsqrt ( left Ġ* Ġleft Ġ+ Ġtop Ġ* Ġtop ) ĊĊĠĠĠ Ġfun Ġnormalize (): ĠVector Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmagnitude Ġ= Ġmagnitude () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( magnitude Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZERO ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ/ Ġmagnitude ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinterpolate ( to Value : ĠVector , Ġprogress : ĠDouble ): ĠVector Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( progress Ġ== Ġ 1 . 0 ) Ġreturn Ġto Value ĊĠĠĠĠĠĠĠ Ġif Ġ( progress Ġ== Ġ 0 . 0 ) Ġreturn Ġthis ĊĊĠĠĠĠĠĠĠ Ġreturn ĠVector ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ* Ġ( 1 Ġ- Ġprogress ) Ġ+ Ġto Value . left Ġ* Ġprogress , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ* Ġ( 1 Ġ- Ġprogress ) Ġ+ Ġto Value . top Ġ* Ġprogress ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinterpolate To Null ( progress : ĠDouble ): ĠVector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġor thogonal () Ġ= ĠVector (- y , Ġx ) ĊĊĠĠĠ Ġfun Ġrotate ( rotation : ĠDouble , Ġorigin : ĠVector Ġ= ĠZERO ): ĠVector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( origin Ġ== ĠZERO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ* Ġcos ( rotation ) Ġ- Ġtop Ġ* Ġsin ( rotation ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ* Ġsin ( rotation ) Ġ+ Ġtop Ġ* Ġcos ( rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġ- Ġorigin ). rotate ( rotation ) Ġ+ Ġorigin ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinverse () Ġ= ĠVector (- x , Ġ- y ) ĊĊĠĠĠ Ġin fix Ġfun Ġdot Product ( other : ĠVector ) Ġ= Ġleft Ġ* Ġother . left Ġ+ Ġtop Ġ* Ġother . top ĊĊĠĠĠ Ġin fix Ġfun Ġproject On to ( basis : ĠVector ): ĠPair < Double , ĠVector > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactor Ġ= Ġ( this Ġdot Product Ġbasis ) Ġ/ Ġ( basis . left Ġ* Ġbasis . left Ġ+ Ġbasis . top Ġ* Ġbasis . top ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfactor Ġto Ġ( basis Ġ* Ġfactor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmax ( other : ĠVector ): ĠVector Ġ= ĠVector ( ĊĠĠĠĠĠĠĠ Ġmax ( left , Ġother . left ), ĊĠĠĠĠĠĠĠ Ġmax ( top , Ġother . top ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġmin ( other : ĠVector ): ĠVector Ġ= ĠVector ( ĊĠĠĠĠĠĠĠ Ġmin ( left , Ġother . left ), ĊĠĠĠĠĠĠĠ Ġmin ( top , Ġother . top ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġrounded () Ġ= ĠVector ( round ( left ), Ġround ( top )) ĊĠĠĠ Ġfun Ġrounded With Multiplier ( multiplier : ĠDouble Ġ= Ġ 1 . 0 ) Ġ= ĊĠĠĠĠĠĠĠ ĠVector ( round ( left Ġ* Ġmultiplier ) Ġ/ Ġmultiplier , Ġround ( top Ġ* Ġmultiplier ) Ġ/ Ġmultiplier ) ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Vector (${ left . toFixed ( 2 )}, Ġ${ top . toFixed ( 2 )}) " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġwidth : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġleft ĊĊĠĠĠ Ġval Ġheight : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtop ĊĊĠĠĠ Ġval Ġx : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġleft ĊĊĠĠĠ Ġval Ġy : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtop ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠZERO Ġ= ĠVector ( 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠONE Ġ= ĠVector ( 1 . 0 , Ġ 1 . 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ type alias ĠDimension Ġ= ĠVector Ċ