package Ġcomponents Ċ Ċ import Ġexternal . Template Ċ import Ġsteps . map .` object `. Building Ċ import Ġsteps . map .` object `. Castle Ċ import Ġsteps . map .` object `. Teleport Ċ import Ġsteps . map .` object `. Mine Ċ import Ġutil . Constants Ċ Ċ /** Ċ Ġ* ĠS izes Ġare Ġcomputed Ġproportion ally Ġto Ġeach Ġother . Ċ Ġ* Ġcomponents . Zone Ġplacement Ġstarts Ġwith Ġ 0 Ġindex - zone . Ċ Ġ*/ Ċ class ĠZone Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġt Zone : ĠTemplate . Template Zone , ĊĠĠĠ Ġvar Ġcenter : ĠPair < Int , ĠInt >, ĊĠĠĠ Ġval Ġconnections : ĠMutable List < Connection > Ġ= Ġmutable ListOf () Ċ ) Ġ{ ĊĠĠĠ Ġval Ġmin es Ġ= Ġmutable ListOf < Mine >() ĊĠĠĠ Ġval Ġcast les Ġ= Ġmutable ListOf < Castle >() ĊĠĠĠ Ġval Ġedge Ġ= Ġmutable ListOf < Cell >() ĊĠĠĠ Ġval Ġtele ports Ġ= Ġmutable ListOf < Teleport >() ĊĊĠĠĠ Ġval Ġentr ances ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġconnections . flatMap Ġ{ Ġit . entr ances Ġ}. filter Ġ{ Ġit . get Entr ance (). zone Ġ== Ġthis Ġ} ĊĠĠĠ Ġval Ġcenter Cell : ĠCell ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmatrix Map . matrix [ center . first , Ġcenter . second ] ĊĠĠĠ Ġval Ġindex ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġt Zone . index ĊĠĠĠ Ġval Ġtype ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġt Zone . surface ĊĠĠĠ Ġval Ġbuild ings : ĠList < Building > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmin es Ġ+ Ġcast les Ġ+ Ġtele ports Ġ+ Ġentr ances ĊĠĠĠ Ġval Ġrich ness : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġt Zone . rich ness ĊĊĠĠĠ Ġlateinit Ġvar Ġmatrix Map : ĠMatrix Map ĊĠĠĠ Ġval Ġcells Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġmatrix Map . matrix . filter Ġ{ Ġit . zone Ġ== Ġthis Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġused Ġto Ġsee ĊĠĠĠ Ġvar Ġcell Size : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġget Nullable Connection ( zone : ĠZone ): ĠConnection ? Ġ= ĊĠĠĠĠĠĠĠ Ġconnections . find Ġ{ Ġit . z 1 . index Ġ== Ġzone . index Ġ|| Ġit . z 2 . index Ġ== Ġzone . index Ġ} ĊĊĠĠĠ Ġfun ĠgetRandom Empty Cell (): ĠCell Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cells . none Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . cell Type Ġ== ĠCell Type . EMPTY Ġ&& Ġ! build ings . map Ġ{ Ġbuilding Ġ-> Ġbuilding . get Entr ance () Ġ}. contains ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCell ( Pair (- 1 , Ġ- 1 ), Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcells . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . cell Type Ġ== ĠCell Type . EMPTY Ġ&& Ġ! build ings . map Ġ{ Ġbuilding Ġ-> Ġbuilding . get Entr ance () Ġ}. contains ( it ) ĊĠĠĠĠĠĠĠ Ġ}. random ( Constants . rnd ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ"$ index , Ġ$ type " Ċ } ĊĊ