package Ġme . w ie ku . dan ser . graphics . draw ables . triangles Ċ Ċ import Ġme . w ie ku . dan ser . be atmap . Beatmap Ċ import Ġme . w ie ku . framework . animation . Gl ider Ċ import Ġme . w ie ku . framework . di . bind able . Bind able Ċ import Ġme . w ie ku . framework . graphics . draw ables . containers . Container Ċ import Ġme . w ie ku . framework . graphics . draw ables . sprite . Sprite Ċ import Ġme . w ie ku . framework . graphics . draw ables . sprite . Sprite Batch Ċ import Ġme . w ie ku . framework . math . Scaling Ċ import Ġme . w ie ku . framework . math . color . Color Ċ import Ġorg . j om l . Vector 2 f Ċ import Ġorg . k oin . core . K oin Component Ċ import Ġorg . k oin . core . inject Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . math .* Ċ Ċ class ĠTri angles () Ġ: ĠContainer (), ĠK oin Component Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbe atmap Bind able : ĠBind able < Beatmap ?> Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġval Ġbars Ġ= Ġ 1 0 ĊĠĠĠ Ġprivate Ġval Ġtriangle Spawn Rate Ġ= Ġ 0 . 2 5 ĊĊĠĠĠ Ġprivate Ġval Ġtriangles Ġ= ĠArrayList < Triangle >() ĊĠĠĠ Ġprivate Ġval Ġtriangles ToRemove Ġ= ĠArrayList < Triangle >() ĊĊĠĠĠ Ġprivate Ġval Ġtemp Sprite Ġ= ĠSprite () ĊĊĠĠĠ Ġprivate Ġvar Ġtexture Gen Ġ= ĠTriangle Texture Generator () ĊĠĠĠ Ġprivate Ġvar Ġre generate Texture Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġshadow Amount : ĠFloat Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġfield ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġre generate Texture Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcolor Dark Ġ= ĠColor ( 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġcolor Dark ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . update Colors ( value , Ġcolor Light ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcolor Light Ġ= ĠColor ( 1 f ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġcolor Light ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . update Colors ( color Dark , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcolor Array : ĠArray < Color >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . update Colors ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġmin Size Ġ= Ġ 0 . 1 2 0 f ĊĠĠĠ Ġvar ĠmaxSize Ġ= Ġ 0 . 5 2 0 f ĊĊĠĠĠ Ġvar Ġbase Velocity Ġ= Ġ 0 . 1 f ĊĠĠĠ Ġvar Ġspeed Multiplier Ġ= Ġ 1 f ĊĠĠĠ Ġprivate Ġvar Ġvelocity Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġreactive Ġ= Ġtrue ĊĠĠĠ Ġvar Ġseparation Ġ= Ġ 1 . 4 f ĊĊĠĠĠ Ġvar Ġspawn Rate Ġ= Ġ 1 f ĊĠĠĠ Ġvar Ġtriangles Minimum Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġspawn Enabled Ġ= Ġtrue ĊĠĠĠ Ġvar Ġstart On Screen Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġtriangle Order Ġ= ĠTriangle Order . Random ĊĠĠĠ Ġvar Ġtriangle Direction Ġ= ĠTriangle Direction . Up ĊĊĠĠĠ Ġprivate Ġvar Ġtriangle Size Ġ= ĠVector 2 f ( 0 . 0 f ) ĊĊĠĠĠ Ġconstructor ( in Context : ĠTri angles . () Ġ-> ĠUnit ) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġin Context () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Triangles ( on screen : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Triangles Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax ( triangles Minimum , Ġ( sqrt ( draw Size . x Ġ* Ġdraw Size . y ) Ġ* Ġtriangle Spawn Rate Ġ* Ġspawn Rate ). toInt ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġto Add Ġ= Ġmax Triangles Ġ- Ġtriangles . size ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġto Add ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Triangle ( on screen ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( to Add Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( triangle Order Ġ== ĠTriangle Order . Sm allest To Big gest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles . sortBy Descending Ġ{ Ġit . size Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( triangle Order Ġ== ĠTriangle Order . Big gest To Sm allest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles . sortBy Ġ{ Ġit . size Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Triangle ( on screen : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġmin Size Ġ+ Ġ( sin ( random . next Float () Ġ* Ġ 2 Ġ* ĠPI . toFloat ()) Ġ* Ġ 0 . 5 f Ġ+ Ġ 0 . 5 f ) Ġ* Ġ( maxSize Ġ- Ġmin Size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġwhen Ġ( triangle Direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTriangle Direction . Up Ġ-> ĠVector 2 f ( random . next Float (), Ġif Ġ( on screen ) Ġrandom . next Float () Ġelse Ġ 1 f Ġ+ Ġsize Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTriangle Direction . Down Ġ-> ĠVector 2 f ( random . next Float (), Ġif Ġ( on screen ) Ġrandom . next Float () Ġelse Ġ- size Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTriangle Direction . Left Ġ-> ĠVector 2 f ( if Ġ( on screen ) Ġrandom . next Float () Ġelse Ġ 1 f Ġ+ Ġsize Ġ/ Ġ 2 , Ġrandom . next Float ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTriangle Direction . Right Ġ-> ĠVector 2 f ( if Ġ( on screen ) Ġrandom . next Float () Ġelse Ġ- size Ġ/ Ġ 2 , Ġrandom . next Float ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtriangle Ġ= ĠTriangle ( position , Ġsize ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( color Array Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle . update Colors ( color Array !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġtriangle . update Colors ( color Dark , Ġcolor Light ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( triangle Order Ġ== ĠTriangle Order . Random ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( triangles . size Ġ> Ġ 0 ) Ġrandom . nextInt ( triangles . size ) Ġelse Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles . add ( triangle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . update () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( spawn Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Triangles ( start On Screen Ġ&& Ġtriangles . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġvar Ġboost Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġif Ġ( reactive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe atmap Bind able . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . get Track (). isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfft Ġ= Ġit . get Track (). fft Data ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġbars ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboost Ġ+= Ġ 2 Ġ* Ġfft [ i ] Ġ* Ġ( bars Ġ- Ġi ). toFloat () Ġ/ Ġbars . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġmax ( velocity , Ġmin ( boost Ġ* Ġ 0 . 0 7 2 5 f , Ġ 0 . 3 f ) Ġ* Ġspeed Multiplier ) ĊĊĠĠĠĠĠĠĠ Ġvelocity Ġ*= Ġ 1 . 0 f Ġ- Ġ 0 . 0 5 f Ġ* Ġclock . time . frame Time . toFloat () Ġ/ Ġ 1 6 . 6 6 6 6 7 f ĊĊĠĠĠĠĠĠĠ Ġval Ġvelocity Current Ġ= Ġbase Velocity Ġ+ Ġvelocity ĊĊĠĠĠĠĠĠĠ Ġtriangles ToRemove . clear () ĊĊĠĠĠĠĠĠĠ Ġtriangles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclock . time . frame Time . toFloat () Ġ/ Ġ 1 0 0 0 f Ġ* Ġvelocity Current Ġ* Ġ( 1 f Ġ+ Ġseparation Ġ* Ġ( maxSize Ġ- Ġit . size ) Ġ/ Ġ( maxSize Ġ- Ġmin Size )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . position . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Direction . direction X Ġ* Ġbase , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Direction . direction Y Ġ* Ġbase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . update ( clock . currentTime ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . position . x Ġ! in Ġ- it . size Ġ/ Ġ 2 .. 1 f Ġ+ Ġit . size Ġ/ Ġ 2 Ġ|| Ġit . position . y Ġ! in Ġ- it . size Ġ/ Ġ 2 .. 1 f Ġ+ Ġit . size Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles ToRemove . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( triangles . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles . removeAll ( triangles ToRemove ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġdraw Array Ġ= Ġempty Array < Triangle ?> () ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Drawable () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . update Drawable () ĊĠĠĠĠĠĠĠ Ġtriangle Size . set ( Scaling . Fit . apply ( temp Sprite . size . x , Ġtemp Sprite . size . y , Ġdraw Size . x , Ġdraw Size . y )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( batch : ĠSprite Batch ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( regener ate Texture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Sprite . texture Ġ= Ġtexture Gen . generate ( shadow Amount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Size . set ( Scaling . Fit . apply ( temp Sprite . size . x , Ġtemp Sprite . size . y , Ġdraw Size . x , Ġdraw Size . y )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre generate Texture Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( draw Array . size Ġ< Ġtriangles . size Ġ+ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Array Ġ= ĠarrayOf Null s ( triangles . size Ġ+ Ġ 2 ) Ġ// hack , Ġbut Ġprevents ĠArray Index OutOfBoundsException Ġduring Ġtriangles . toArray . ĠNeeds Ġa Ġbetter Ġsolution . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdraw Array Ġ= Ġtriangles . toArray ( draw Array ) ĊĊĠĠĠĠĠĠĠ Ġtemp Sprite . rotation Ġ= Ġif Ġ( triangle Direction . direction X Ġ!= Ġ 0 . 0 f ) ĠPI . toFloat () Ġ/ Ġ 2 Ġelse Ġ 0 . 0 f ĊĊĠĠĠĠĠĠĠ Ġval Ġsc issor Used Ġ= Ġuse Sc issor ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sc issor Used ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbatch . push Mask ing Info ( mask ing Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġdraw Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Sprite . draw Size . set ( triangle Size ). mul ( it . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Sprite . draw Origin . set ( temp Sprite . draw Size ). mul ( 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Sprite . draw Position . set ( draw Size ). mul ( it . position ). sub ( temp Sprite . draw Origin ). add ( draw Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Sprite . draw Color . set ( draw Color ). mul ( it . color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Sprite . flip X Ġ= Ġit . flip X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Sprite . draw ( batch ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sc issor Used ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbatch . pop Mask ing Info () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTriangle ( val Ġposition : ĠVector 2 f , Ġval Ġsize : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhelper Ġ= ĠColor () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcolor Index Ġ= Ġrandom . nextInt ( Int . MAX _ VALUE ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcolor Shade Ġ= Ġrandom . next Float () ĊĠĠĠĠĠĠĠ Ġval Ġflip X Ġ= Ġrandom . next Boolean () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġold Color Ġ= ĠColor ( Float . NaN ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnew Color Ġ= ĠColor ( Float . NaN ) ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor ( Float . NaN ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠcurrentTime : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcolor Gl ider Ġ= ĠGl ider ( 1 f ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate ( time : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Gl ider . update ( currentTime ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( color Gl ider . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f Ġ-> Ġold Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġ-> Ġnew Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠColor . mix ( old Color , Ġnew Color , Ġcolor Gl ider . value , Ġhelper ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate Colors ( dark : ĠColor , Ġlight : ĠColor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor To ( Color . mix ( dark , Ġlight , Ġcolor Shade , Ġhelper )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate Colors ( color Array : ĠArray < Color >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor To ( color Array [ color Index Ġ% Ġcolor Array . size ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcolor To ( new Color : ĠColor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Color . set ( color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this . new Color . x . isNaN ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Gl ider . reset () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Gl ider . add Event ( currentTime , ĠcurrentTime Ġ+ Ġ 5 0 0 , Ġ 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . new Color . set ( new Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĠĠĠ Ġ} Ċ }