package Ġk y ber lib . lighting . animations Ċ Ċ import Ġjava . awt . Color Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . pow Ċ Ċ class ĠAnimation Rain ( private Ġval Ġcolor : ĠColor , Ġprivate Ġval Ġdrop Length : ĠInt , Ġval Ġticks Per Movement : ĠInt , Ġval Ġreversed : ĠBoolean Ġ= Ġfalse ) Ġ: ĠLED Animation () Ġ{ ĊĊĠĠĠ Ġfun Ġconstruct Initial Buffer ( length : ĠInt ): ĠMutable List < Color > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠArray < Color >( drop Length Ġ* Ġceil ( length . toDouble () Ġ/ Ġdrop Length ). toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġ(( 1 Ġ+ Ġ( it Ġ% Ġdrop Length )) Ġ/ Ġdrop Length . toFloat ()). pow ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor ( color . red Ġ/ Ġ 2 5 5 F , Ġcolor . green Ġ/ Ġ 2 5 5 F , Ġcolor . blue Ġ/ Ġ 2 5 5 F , Ġalpha ) ĊĠĠĠĠĠĠĠ Ġ}. to Mutable List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Buffer ( ticks : ĠInt , Ġlength : ĠInt ): ĠList < Color > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġconstruct Initial Buffer ( length ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ( ticks Ġ/ Ġticks Per Movement ) Ġ% Ġdrop Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . add ( 0 , Ġb . remove At ( b . size Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( reversed ) Ġb . reverse () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġb . take ( length ) ĊĠĠĠ Ġ} Ċ } Ċ