11#include "../ckb/ckb-anim.h"
22#include <math.h>
3+ #include <time.h>
34
45void ckb_info (){
56 // Plugin info
@@ -14,6 +15,7 @@ void ckb_info(){
1415 CKB_PARAM_AGRADIENT ("color" , "Ripple color:" , "" , "ffffffff" );
1516 CKB_PARAM_DOUBLE ("length" , "Ring length:" , "%" , 100 , 1 , 100 );
1617 CKB_PARAM_BOOL ("symmetric" , "Symmetric" , 0 );
18+ CKB_PARAM_BOOL ("randomize" , "Randomly select from gradient" , 0 );
1719
1820 // Timing/input parameters
1921 CKB_KPMODE (CKB_KP_POSITION );
@@ -44,11 +46,12 @@ void ckb_info(){
4446
4547float kbsize = 0.f ;
4648ckb_gradient animcolor = { 0 };
47- int symmetric = 0 , kprelease = 0 ;
49+ int symmetric = 0 , kprelease = 0 , randomize = 0 ;
4850double animlength = 0. ;
4951
5052void ckb_init (ckb_runctx * context ){
5153 kbsize = sqrt (context -> width * context -> width / 4.f + context -> height * context -> height / 4.f );
54+ srand ((unsigned )time (NULL ));
5255}
5356
5457void ckb_parameter (ckb_runctx * context , const char * name , const char * value ){
@@ -61,6 +64,7 @@ void ckb_parameter(ckb_runctx* context, const char* name, const char* value){
6164 }
6265 CKB_PARSE_BOOL ("symmetric" , & symmetric ){}
6366 CKB_PARSE_BOOL ("kprelease" , & kprelease ){}
67+ CKB_PARSE_BOOL ("randomize" , & randomize ){}
6468}
6569
6670#define ANIM_MAX (144 * 2)
@@ -69,6 +73,7 @@ struct {
6973 float x , y ;
7074 float maxsize ;
7175 float cursize ;
76+ float choice ;
7277} anim [ANIM_MAX ] = { };
7378
7479void anim_add (float x , float y , float width , float height ){
@@ -82,6 +87,7 @@ void anim_add(float x, float y, float width, float height){
8287 float sizey = fmax (y , height - y );
8388 anim [i ].maxsize = sqrt (sizex * sizex + sizey * sizey ) + animlength ;
8489 anim [i ].cursize = (symmetric ) ? - animlength : 0 ;
90+ anim [i ].choice = (float )rand ()/(float )(RAND_MAX );
8591 return ;
8692 }
8793}
@@ -140,10 +146,12 @@ int ckb_frame(ckb_runctx* context){
140146 if (distance > 1.f && distance <= 1.005f )
141147 // Round values close to 1
142148 distance = 1.f ;
149+
143150 // Blend color gradient according to position
144151 if (distance >= 0. && distance <= 1.f ){
145152 float a , r , g , b ;
146- ckb_grad_color (& a , & r , & g , & b , & animcolor , distance * 100. );
153+ float gradChoice = randomize ? anim [i ].choice : distance ;
154+ ckb_grad_color (& a , & r , & g , & b , & animcolor , gradChoice * 100. );
147155 ckb_alpha_blend (key , a , r , g , b );
148156 }
149157 }
0 commit comments