package Ġkotlin mud . generator . service Ċ Ċ import Ġkotlin mud . bio me . type . Bio me Ċ import Ġkotlin mud . generator . type . Layer Ċ import Ġkotlin . random . Random Ċ Ċ class ĠE levation Service ( ĊĠĠĠ Ġprivate Ġval Ġbio me Layer : ĠLayer , ĊĠĠĠ Ġprivate Ġval Ġbio mes : ĠList < Bio me > Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġbuild Layer (): ĠLayer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelevation Layer Ġ= ĠArray ( bio me Layer . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Array ( bio me Layer [ 0 ]. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 1 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġbio me Layer . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġbio me Layer [ y ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbio me Ġ= Ġbio mes [ bio me Layer [ y ][ x ]] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Random . next Double () Ġ< Ġbio me . elevation Change ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Layer [ y ][ x ] Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsmooth Layer ( elevation Layer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġelevation Layer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsmooth Layer ( layer : ĠLayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġlayer . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġlayer [ y ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsmooth Value ( layer , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsmooth Value ( layer : ĠLayer , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbio me Ġ= Ġbio mes [ bio me Layer [ y ][ x ]] ĊĠĠĠĠĠĠĠ Ġif Ġ( Random . next Double () Ġ> Ġbio me . elevation Change ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġy Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġy Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġx Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġx Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter Value Ġ= Ġlayer [ y ][ x ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Value Ġ= Ġif Ġ( isIn Bounds ( x , Ġtop )) Ġlayer [ top ][ x ] Ġelse Ġcenter Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Value Ġ= Ġif Ġ( isIn Bounds ( left , Ġy )) Ġlayer [ y ][ left ] Ġelse Ġcenter Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Value Ġ= Ġif Ġ( isIn Bounds ( right , Ġy )) Ġlayer [ y ][ right ] Ġelse Ġcenter Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Value Ġ= Ġif Ġ( isIn Bounds ( x , Ġbottom )) Ġlayer [ bottom ][ x ] Ġelse Ġcenter Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavg Ġ= Ġ( top Value Ġ+ Ġleft Value Ġ+ Ġright Value Ġ+ Ġbottom Value ) Ġ/ Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( avg Ġ> Ġcenter Value Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer [ y ][ x ] Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( avg Ġ< Ġcenter Value Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer [ y ][ x ] Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisIn Bounds ( x : ĠInt , Ġy : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġy Ġin Ġbio me Layer . indices Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġin Ġbio me Layer [ y ]. indices ĊĠĠĠ Ġ} Ċ } Ċ