package Ġrust yc age . kt Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics . Bitmap Ċ import Ġrust yc age .* Ċ import Ġrust yc age . util . Paint Builder Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠMartin ĠB reh ov sky Ġon Ġ 1 1 / 2 / 1 7 . Ċ Ġ*/ Ċ Ċ abstract Ġclass ĠNode Builder < T Ġ: ĠS g Node > Ġ{ ĊĊĠĠĠ Ġvar Ġtx Ġ: ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġty Ġ: ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġr Ġ: ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġs : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġsx : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġsy : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġpx : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġpy : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġopacity : ĠFloat ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġid : ĠString ? Ġ= Ġnull ĊĠĠĠĠĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġfill Attributes ( node Ġ: ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtx ?. let Ġ{ node . translation X Ġ= Ġit Ġas ĠFloat } ĊĠĠĠĠĠĠĠ Ġty ?. let Ġ{ node . translation Y Ġ= Ġit Ġas ĠFloat } ĊĠĠĠĠĠĠĠ Ġr ?. let Ġ{ Ġnode . rotation Ġ= Ġit Ġas ĠFloat } ĊĠĠĠĠĠĠĠ Ġs ?. let Ġ{ node . scale Ġ= Ġit Ġas ĠFloat } ĊĠĠĠĠĠĠĠ Ġsx ?. let Ġ{ node . set Scale ( it Ġas ĠFloat , Ġnode . scale Y )} ĊĠĠĠĠĠĠĠ Ġsy ?. let Ġ{ node . set Scale ( node . scale X , Ġit Ġas ĠFloat )} ĊĠĠĠĠĠĠĠ Ġpx ?. let Ġ{ Ġnode . set Pivot ( it Ġas ĠFloat , Ġnode . pivot Y )} ĊĠĠĠĠĠĠĠ Ġpy ?. let Ġ{ Ġnode . set Pivot ( node . pivot X , Ġit Ġas ĠFloat )} ĊĠĠĠĠĠĠĠ Ġopacity ?. let Ġ{ node . opacity Ġ= Ġit } ĊĠĠĠĠĠĠĠ Ġid ?. let Ġ{ node . id Ġ= Ġit } ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// abstract Ġfun Ġ< B Ġ: ĠS g Node . Builder < B , N >, ĠN Ġ: ĠS g Node > Ġbuild Scene Graph Node Builder () Ġ: ĠS g Node . Builder < in ĠB , Ġin ĠN > ĊĊĠĠĠ Ġabstract Ġfun Ġbuild Scene Graph () Ġ: ĠT Ċ Ċ } Ċ Ċ class ĠGroup Builder Ġ: ĠNode Builder < Sg Group >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġchildren Ġ= Ġarray ListOf < Node Builder < out ĠS g Node >>() ĊĊĠĠĠ Ġ/* override Ġfun Ġ< B Ġ: ĠS g Node . Builder < B , ĠN >, ĠN Ġ: ĠS g Node > Ġbuild Scene Graph Node Builder (): ĠS g Node . Builder < in ĠB , Ġin ĠN > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠS g Group . create () ĊĠĠĠ Ġ}*/ ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Scene Graph (): ĠS g Group Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Builder Ġ= ĠS g Group . create () ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġnode Builder . add ( Ġit . build Scene Graph () Ġ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġnode Builder . build () ĊĠĠĠĠĠĠĠ Ġfill Attributes ( node ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ inline Ġfun Ġgroup ( init : ĠGroup Builder . () Ġ-> ĠUnit ) Ġ: ĠGroup Builder Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠGroup Builder () ĊĠĠĠ Ġbuilder . init () ĊĠĠĠ Ġreturn Ġbuilder Ċ } ĊĊĊ Ċ class ĠImage Builder Ġ: ĠNode Builder < Sg Image >() Ġ{ ĊĊĠĠĠ Ġvar Ġbitmap Ġ: ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġresources : ĠResources ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġresource Id : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Scene Graph (): ĠS g Image Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġimage Node Ġ: ĠS g Image ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( resources Ġ!= Ġnull Ġ&& Ġresource Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Node Ġ= ĠS g Image . create With Resource ( resources Ġas ĠResources , Ġresource Id Ġas ĠInt ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbitmap ?. let Ġ{ Ġimage Node Ġ= ĠS g Image . create With Bitmap ( it ). build () Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( image Node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Node Ġ= ĠS g Image . create Empty (). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfill Attributes ( image Node Ġas ĠS g Image ) ĊĠĠĠĠĠĠĠ Ġreturn Ġimage Node Ġas ĠS g Image ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġimage ( init : ĠImage Builder . () Ġ-> ĠUnit ) Ġ: ĠImage Builder Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠImage Builder () ĊĠĠĠ Ġbuilder . init () ĊĠĠĠ Ġreturn Ġbuilder Ċ } Ċ Ċ inline Ġfun Ġimage ( bitmap Ġ: ĠBitmap ) Ġ: ĠImage Builder Ġ= Ġimage { this . bitmap Ġ= Ġbitmap } Ċ Ċ inline Ġfun Ġimage ( resources : ĠResources , Ġid : ĠInt ) Ġ: ĠImage Builder Ġ Ġ= Ġimage { this . resources Ġ= Ġresources ; Ġthis . resourceId Ġ= Ġid } Ċ Ċ class ĠPaint Builder K Ġ{ ĊĊĠĠĠ Ġvar Ġpaint Builder : ĠPaint Builder ? Ġ= Ġnull ĊĊ Ċ } ĊĊ Ċ abstract Ġclass ĠShape Builder < T Ġ: ĠS g Shape > Ġ: ĠNode Builder < T >() Ġ{ ĊĠĠĠ Ġvar Ġpaint Builder Ġ: ĠPaint Builder K ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġfill Attributes ( node : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . fill Attributes ( node ) ĊĠĠĠĠĠĠĠ Ġpaint Builder ?. let Ġ{ Ġnode . paint Ġ= Ġit . paint Builder ?. build ()} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLine Builder Ġ: ĠShape Builder < Sg Line >() Ġ{ ĊĊĠĠĠ Ġvar Ġx 1 : ĠNumber Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġy 1 : ĠNumber Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġx 2 : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġy 2 : ĠNumber ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġwidth : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġheight : ĠNumber ? Ġ= Ġnull ĊĊĊĠĠĠ Ġoverride Ġfun Ġbuild Scene Graph (): ĠS g Line Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x 2 Ġ== Ġnull Ġ&& Ġwidth Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx 2 Ġ= Ġx 1 Ġas ĠFloat Ġ+ Ġwidth Ġas ĠFloat ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( y 2 Ġ== Ġnull Ġ&& Ġheight Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 Ġ= Ġy 1 Ġas ĠFloat Ġ+ Ġheight Ġas ĠFloat ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġx 1 f Ġ= Ġx 1 Ġas ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġx 2 f Ġ= Ġx 2 Ġas ĠFloat ? Ġ?: Ġx 1 f ĊĠĠĠĠĠĠĠ Ġval Ġy 1 f Ġ= Ġy 1 Ġas ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġy 2 f Ġ= Ġy 2 Ġas ĠFloat ? Ġ?: Ġy 1 f ĊĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠS g Line . create With Points ( x 1 f , Ġy 1 f , Ġx 2 f , Ġy 2 f ). build () ĊĠĠĠĠĠĠĠ Ġfill Attributes ( node ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġline ( init : ĠLine Builder . () Ġ-> ĠUnit ) Ġ: ĠLine Builder Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠLine Builder () ĊĠĠĠ Ġbuilder . init () ĊĠĠĠ Ġreturn Ġbuilder Ċ } Ċ Ċ class ĠRectangle Builder Ġ: ĠShape Builder < Sg Rectangle >() Ġ{ ĊĊĠĠĠ Ġvar Ġx 1 : ĠNumber Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġy 1 : ĠNumber Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġx 2 : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġy 2 : ĠNumber ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġwidth : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġheight : ĠNumber ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġrx : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġry : ĠNumber ? Ġ= Ġnull ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġbuild Scene Graph (): ĠS g Rectangle Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x 2 Ġ== Ġnull Ġ&& Ġwidth Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx 2 Ġ= Ġx 1 Ġas ĠFloat Ġ+ Ġwidth Ġas ĠFloat ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( y 2 Ġ== Ġnull Ġ&& Ġheight Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 Ġ= Ġy 1 Ġas ĠFloat Ġ+ Ġheight Ġas ĠFloat ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġx 1 f Ġ= Ġx 1 Ġas ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġx 2 f Ġ= Ġx 2 Ġas ĠFloat ? Ġ?: Ġx 1 f ĊĠĠĠĠĠĠĠ Ġval Ġy 1 f Ġ= Ġy 1 Ġas ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġy 2 f Ġ= Ġy 2 Ġas ĠFloat ? Ġ?: Ġy 1 f ĊĊĠĠĠĠĠĠĠ Ġval Ġr xf Ġ= Ġrx Ġas ĠFloat ? Ġ?: Ġ 0 f ĊĠĠĠĠĠĠĠ Ġval Ġr yf Ġ= Ġry Ġas ĠFloat ? Ġ?: Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠS g Rectangle . create With Points ( x 1 f , Ġy 1 f , Ġx 2 f , Ġy 2 f , Ġr xf , Ġr yf ). build () ĊĠĠĠĠĠĠĠ Ġfill Attributes ( node ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġrectangle ( init : ĠLine Builder . () Ġ-> ĠUnit ) Ġ: ĠLine Builder Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠLine Builder () ĊĠĠĠ Ġbuilder . init () ĊĠĠĠ Ġreturn Ġbuilder Ċ } ĊĊĊ Ċ class ĠEl lipse Builder Ġ: ĠShape Builder < Sg Ellipse >() Ġ{ ĊĠĠĠ Ġvar Ġrx : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġry : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġcx : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġcy : ĠNumber ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Scene Graph (): ĠS g Ellipse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠS g Ellipse . create Ellipse (( rx Ġas ĠFloat ?) ?: Ġ 0 f , Ġ( ry Ġas ĠFloat ?) ?: Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( cx Ġas ĠFloat ?) ?: Ġ 0 f , Ġ( cy Ġas ĠFloat ?) ?: Ġ 0 f ). build () ĊĠĠĠĠĠĠĠ Ġfill Attributes ( node ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġel lipse ( init : ĠEl lipse Builder . () Ġ-> ĠUnit ) Ġ: ĠEl lipse Builder Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠEl lipse Builder () ĊĠĠĠ Ġbuilder . init () ĊĠĠĠ Ġreturn Ġbuilder Ċ } ĊĊ Ċ class ĠArc Builder : ĠShape Builder < Sg Arc >() Ġ{ ĊĠĠĠ Ġvar Ġleft : ĠNumber Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġright : ĠNumber Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġtop : ĠNumber Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġbottom : ĠNumber Ġ= Ġ 0 f ĊĊĠĠĠ Ġvar Ġstart Angle : ĠNumber Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġsweep Angle : ĠNumber Ġ= Ġ 0 f ĊĊĠĠĠ Ġvar Ġuse Center : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Scene Graph (): ĠS g Arc Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarc Ġ= Ġ ĠS g Arc . create ( left Ġas ĠFloat , Ġtop Ġas ĠFloat , Ġright Ġas ĠFloat , Ġbottom Ġas ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Angle Ġas ĠFloat , Ġsweep Angle Ġas ĠFloat ). build () ĊĠĠĠĠĠĠĠ Ġarc . is Use Center Ġ= Ġuse Center ĊĠĠĠĠĠĠĠ Ġfill Attributes ( arc ) ĊĠĠĠĠĠĠĠ Ġreturn Ġarc ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġarc ( init : ĠArc Builder . () Ġ-> ĠUnit ) Ġ: ĠArc Builder Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠArc Builder () ĊĠĠĠ Ġbuilder . init () ĊĠĠĠ Ġreturn Ġbuilder Ċ } Ċ Ċ class ĠPath Builder : ĠShape Builder < Sg Path >() Ġ{ ĊĊĠĠĠ Ġvar Ġpath Ġ: ĠS g Path . Builder Ġ= ĠS g Path . create () ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Scene Graph (): ĠS g Path Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġpath . build () ĊĠĠĠĠĠĠĠ Ġfill Attributes ( node ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ; ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġpath ( init : ĠPath Builder . () Ġ-> ĠUnit ) Ġ: ĠPath Builder Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠPath Builder () ĊĠĠĠ Ġbuilder . init () ĊĠĠĠ Ġreturn Ġbuilder Ċ } ĊĊĊ Ċ class ĠText Builder Ġ: ĠShape Builder < Sg Text >() Ġ{ ĊĊĠĠĠ Ġvar Ġtext Ġ: ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġx Ġ: ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġy Ġ: ĠNumber ? Ġ= Ġnull ĊĊĊĠĠĠ Ġoverride Ġfun Ġbuild Scene Graph (): ĠS g Text Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠS g Text . create ( text ) ĊĠĠĠĠĠĠĠ Ġx ?. let Ġ{ Ġbuilder . x ( it Ġas ĠFloat ) Ġ} ĊĠĠĠĠĠĠĠ Ġy ?. let Ġ{ Ġbuilder . y ( it Ġas ĠFloat ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ inline Ġfun Ġtext ( init : ĠText Builder . () Ġ-> ĠUnit ) Ġ: ĠText Builder Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠText Builder () ĊĠĠĠ Ġbuilder . init () ĊĠĠĠ Ġreturn Ġbuilder Ċ } ĊĊ Ċ class ĠCustom Node Builder ( val Ġcustom Node Creator Ġ: Ġ() Ġ-> ĠS g Custom Node ) Ġ: ĠNode Builder < Sg Custom Node >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Scene Graph (): ĠS g Custom Node Ġ= Ġcustom Node Creator () Ċ Ċ } ĊĊ Ċ val Ġxx Ġ= Ġgroup Ġ{ ĊĠĠĠ Ġtx Ġ= Ġ 1 0 f ĊĠĠĠ Ġty Ġ= Ġ 1 3 f ĊĠĠĠ Ġline Ġ{ ĊĠĠĠĠĠĠĠ Ġx 1 Ġ= Ġ 1 0 f ĊĠĠĠĠĠĠĠ Ġx 2 Ġ= Ġ 1 0 f ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 3 0 f ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 4 0 f ĊĠĠĠĠĠĠĠ Ġr Ġ= Ġ 1 2 ĊĠĠĠĠĠĠĠ Ġimage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" foo " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġel lipse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrx Ġ= Ġ 1 0 ; Ġry Ġ= Ġ 3 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpath Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= ĠS g Path . create (). lineTo ( 2 0 f , 3 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġgroup Ġ{ ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ