package Ġcom . phoenix pen . game . data . bio me Ċ Ċ import ĠWater Key Ċ import Ġcom . phoenix pen . game . ascii . Position Ċ import Ġcom . phoenix pen . game . ascii . Position 3 D Ċ import Ġcom . phoenix pen . game . graphics . Color Ċ import Ġcom . phoenix pen . game . simulation . Simulation Ċ import Ġcom . phoenix pen . game . resources . Resource Provider Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġkotlinx . serialization . map Ċ import Ġjava . util . concurrent . Thread Local Random Ċ Ċ /** Ċ Ġ* ĠA Ġclass Ġaggreg ating Ġdata Ġon Ġhow Ġwater Ġtiles Ġshould Ġappear Ġin Ġthe Ġbio me . Ċ Ġ*/ Ċ class ĠWater DataSet ( resources : ĠResource Provider , Ġcfg : ĠBio me Generation Configuration ) Ċ { ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġwater Ġkey Ġused Ġto Ġtranslate Ġcolo urs Ġin Ġthe Ġbio me Ġtemplate Ġinto Ġactual Ġwater Ġtile Ġtypes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġwater Key : ĠWater Key Ġ= ĠJson . indent ed . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Color . serializer ()). to ( Water Key Entry . serializer ()). map , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . json ( cfg . water Info Id ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġwater Ġtile Ġtemplate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġwater Template : ĠBio me Template Ġ= ĠBio me Template . from Bit maps ( resources , Ġ*( cfg . water Layer Ids . to Typed Array ())) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠActually Ġapply Ġthe Ġdecoration Ġtemplate Ġto Ġthe Ġcurrent Ġsimulation Ġstate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġapply ( simulation : ĠSimulation ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġdimensions Ġof Ġthe Ġlayers ĊĠĠĠĠĠĠĠ Ġval Ġlayer Dimensions Ġ= Ġthis . water Template . dimensions () ĊĊĠĠĠĠĠĠĠ Ġ// ĠFill Ġit Ġwith Ġdata ĊĠĠĠĠĠĠĠ Ġfor (( iy , Ġlayer ) Ġin Ġthis . water Template . layers . with Index ()) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIterate Ġthrough Ġall Ġentries Ġin Ġthe Ġlayer Ġand Ġpopulate Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( ix Ġin Ġ 0 Ġuntil Ġlayer Dimensions . width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( iz Ġin Ġ 0 Ġuntil Ġlayer Dimensions . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBuild Ġabsolute Ġmap Ġposition Ġfor Ġthe Ġpossible Ġtree ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Position Ġ= ĠPosition 3 D ( ix , Ġiy , Ġiz ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġlayer Ġentry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġlayer . entry At ( Position ( ix , Ġiz )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġif Ġits Ġblack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( entry Ġ== ĠColor . black ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTranslate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Entry Ġ= Ġthis . water Key [ entry ] Ġ?: Ġthrow ĠIllegalStateException (" Key Ġentry Ġmissing Ġfor Ġcolor Ġ${ entry . r }:${ entry . g }:${ entry . b }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġwater Ġtile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimulation . water System . add Water Tile ( map Position , Ġkey Entry . type , Ġkey Entry . anim Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }