package Ġcom . l ro z ans ki . generator . d ungeon . map Ċ Ċ import Ġcom . l ro z ans ki . generator . d ungeon . Cell Type Ċ import Ġcom . l ro z ans ki . generator . d ungeon . extensions . array Of 2 d Ċ import Ġcom . l ro z ans ki . generator . d ungeon . map . data . Cell Ċ import Ġcom . l ro z ans ki . generator . d ungeon . map . data . Grid Rect Ċ import Ġcom . l ro z ans ki . generator . d ungeon . map . data . Position Ċ import Ġcom . l ro z ans ki . generator . d ungeon . map . data . Size Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ open Ġclass ĠGrid ( size : ĠSize ) Ġ: ĠAbstract Grid < Cell >( size ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Grid (): ĠArray < Array < Cell >> Ġ= ĠarrayOf 2 d ( size . w , Ġsize . h ) Ġ{ Ġx , Ġy Ġ-> ĠCell ( x , Ġy , ĠCell Type . EMPTY ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Rectangle Empty ( position : ĠPosition , Ġsize : ĠSize ): ĠBoolean Ġ= Ġall Match ( position , Ġsize ) Ġ{ Ġit . type Ġ== ĠCell Type . EMPTY Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( position : ĠPosition , Ġsize : ĠSize ): ĠGrid Rect < Cell > Ġ= ĠGrid Rect ( this , Ġposition , Ġsize ) ĊĊĠĠĠ Ġfun Ġshrink ( margin : ĠInt Ġ= Ġ 1 ): ĠGrid Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmin X Ġ= Ġsize . w ĊĠĠĠĠĠĠĠ Ġvar Ġmin Y Ġ= Ġsize . h ĊĠĠĠĠĠĠĠ Ġvar Ġmax X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax Y Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġsize . w ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġsize . h ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġgrid [ x ][ y ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin X Ġ= Ġmin ( cell . x , Ġmin X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Y Ġ= Ġmin ( cell . y , Ġmin Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax X Ġ= Ġmax ( cell . x , Ġmax X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Y Ġ= Ġmax ( cell . y , Ġmax Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Grid Ġ= ĠGrid ( Size ( max X Ġ- Ġmin X Ġ+ Ġ 1 Ġ+ Ġmargin Ġ* Ġ 2 , Ġmax Y Ġ- Ġmin Y Ġ+ Ġ 1 Ġ+ Ġmargin Ġ* Ġ 2 )) Ċ // ĠĠĠĠĠĠĠ Ġnew Grid . fill Ġ{ Ġx , Ġy Ġ-> ĠCell ( x , Ġy , ĠCell Type . EMPTY ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġmin X .. max X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġmin Y .. max Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew X Ġ= Ġx Ġ- Ġmin X Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Y Ġ= Ġy Ġ- Ġmin Y Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Grid [ new X , Ġnew Y ] Ġ= ĠCell ( new X , Ġnew Y , Ġgrid [ x ][ y ]. type , Ġgrid [ x ][ y ]. secret ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Grid ĊĠĠĠ Ġ} Ċ } Ċ