package Ġde . rob ol ab . common . planet . test Ċ Ċ import Ġde . rob ol ab . common . planet . Planet Ċ import Ġde . rob ol ab . common . planet . Planet Point Ċ import Ġde . rob ol ab . common . planet . utils . I Planet Value Ċ import Ġde . rob ol ab . common . utils . Vector Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Transient Ċ import Ġkotlin . math . round To Long Ċ Ċ @ Serializable Ċ sealed Ġclass ĠPlan et Test Goal Ġ: ĠI Planet Value < Planet Test Goal > Ġ{ ĊĊĊĠĠĠ Ġabstract Ġval Ġpoint : ĠPlan et Point ? ĊĊĠĠĠ Ġabstract Ġval Ġtype : ĠGoal Type ĊĊĠĠĠ Ġenum Ġclass ĠGoal Type { ĊĠĠĠĠĠĠĠ ĠExplo re , ĊĠĠĠĠĠĠĠ ĠExplo re Coordinate , ĊĠĠĠĠĠĠĠ ĠTarget ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġ@ Serial Name (" EXP LO RE ") ĊĠĠĠ Ġobject ĠExplo re Ġ: ĠPlan et Test Goal () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġpoint : ĠPlan et Point ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Transient ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype Ġ= ĠGoal Type . Explore ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġ@ Serial Name (" EXP LO RE _ COORD IN ATE ") ĊĠĠĠ Ġdata Ġclass ĠExplo re Coordinate ( ĊĠĠĠĠĠĠĠ Ġval Ġx : ĠLong , ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠLong , ĊĠĠĠ Ġ) Ġ: ĠPlan et Test Goal () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconstructor ( point : ĠPlan et Point ): Ġthis ( point . x , Ġpoint . y ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġpoint : ĠPlan et Point ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠPlan et Point ( x , Ġy ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtranslate ( delta : ĠPlan et Point ): ĠPlan et Test Goal Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector ( x , Ġy ). plus ( delta . point ). let Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġp . x . round To Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġp . x . round To Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrotate ( direction : ĠPlan et . Rotate Direction , Ġorigin : ĠPlan et Point ): ĠPlan et Test Goal Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector ( x , Ġy ). rotate ( direction . angle , Ġorigin . point ). let Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġp . x . round To Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġp . x . round To Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Transient ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype Ġ= ĠGoal Type . Explore Coordinate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġ@ Serial Name (" TARGET ") ĊĠĠĠ Ġdata Ġclass ĠTarget ( ĊĠĠĠĠĠĠĠ Ġval Ġx : ĠLong , ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠLong , ĊĠĠĠ Ġ) Ġ: ĠPlan et Test Goal () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconstructor ( point : ĠPlan et Point ): Ġthis ( point . x , Ġpoint . y ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġpoint : ĠPlan et Point ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠPlan et Point ( x , Ġy ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtranslate ( delta : ĠPlan et Point ): ĠPlan et Test Goal Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector ( x , Ġy ). plus ( delta . point ). let Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġp . x . round To Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġp . x . round To Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrotate ( direction : ĠPlan et . Rotate Direction , Ġorigin : ĠPlan et Point ): ĠPlan et Test Goal Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector ( x , Ġy ). rotate ( direction . angle , Ġorigin . point ). let Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġp . x . round To Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġp . x . round To Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ@ Transient ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype Ġ= ĠGoal Type . Target ĊĠĠĠ Ġ} Ċ } Ċ