package Ġorg . hex works . z ir con . api . builder . data Ċ Ċ import Ġorg . hex works . cob alt . datat ypes . Maybe Ċ import Ġorg . hex works . cob alt . datat ypes . extensions . map Ċ import Ġorg . hex works . z ir con . api . builder . Builder Ċ import Ġorg . hex works . z ir con . api . data . Block Ċ import Ġorg . hex works . z ir con . api . data . Block Side Ċ import Ġorg . hex works . z ir con . api . data . Block Side .* Ċ import Ġorg . hex works . z ir con . api . data . Tile Ċ import Ġorg . hex works . z ir con . internal . data . Default Block Ċ Ċ /** Ċ Ġ* ĠBuilds Ġ[ Tile ] s . Ċ Ġ* ĠDefaults : Ċ Ġ* Ġ- ĠDefault Ġcharacter Ġis Ġa Ġspace Ċ Ġ* Ġ- ĠDefault Ġmodifiers Ġis Ġan Ġempty Ġset Ċ Ġ* Ġalso Ċ Ġ* Ġ@ see Ġ[ org . hex works . z ir con . api . color . Tile Color ] Ġto Ġcheck Ġdefault Ġcolors . Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ", Ġ" Member Visibility Can Be Private ") Ċ data Ġclass ĠBlock Builder < T Ġ: ĠTile >( ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġempty Tile : ĠMaybe < T > Ġ= ĠMaybe . empty (), ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġtop : ĠMaybe < T > Ġ= ĠMaybe . empty (), ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġbottom : ĠMaybe < T > Ġ= ĠMaybe . empty (), ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġfront : ĠMaybe < T > Ġ= ĠMaybe . empty (), ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġback : ĠMaybe < T > Ġ= ĠMaybe . empty (), ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġleft : ĠMaybe < T > Ġ= ĠMaybe . empty (), ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġright : ĠMaybe < T > Ġ= ĠMaybe . empty (), ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlayers : ĠMutable List < T > Ġ= Ġmutable ListOf (), ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlayer Count : ĠInt Ġ= Ġ 1 ) Ġ: ĠBuilder < Block < T >> Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcurr Layer Idx Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġwith Empty Tile ( tile : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . empty Tile Ġ= ĠMaybe . of ( tile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Side ( block Side : ĠBlock Side , Ġtile : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( block Side ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTOP Ġ-> Ġwith Top ( tile ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBOTTOM Ġ-> Ġwith Bottom ( tile ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLEFT Ġ-> Ġwith Left ( tile ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRIGHT Ġ-> Ġwith Right ( tile ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFR ONT Ġ-> Ġwith Front ( tile ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBACK Ġ-> Ġwith Back ( tile ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Top ( top : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . top Ġ= ĠMaybe . of ( top ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Bottom ( bottom : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . bottom Ġ= ĠMaybe . of ( bottom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Front ( front : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . front Ġ= ĠMaybe . of ( front ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Back ( back : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . back Ġ= ĠMaybe . of ( back ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Left ( left : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . left Ġ= ĠMaybe . of ( left ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Right ( right : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . right Ġ= ĠMaybe . of ( right ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Layer ( layer : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( curr Layer Idx Ġ< Ġlayer Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Can 't Ġadd Ġmore Ġlayers Ġto Ġthis ĠBlock , Ġit Ġhas Ġalready Ġreached Ġmaximum ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . layers . add ( layer ) ĊĠĠĠĠĠĠĠ Ġcurr Layer Idx ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Layers ( layers : ĠList < T >) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġlayer Count Ġ= Ġlayers . size ĊĠĠĠĠĠĠĠ Ġcurr Layer Idx Ġ= Ġlayer Count Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġthis . layers . clear () ĊĠĠĠĠĠĠĠ Ġthis . layers . addAll ( layers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Layers ( var arg Ġlayers : ĠT ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Layers ( layers . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Layer Count ( layer Count : ĠInt ) Ġ= Ġalso Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . layer Count Ġ= Ġlayer Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild (): ĠBlock < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( layers . size Ġ<= Ġlayer Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Can 't Ġhave Ġmore Ġlayers Ġin Ġa ĠBlock Ġthan Ġthe Ġexpected Ġlayer Ġcount ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( empty Tile . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġempty Ġtile Ġsupplied " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsides Ġ= Ġmutable Map Of < Block Side , ĠT >() ĊĠĠĠĠĠĠĠ ĠlistOf ( TOP Ġto Ġtop , ĠBOTTOM Ġto Ġbottom , ĠLEFT Ġto Ġleft , ĠRIGHT Ġto Ġright , ĠFR ONT Ġto Ġfront , ĠBACK Ġto Ġback ). forEach Ġ{ Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpair . second . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsides [ pair . first ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠDefault Block ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayers Ġ= Ġlayers . to Mutable List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsides Ġ= Ġsides . toMap (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Tile Ġ= Ġempty Tile . get ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Copy () Ġ= Ġcopy () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Block Builder ] Ġfor Ġcreating Ġ[ Tile ] s . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠTile > ĠnewBuilder () Ġ= ĠBlock Builder < T >() ĊĊĠĠĠ Ġ} Ċ } Ċ