/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 2 1 ĠAnimated LED Strip Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġanimated led strip . animations . pre defined Ċ Ċ import Ġanimated led strip . animations . Animation Ċ import Ġanimated led strip . animations . Animation Parameter Ċ import Ġanimated led strip . animations . Defined Animation Ċ import Ġanimated led strip . animations . Dimension ality Ċ import Ġanimated led strip . animations . parameters . Distance Ċ import Ġanimated led strip . animations . parameters . Equation Ċ import Ġanimated led strip . animations . parameters . Rotation Ċ import Ġanimated led strip . led s . animation management . Pixel Modification Lists Ċ import Ġanimated led strip . led s . animation management . Pixels To Modify Ċ import Ġanimated led strip . led s . col orm an agement . revert Pixel Ċ import Ġanimated led strip . led s . col orm an agement . revert Pixels Ċ import Ġanimated led strip . led s . col orm an agement . set Pixel Temporary Color Ċ import Ġanimated led strip . led s . location management . group Pixels Al ong Line Ċ import Ġkotlinx . coroutines . delay Ċ Ċ val Ġpixel Run Ġ= ĠDefined Animation ( ĊĠĠĠ ĠAnimation . Animation Info ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Pixel ĠRun ", ĊĠĠĠĠĠĠĠ Ġab br Ġ= Ġ" P XR ", ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" A Ġpixel Ġcolored Ġfrom Ġ` colors [ 0 ]` Ġruns Ġalong Ġa Ġline , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a ffect ing Ġpixels Ġwithin Ġ` maximum In fluence ` Ġof Ġthe Ġline .", ĊĠĠĠĠĠĠĠ Ġrun Count Default Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġminimum Colors Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġun limited Colors Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġdimension ality Ġ= ĠDimension ality . any Dimension al , ĊĠĠĠĠĠĠĠ Ġint Params Ġ= ĠlistOf ( Animation Parameter (" inter Movement Delay ", Ġ" Delay Ġbetween Ġmov ements Ġin Ġthe Ġanimation ", Ġ 1 0 )), ĊĠĠĠĠĠĠĠ Ġdouble Params Ġ= ĠlistOf ( Animation Parameter (" movement Per Iteration ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" How Ġfar Ġto Ġmove Ġalong Ġthe ĠX Ġaxis Ġduring Ġeach Ġiteration Ġof Ġthe Ġanimation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Parameter (" maximum In fluence ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" How Ġfar Ġaway Ġfrom Ġthe Ġline Ġa Ġpixel Ġcan Ġbe Ġaffected ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 9 )), ĊĠĠĠĠĠĠĠ Ġdistance Params Ġ= ĠlistOf ( Animation Parameter (" offset ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Offset Ġof Ġthe Ġline Ġin Ġthe ĠX YZ Ġdirections ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDistance . NO _ DISTANCE )), ĊĠĠĠĠĠĠĠ Ġrotation Params Ġ= ĠlistOf ( Animation Parameter (" rotation ", Ġ" Rotation Ġof Ġthe Ġline Ġaround Ġthe ĠX YZ Ġaxes ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRotation . NO _ ROT ATION )), ĊĠĠĠĠĠĠĠ Ġequation Params Ġ= ĠlistOf ( Animation Parameter (" line Equation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġequation Ġrepresenting Ġthe Ġline Ġthe Ġpixel Ġwill Ġfollow ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE quation ())), ĊĠĠĠ Ġ) Ċ ) Ġ{ Ġle ds , Ġparams , Ġ_ Ġ-> ĊĠĠĠ Ġval Ġcolor Ġ= Ġparams . colors [ 0 ] ĊĠĠĠ Ġval Ġinter Movement Delay Ġ= Ġparams . int Params . getValue (" inter Movement Delay "). to Long () ĊĠĠĠ Ġval Ġmovement Per Iteration Ġ= Ġparams . double Params . getValue (" movement Per Iteration ") ĊĠĠĠ Ġval Ġmaximum In fluence Ġ= Ġparams . double Params . getValue (" maximum In fluence ") ĊĠĠĠ Ġval Ġoffset Ġ= Ġparams . distance Params . getValue (" offset ") ĊĠĠĠ Ġval Ġrotation Ġ= Ġparams . rotation Params . getValue (" rotation ") ĊĠĠĠ Ġval Ġline Equation Ġ= Ġparams . equation Params . getValue (" line Equation ") ĊĠĠĠ Ġval Ġcompleted Runs Ġ= Ġparams . extra Data [" completed Runs "] !! Ġas ĠInt ĊĊĠĠĠ Ġle ds . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpixel Mod Lists Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( params . extra Data . get Or Put (" mod Lists ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Pixels Al ong Line ( line Equation , Ġrotation , Ġoffset , Ġmaximum In fluence , Ġmovement Per Iteration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġas ĠPixel Modification Lists ) ĊĠĠĠĠĠĠĠ Ġval Ġpixels To Modify Per Iteration : ĠList < Pixels To Modify > Ġ= Ġpixel Mod Lists . mod Lists ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġpixels To Modify Per Iteration . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( s Pixel , Ġr Pixel ) Ġin Ġpixels To Modify Per Iteration [ i ]. paired Set Re vert Pixels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pixel Temporary Color ( s Pixel , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrevert Pixel ( r Pixel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( pixel Ġin Ġpixels To Modify Per Iteration [ i ]. un paired Set Pixels ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pixel Temporary Color ( pixel , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( pixel Ġin Ġpixels To Modify Per Iteration [ i ]. un paired Re vert Pixels ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrevert Pixel ( pixel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( inter Movement Delay ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( completed Runs Ġ+ Ġ 1 Ġ== Ġparams . run Count ) Ġrevert Pixels ( pixel Mod Lists . last Re vert List ) ĊĠĠĠ Ġ} Ċ } Ċ