package Ġfr . o 8 0 . so ul game . scenes . level . loading Ċ Ċ import Ġfr . o 8 0 . so ul game . scenes . level . level . Block Ċ import Ġfr . o 8 0 . so ul game . scenes . level . level . Door Ċ import Ġfr . o 8 0 . so ul game . scenes . level . level . Point Ċ import Ġfr . o 8 0 . so ul game . scenes . level . level . Terrain Ċ import Ġfr . o 8 0 . so ul game . scenes . level . level . Wall Ċ Ċ class ĠLevel Terrain Reader Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġy : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġ_ blocks Ġ= Ġmutable ListOf < Block >() ĊĠĠĠ Ġprivate Ġval Ġ_ mob Sp awns Ġ= Ġmutable ListOf < Point >() ĊĠĠĠ Ġprivate Ġvar Ġ_ kn ight Spawn : ĠPoint ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġread ( line : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġline . forEach Indexed Ġ{ Ġx , Ġchar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'#' Ġ-> Ġ_ blocks Ġ+= ĠWall ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'+' Ġ-> Ġ_ kn ight Spawn Ġ= ĠPoint ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ':' Ġ-> Ġ_ mob Sp awns Ġ+= ĠPoint ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġ-> Ġ_ blocks Ġ+= ĠDoor ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġy ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild () Ġ: ĠT errain Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠT errain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblocks Ġ= Ġ_ blocks , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmob Sp awns Ġ= Ġ_ mob Sp awns , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk night Spawn Ġ= Ġ_ kn ight Spawn Ġ?: Ġthrow ĠMal formed Level File (" K night Ġspawn Ġis Ġnot Ġset ! Ġ( use Ġ'+ ') ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ