package Ġorg . hex works . z ir con . api . game Ċ Ċ import Ġorg . hex works . z ir con . api . builder . graphics . Tile Graphics Builder Ċ import Ġorg . hex works . z ir con . api . data . Block Ċ import Ġorg . hex works . z ir con . api . data . Position 3 D Ċ import Ġorg . hex works . z ir con . api . data . Size 3 D Ċ import Ġorg . hex works . z ir con . api . data . Tile Ċ import Ġorg . hex works . z ir con . api . game . Game Area . Companion . fetch Position sWith Offset Ċ import Ġorg . hex works . z ir con . api . graphics . Tile Graphics Ċ import Ġorg . hex works . z ir con . api . util . Maybe Ċ import Ġorg . hex works . z ir con . internal . extensions . get If Present Ċ Ċ abstract Ġclass ĠBase Game Area Ġ: ĠGame Area Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġfetch Blocks ( fetch Mode : ĠGame Area . Block Fetch Mode ): ĠIterable < Block > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( fetch Mode Ġ== ĠGame Area . Block Fetch Mode . IGNORE _ EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Blocks () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize (). fetch Positions (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Block OrDefault ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfetch Blocks At ( offset : ĠPosition 3 D , Ġsize : ĠSize 3 D ): ĠIterable < Block > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfetch Position sWith Offset ( offset , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġhas Block At ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfetch Block OrDefault ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfetch Blocks At ( offset : ĠPosition 3 D , Ġsize : ĠSize 3 D , Ġfetch Mode : ĠGame Area . Block Fetch Mode ): ĠIterable < Block > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( fetch Mode Ġ== ĠGame Area . Block Fetch Mode . IGNORE _ EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Blocks At ( offset , Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Position sWith Offset ( offset , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfetch Block OrDefault ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Block ] s Ġat Ġthe Ġgiven Ġ` z ` Ġlevel . ĊĠĠĠĠ Ġ* ĠEmpty Ġpositions Ġare Ġ** ignored **. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfetch Blocks At Level ( z : ĠInt ): ĠIterable < Block > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfetch Blocks () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . position . z Ġ== Ġz Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfetch Block OrDefault ( it . position ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Block ] s Ġat Ġthe Ġgiven Ġ` z ` Ġlevel . ĊĠĠĠĠ Ġ* ĠEmpty Ġpositions Ġare Ġeither Ġignored , Ġor Ġa Ġdefault Ġfill er Ġvalue Ġis Ġreturned . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfetch Blocks At Level ( z : ĠInt , Ġblock Fetch Mode : ĠGame Area . Block Fetch Mode ): ĠIterable < Block > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( block Fetch Mode Ġ== ĠGame Area . Block Fetch Mode . IGNORE _ EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Blocks At Level ( z ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGame Area . fetch Position sWith Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= ĠPosition 3 D . default Position (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= ĠSize 3 D . create ( size (). x Length , Ġsize (). y Length , Ġz )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfetch Block OrDefault ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Tile ] Ġat Ġthe Ġgiven Ġ` position ` Ġand Ġ` layer Idx ` Ġ( if Ġany ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfetch Tile At ( position : ĠPosition 3 D , Ġlayer Idx : ĠInt ): ĠMaybe < Tile > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfetch Block OrDefault ( position ). layers . get If Present ( layer Idx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġall Ġthe Ġlayers Ġfrom Ġbottom Ġto Ġtop Ġas Ġa Ġcollection Ġof Ġ[ org . hex works . z ir con . api . graphics . Tile Graphics ] s . ĊĠĠĠĠ Ġ* ĠA Ġlayer Ġis Ġa Ġcollection Ġof Ġ[ Tile ] s Ġat Ġa Ġgiven Ġ` z ` Ġlevel Ġand Ġ` layer Index `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfetch Layers At ( offset : ĠPosition 3 D , Ġsize : ĠSize 3 D ): ĠIterable < Tile Graphics > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset 2 D Ġ= Ġoffset . to 2 D Position () ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġsize . to 2 D Size (). fetch Positions () ĊĠĠĠĠĠĠĠ Ġreturn Ġ( offset . z Ġuntil Ġsize . z Length Ġ+ Ġoffset . z ). flatMap Ġ{ Ġz Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimages Ġ= Ġmutable ListOf < Tile Graphics >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġget Layers Per Block ()). forEach Ġ{ Ġlayer Idx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠTile Graphics Builder . newBuilder (). size ( size . to 2 D Size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . forEach Ġ{ Ġpos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Tile At ( Position 3 D . from 2 D Position ( pos Ġ+ Ġoffset 2 D , Ġz ), Ġlayer Idx ). map Ġ{ Ġchar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . tile ( pos , Ġchar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimages . add ( builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimages ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ