//////////////////////////////////////////////
//Daniel Pizarro
//Desma 28
//Exercise 4.B
//11 / 29 / 04
//////////////////////////////////////////////


Dot[] myDots;
Dot2[] myDots2;
int numDots = 10;

  
   
     
void setup() 
{ 
  size(300, 300);  
  ellipseMode(CENTER); 
  framerate(30);
  angleMode(DEGREES);
  smooth();
  myDots = new Dot[numDots]; 
  for(int i=0; i<numDots; i++) { 
    myDots[i] = new Dot(i*30.0, height/4.0, random(1.0, 3.0), 8.0, 2); 
  } 
  myDots2 = new Dot2[numDots]; 
  for(int i=0; i<numDots; i++) {
    myDots2[i] = new Dot2(i*30.0, height/2.0, random(1.0, 3.0), 10.0, 1);
  }  
  
} 
 
void draw() 
{ 

  for(int i=0; i<numDots; i++) { 
    myDots[i].update(); 
    myDots[i].display(); 
    myDots2[i].update(); 
    myDots2[i].display();  
  
  }
  
  fill(0, 10); 
  noStroke(); 
  rect(0, 0, width, height); 

} 
 

class Dot
{
  
  float angle = 0.0; 
  float speed; 
  float xoffset = 0.0; 
  float yoffset = 0.0;
  float x, y, rad, baserad; 
  int dir; 
  
  Dot(float xi, float yi, float speedi, float radi, int diri) { 
    x = xi; 
    y = yi; 
    speed = speedi; 
    rad = radi; 
    baserad = rad; 
    dir = diri; 
  }


  void update()
  {
   angle = angle + speed; 
    if(angle > 360) { 
      angle = angle - 360; 
    } 
    xoffset = cos(angle) * 50; 
  
    yoffset = yoffset + 2.0; 
    if(yoffset > height + 20.0) { 
      yoffset = -20.0; 
    }
    
    
    y += speed * dir; 
    if((y > height) || (y < baserad)) { 
      dir *= -1; 
      rad += rad*2.0; 
    } 
    if(rad > baserad) { 
      rad -= 2.0 * speed; 
    }
 } 
  
  void display()
  {
  noStroke();
  fill(255, 255, 0, 200); 
  ellipse(x+ (xoffset + width/2), y + (yoffset), rad*2, rad*2);
   
  }


}



class Dot2
{
  
  float angle = 0.0; 
  float speed; 
  float xoffset = 0.0; 
  float yoffset = 0.0;
  float x, y, rad, baserad; 
  int dir; 
  
  Dot2(float xi, float yi, float speedi, float radi, int diri) { 
    x = xi; 
    y = yi; 
    speed = speedi; 
    rad = radi; 
    baserad = rad; 
    dir = diri; 
  }


  void update()
  {
   angle = angle + speed; 
    if(angle > 360) { 
      angle = angle - 360; 
    } 
    xoffset = cos(angle) * 30; 
  
    yoffset = yoffset + 1.0; 
    if(yoffset > height + 20.0) { 
      yoffset = -50.0; 
    }
    
    
    y += speed * dir; 
    if((y > height-baserad) || (y < baserad)) { 
      dir *= -1; 
      rad += rad*4.0; 
    } 
    if(rad > baserad) { 
      rad -= 2.0 * speed; 
    }
 } 
  
  void display()
  {
  noStroke();
  fill(55, 255, 0, 200); 
  ellipse(x + (xoffset), y + (yoffset + 30), rad*2, rad*2);
   
  }


}

Exercise 4.B: Dot
Write your own unique Dot class which has a different behavior than the one presented in the example. Design a kinetic composition with 20 of your Dots.