package Ġdev . base io . compose playground . ui . animations . plan etary system Ċ Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ import Ġkotlin . random . Random Ċ Ċ class ĠPlan et ( ĊĠ Ġvar Ġx : ĠFloat , ĊĠ Ġvar Ġy : ĠFloat , ĊĠ Ġval Ġradius : ĠFloat , ĊĠ Ġval Ġplanet Color : ĠColor , ĊĠ Ġprivate Ġval Ġvelocity : ĠFloat , ĊĠ Ġval Ġorbit Radius : ĠFloat , ĊĠ Ġval Ġis Forward : ĠBoolean Ġ= Ġtrue Ċ ) Ġ{ ĊĠ Ġvar Ġrad ian : ĠFloat Ġ= Ġ 0 f ĊĠ Ġvar Ġmoon Ġ= ĠMo on () ĊĠ Ġvar Ġstart X Ġ= Ġx ĊĠ Ġvar Ġstart Y Ġ= Ġy ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġmoon . prepare ( this ) ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate () Ġ{ ĊĠĠĠ Ġif Ġ( this . velocity Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġthis . update Moon () ĊĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġis Forward Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . rad ian Ġ+= Ġthis . velocity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . rad ian Ġ-= Ġthis . velocity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġthis . x Ġ= Ġ( this . start X Ġ+ Ġcos ( this . rad ian . toDouble ()) Ġ* Ġthis . orbit Radius ). toFloat () ĊĠĠĠĠĠ Ġthis . y Ġ= Ġ( this . start Y Ġ+ Ġsin ( this . rad ian . toDouble ()) Ġ* Ġthis . orbit Radius ). toFloat () ĊĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠPlan et . update Moon () Ġ{ ĊĠ Ġmoon . rad ian Ġ+= Ġmoon . velocity ĊĠ Ġmoon . x Ġ= ĊĠĠĠ Ġ( this . x Ġ+ Ġcos ( moon . rad ian . toDouble ()) Ġ* Ġ( this . radius Ġ+ Ġ 5 )). toFloat () ĊĠ Ġmoon . y Ġ= ĊĠĠĠ Ġ( this . y Ġ+ Ġsin ( moon . rad ian . toDouble ()) Ġ* Ġ( this . radius Ġ+ Ġ 5 )). toFloat () Ċ Ċ } Ċ Ċ class ĠSol ar System ( private Ġval Ġcenter Offset : ĠOffset ) Ġ{ ĊĠ Ġval Ġplan ets Ġby Ġlazy Ġ{ ĊĠĠĠ Ġval Ġplan ets Ġ= Ġmutable ListOf < Planet >() ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 3 5 f , ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xfff 9 d 7 1 c ), Ġis Forward Ġ= Ġtrue ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ); Ġ// Ġsun ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 5 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Gray , ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 2 0 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 6 5 f , ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ); Ġ// Ġmer cury ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 1 0 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xff FF A 5 0 0 ), ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 1 0 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 9 0 f , ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ); Ġ// Ġven us ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 1 5 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Blue , ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 5 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 1 2 5 f , ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ); Ġ// Ġearth ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 2 0 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Red , ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 7 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 1 7 5 f , ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ); Ġ// Ġm ars ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 2 5 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xff FF A 5 0 0 ), ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 5 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 2 2 5 f , ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ); Ġ// Ġj upiter ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 2 0 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xfff 9 d 7 1 c ), ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 4 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 2 7 5 f , ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ); Ġ// Ġsat urn ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 1 5 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Blue , ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 1 0 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 3 2 5 f , ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ); Ġ// Ġur an us ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 2 5 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xff 8 0 0 0 8 0 ), ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 1 5 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 3 7 5 f , ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ); Ġ// Ġne pt une ĊĠĠĠ Ġplan ets . add ( ĊĠĠĠĠĠ Ġget Planet For Options ( ĊĠĠĠĠĠĠĠ Ġcenter Offset . x , ĊĠĠĠĠĠĠĠ Ġcenter Offset . y , ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 1 8 f , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Gray , ĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġ 1 0 f , ĊĠĠĠĠĠĠĠ Ġorbit Radius Ġ= Ġ 4 5 0 f , ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ// Ġpl uto ĊĠĠĠ Ġplan ets ĊĠ Ġ} ĊĊĊĠ Ġprivate Ġfun Ġget Planet For Options ( ĊĠĠĠ Ġcenter X : ĠFloat , ĊĠĠĠ Ġcenter Y : ĠFloat , ĊĠĠĠ Ġradius : ĠFloat , ĊĠĠĠ Ġcolor : ĠColor , ĊĠĠĠ Ġvelocity : ĠFloat , ĊĠĠĠ Ġorbit Radius : ĠFloat , ĊĠĠĠ Ġis Forward : ĠBoolean ĊĠ Ġ): ĠPlan et Ġ{ ĊĠĠĠ Ġreturn ĠPlan et ( ĊĠĠĠĠĠ Ġcenter X , ĊĠĠĠĠĠ Ġcenter Y , ĊĠĠĠĠĠ Ġradius , ĊĠĠĠĠĠ Ġcolor , ĊĠĠĠĠĠ Ġvelocity Ġ/ Ġ 1 0 0 0 , ĊĠĠĠĠĠ Ġorbit Radius , Ġis Forward Ġ= Ġis Forward ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ Ċ class ĠMo on Ġ{ ĊĠ Ġvar Ġx : ĠFloat Ġ= Ġ 0 f ĊĠ Ġvar Ġy : ĠFloat Ġ= Ġ 0 f ĊĠ Ġvar Ġrad ian : ĠFloat Ġ= Ġ 0 f ĊĠ Ġvar Ġvelocity : ĠFloat Ġ= Ġ 0 f ĊĊĠ Ġfun Ġprepare ( planet : ĠPlan et ) Ġ{ ĊĠĠĠ Ġthis . x Ġ= Ġplanet . x Ġ+ Ġplanet . orbit Radius Ġ+ Ġplanet . radius ĊĠĠĠ Ġthis . y Ġ= Ġplanet . y ĊĠĠĠ Ġthis . rad ian Ġ= Ġ 0 f ĊĠĠĠ Ġthis . velocity Ġ= Ġ( Random . next Float () Ġ+ Ġ 0 . 1 ). div ( 3 0 ). toFloat () ĊĠ Ġ} Ċ Ċ } ĊĊ