package Ġcom . zd og . library . render Ċ Ċ import Ġcom . cond or . weather . library . extension . empty Ċ Ċ type alias ĠFace Options Ġ= Ġ( Box Rect )-> ĠUnit Ċ Ċ class ĠBox Ġ: ĠAnchor () Ġ{ ĊĠĠĠ Ġvar Ġstroke Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Property Ġ{ Ġ_, Ġrect Ġ-> Ġrect . stroke Ġ= Ġstroke Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġfill Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Property Ġ{ Ġ_, Ġrect Ġ-> Ġrect . fill Ġ= Ġfill Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġvar Ġcolor ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcolour . to Color () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolour Ġ= Ġvalue . color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Property Ġ{ Ġface , Ġrect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( face Ġ== Ġnull ) Ġrect . colour Ġ= Ġcolour ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġvisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Property Ġ{ Ġ_, Ġrect Ġ-> Ġrect . visible Ġ= Ġvisible Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġfront Ġ= Ġvector ( z Ġ= Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Property Ġ{ Ġ_, Ġrect Ġ-> Ġrect . front Ġ= Ġfront Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġback face : ĠString ? Ġ= ĠString . empty () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Property Ġ{ Ġ_, Ġrect Ġ-> Ġrect . back face Ġ= Ġback face Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġwidth Ġ= Ġ 1 f ĊĠĠĠ Ġvar Ġheight Ġ= Ġ 1 f ĊĠĠĠ Ġvar Ġdepth Ġ= Ġ 1 f ĊĊĠĠĠ Ġprivate Ġval Ġfront Face Options : Face Options Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġit . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġit . translate ( z Ġ= Ġdepth / 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrear Face Options : Face Options Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġit . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġit . translate ( z Ġ= Ġ- depth / 2 ) ĊĠĠĠĠĠĠĠ Ġit . rotate ( y Ġ= Ġ( TA U / 2 ). toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġleft Face Options : Face Options Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . width Ġ= Ġdepth ĊĠĠĠĠĠĠĠ Ġit . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġit . translate ( x Ġ= Ġ- width / 2 ) ĊĠĠĠĠĠĠĠ Ġit . rotate ( y Ġ= Ġ(- TA U / 4 ). toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġright Face Options : ĠFace Options Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . width Ġ= Ġdepth ĊĠĠĠĠĠĠĠ Ġit . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġit . translate ( x Ġ= Ġwidth / 2 ) ĊĠĠĠĠĠĠĠ Ġit . rotate ( y Ġ= Ġ( TA U / 4 ). toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtop Face Options : ĠFace Options Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġit . height Ġ= Ġdepth ĊĠĠĠĠĠĠĠ Ġit . translate ( y Ġ= Ġ- height / 2 ) ĊĠĠĠĠĠĠĠ Ġit . rotate ( x Ġ= Ġ(- TA U / 4 ). toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbottom Face Options : ĠFace Options Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġit . height Ġ= Ġdepth ĊĠĠĠĠĠĠĠ Ġit . translate ( y Ġ= Ġheight / 2 ) ĊĠĠĠĠĠĠĠ Ġit . rotate ( x Ġ= Ġ( TA U / 4 ). toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġfront Face : ĠString ? Ġ= ĠString . empty () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfront Rect Ġ= Ġinit Rect ( front Rect , Ġvalue , Ġfront Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġfront Rect : ĠBox Rect ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġrear Face : ĠString ? Ġ= ĠString . empty () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrear Rect Ġ= Ġinit Rect ( rear Rect , Ġvalue , Ġrear Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġrear Rect : ĠBox Rect ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġleft Face : ĠString ? Ġ= ĠString . empty () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Rect Ġ= Ġinit Rect ( left Rect , Ġvalue , Ġleft Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġleft Rect : ĠBox Rect ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġright Face : ĠString ? Ġ= ĠString . empty () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Rect Ġ= Ġinit Rect ( right Rect , Ġvalue , Ġright Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġright Rect : ĠBox Rect ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġtop Face : ĠString ? Ġ= ĠString . empty () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Rect Ġ= Ġinit Rect ( top Rect , Ġvalue , Ġtop Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġtop Rect : ĠBox Rect ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġbottom Face : ĠString ? Ġ= ĠString . empty () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Rect Ġ= Ġinit Rect ( bottom Rect , Ġvalue , Ġbottom Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġbottom Rect : ĠBox Rect ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġinit Rect ( face : ĠBox Rect ?, Ġvalue : ĠString ?, Ġblock : Ġ( Box Rect )-> ĠUnit ): ĠBox Rect ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrect Ġ= Ġface ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rect Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Child ( rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcolour Ġ= Ġif Ġ( value . isEmpty ()) Ġcolour Ġelse Ġvalue . color ĊĠĠĠĠĠĠĠ Ġrect Ġ= Ġif Ġ( rect Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . colour Ġ= Ġcolour ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox Rect (). setup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . colour Ġ= Ġcolour ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrect . update Path () ĊĠĠĠĠĠĠĠ Ġadd Child ( rect ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Rect () ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġupdate Path () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Property Ġ{ Ġface , Ġrect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . colour Ġ= Ġif ( face . isNull OrEmpty ()) Ġcolour Ġelse Ġface . color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . stroke Ġ= Ġstroke ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . fill Ġ= Ġfill ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . back face Ġ= Ġback face ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . front Ġ= Ġfront ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . visible Ġ= Ġvisible ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Rect () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( front Face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfront Rect Ġ= Ġfront Rect Ġ?: Ġnew Rect ( front Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( rear Face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrear Rect Ġ= Ġrear Rect Ġ?: Ġnew Rect ( rear Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( left Face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Rect Ġ= Ġleft Rect Ġ?: Ġnew Rect ( left Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( right Face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Rect Ġ= Ġright Rect Ġ?: Ġnew Rect ( right Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( top Face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Rect Ġ= Ġtop Rect Ġ?: Ġnew Rect ( top Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bottom Face Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Rect Ġ= Ġbottom Rect Ġ?: Ġnew Rect ( bottom Face Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Rect ( options : ĠFace Options ) Ġ= ĊĠĠĠĠĠĠĠ ĠBox Rect (). setup ( options ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . update Path () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Child ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Property ( block : Ġ( String ?, ĠBox Rect ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfront Rect ?. let Ġ{ Ġblock ( front Face , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġrear Rect ?. let Ġ{ Ġblock ( rear Face , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġleft Rect ?. let Ġ{ Ġblock ( left Face , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġright Rect ?. let Ġ{ Ġblock ( right Face , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġtop Rect ?. let Ġ{ Ġblock ( top Face , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġbottom Rect ?. let Ġ{ Ġblock ( bottom Face , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy (): ĠBox Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcopy ( Box ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy ( shape : ĠAnchor ): ĠBox Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( super . copy ( shape ) Ġas ĠBox ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . stroke Ġ= Ġstroke ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . fill Ġ= Ġfill ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . visible Ġ= Ġvisible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . front Ġ= Ġfront ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . back face Ġ= Ġback face ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . depth Ġ= Ġdepth ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . front Face Ġ= Ġfront Face ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . rear Face Ġ= Ġrear Face ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . left Face Ġ= Ġleft Face ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . right Face Ġ= Ġright Face ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . top Face Ġ= Ġtop Face ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . bottom Face Ġ= Ġbottom Face ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }