> show canvas only <


/* built with Studio Sketchpad: 
 *   https://sketchpad.cc
 * 
 * observe the evolution of this sketch: 
 *   https://studio.sketchpad.cc/sp/pad/view/ro.ikjodxahlec/rev.100
 * 
 * authors: 
 *   Claudio Pinho

 * license (unless otherwise specified): 
 *   creative commons attribution-share alike 3.0 license.
 *   https://creativecommons.org/licenses/by-sa/3.0/ 
 */ 



int ringCenterX, ringCenterY;
int ringSize = 0;
int currentRingSize = 0;
int numRingsDrawn = 0;
int ringSpacer = 8;
int ringsToDraw = 5;
int count = 0;
int frames = 30; //change frameRate by this same value
int ringRandomPosDelay = 7*frames;
int currentRingAlpha;
int ringAlpha = ringRandomPosDelay - ringsToDraw*ringSpacer; //calcutes the alpha range for colorMode

void setup(){
    size(400, 300);
    frameRate(30);
    smooth();
    ringCenterX = width / 2;
    ringCenterY = height / 2;
    colorMode(HSB,  360, 100, 100, ringAlpha);
    noFill();
}

void draw(){
    background(360);
   
     if(mousePressed){
        if(mouseX > ringCenterX){
             ringsToDraw = (mouseX - ringCenterX)/8;
             line(ringCenterX, ringCenterY, mouseX, mouseY);
             for(int  i = 8; i <= (mouseX-ringCenterX); i+=8){
                 ringSize = i;
                ellipse(ringCenterX, ringCenterY,  ringSize, ringSize);
            }
         }else if(mouseX < ringCenterX){
            ringsToDraw =  (ringCenterX - mouseX)/8;
             line(ringCenterX, ringCenterY,  mouseX, mouseY);
             for(int  i = 8; i <= (ringCenterX-mouseX); i+=8){
                 ringSize = i;
                ellipse(ringCenterX, ringCenterY,  ringSize, ringSize);
            }
        }
       
    }else{
        if(count < ringRandomPosDelay){
            stroke(0, 0, 0, ringAlpha);
            if(ringAlpha >= 0){
                ellipse(ringCenterX, ringCenterY, ringSize, ringSize);
            }
            
            numRingsDrawn = 1;
            currentRingSize = ringSize - ringSpacer;
            currentRingAlpha = ringAlpha + ringSpacer;
            while((currentRingSize >= 0) && (numRingsDrawn < ringsToDraw)){
                stroke(0, 0, 0, currentRingAlpha);
                if(currentRingAlpha >= 0){
                    ellipse(ringCenterX, ringCenterY, currentRingSize, currentRingSize);
                }
                numRingsDrawn ++;
                currentRingSize -= ringSpacer;
                currentRingAlpha += ringSpacer;
            }
            ringSize ++;
            ringAlpha --;
            count++;
            }else{
             initRings();
            }
    }
}

void mousePressed(){
    ringCenterX = mouseX;
    ringCenterY = mouseY;
    numRingsDrawn = 0;
    ringSize = 0;
    ringAlpha = (ringRandomPosDelay - ringsToDraw*ringSpacer);
    currentRingSize = 0;
    currentRingAlpha = 0;
    count = 0;
}

void initRings(){
    ringCenterX = int(random(0, width));
    ringCenterY = int(random(0, height));
    numRingsDrawn = 0;
    ringSize = 0;
    ringAlpha = (ringRandomPosDelay - ringsToDraw*ringSpacer);
    currentRingSize = 0;
    currentRingAlpha = 0;
    count = 0;
}