package Ġexternal Ċ Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġutil . Random Boolean Ċ import Ġutil . Random Range Ċ Ċ /** Ċ Ġ* ĠT we aking Ġgeneration Ċ Ġ*/ Ċ @ Serializable Ċ class ĠConfig ( ĊĠĠĠ Ġ// Ġpath Ġto Ġexport ĊĠĠĠ Ġval Ġexport Path : ĠString Ġ= Ġ" exported . h mm ", ĊĠĠĠ Ġval Ġmap Size : ĠInt Ġ= Ġ 6 4 , ĊĊĠĠĠ Ġ// Ġspawn Ġwood Ġand Ġo re Ġmin es Ġfirst ĊĠĠĠ Ġval Ġpriorit ize Base M ines : ĠRandom Boolean Ġ= ĠRandom Boolean ( 1 ), ĊĠĠĠ Ġ// Ġguard Ġlevel Ġfor Ġconnections Ġwith Ġguard Level =- 2 ĊĠĠĠ Ġval Ġconnection Guard Level : ĠRandom Range Ġ= ĠRandom Range ( 1 , Ġ 3 ), ĊĠĠĠ Ġ// Ġguard Ġlevel Ġfor Ġmin es Ġwith Ġguard Level =- 2 ĊĠĠĠ Ġval Ġmine Guard Level : ĠRandom Range Ġ= ĠRandom Range (- 1 , Ġ- 1 ), ĊĠĠĠ Ġ// Ġwood Ġand Ġo re Ġgu ards Ġhave Ġdecrease d Ġguard Ġlevel ĊĠĠĠ Ġval Ġdecrease Guard Level At Base Mine By One : ĠRandom Boolean Ġ= ĠRandom Boolean ( 1 ), ĊĊĠĠĠ Ġval Ġspawn Hero At Castle : ĠRandom Boolean Ġ= ĠRandom Boolean (- 1 ), ĊĊĠĠĠ Ġval Ġconnect Teleport With Road : ĠRandom Boolean Ġ= ĠRandom Boolean (- 1 ), ĊĠĠĠ Ġ// Ġchance Ġof Ġresource Ġpile , Ġcamp fire , Ġman a Ġcr ystal Ġand Ġartifact Ġrespect fully ĊĠĠĠ Ġval Ġtre asure Chance : ĠList < Double > Ġ= ĠlistOf ( 0 . 7 2 , Ġ 0 . 1 5 , Ġ 0 . 1 , Ġ 0 . 0 3 ), ĊĠĠĠ Ġ// Ġcost Ġof Ġresource Ġpile , Ġcamp fire , Ġman a Ġcr ystal Ġand Ġartifact Ġsubtract ed Ġfrom Ġzone Ġrich ness ĊĠĠĠ Ġval Ġtre asure Cost : ĠList < Int > Ġ= ĠlistOf ( 1 , Ġ 2 , Ġ 3 , Ġ 5 ), ĊĊĠĠĠ Ġ// Ġamount Ġof Ġgu ards Ġof Ġlevel Ġ 0 Ġto Ġ 6 ĊĠĠĠ Ġval Ġguard Count : ĠList < Random Range > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠRandom Range ( 1 , Ġ 1 0 0 ), ĊĠĠĠĠĠĠĠ ĠRandom Range ( 1 , Ġ 1 0 0 ), ĊĠĠĠĠĠĠĠ ĠRandom Range ( 1 , Ġ 1 0 0 ), ĊĠĠĠĠĠĠĠ ĠRandom Range ( 1 , Ġ 1 0 0 ), ĊĠĠĠĠĠĠĠ ĠRandom Range ( 1 , Ġ 1 0 0 ), ĊĠĠĠĠĠĠĠ ĠRandom Range ( 1 , Ġ 1 0 0 ), ĊĠĠĠĠĠĠĠ ĠRandom Range ( 1 , Ġ 1 0 0 ) ĊĠĠĠ Ġ), ĊĠĠĠ Ġ// Ġexport Ġmaps Ġautomatically Ġafter Ġgeneration ĊĠĠĠ Ġval Ġauto Export : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġ// Ġgenerate Ġall Ġmap ĊĠĠĠ Ġval Ġgenerate All : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġ// Ġadd Ġro ads Ġto Ġmap ĊĠĠĠ Ġval Ġadd Ro ads : ĠBoolean Ġ= Ġtrue Ċ ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCheck Ġthat Ġconfig Ġis Ġcorrect ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġvalidate ( config : ĠConfig ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! listOf ( 3 2 , Ġ 6 4 , Ġ 1 2 8 , Ġ 2 5 6 ). contains ( config . map Size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Map Ġsize Ġcan Ġbe Ġeither Ġ 3 2 , Ġ 6 4 , Ġ 1 2 8 Ġor Ġ 2 5 6 . ĠGot Ġ${ config . map Size }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġguard Levels Ġ= ĠlistOf ( config . mine Guard Level , Ġconfig . connection Guard Level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Ġin Ġguard Levels ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( level . value Ġ! in Ġ(- 1 .. 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Guard Ġlevel Ġcan Ġbe Ġin Ġrange Ġ- 1 .. 6 . ĠGot Ġ${ level . value }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . tre asure Cost . size Ġ!= Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Tre asure Ġcost Ġparam Ġshould Ġcontain Ġ 4 Ġelements . ĠGot Ġ${ config . tre asure Cost . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . tre asure Chance . size Ġ!= Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Tre asure Ġchance Ġparam Ġshould Ġcontain Ġ 4 Ġelements . ĠGot Ġ${ config . tre asure Chance . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . guard Count . size Ġ!= Ġ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Guard Ġcount Ġparam Ġshould Ġcontain Ġ 7 Ġelements . ĠGot Ġ${ config . guard Count . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Ġin Ġconfig . guard Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( level . value Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Guard Ġcount Ġis Ġnegative ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ