import java.applet.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
import java.text.*; 
import java.util.*; 
import java.util.zip.*; 

public class udk_final_pala02 extends BApplet {
// Ece Pala
// 6 July 2003
// BYTINGALEZ


boolean mute = false;
float scale = 1.0f;
float freq = 60;
float rad = 1.1f;

void setup() {
framerate(4); 
  size(800, 400);
  background(0);
  
  beginSound(width);



}

void loop() { 
soundEvent(); 
bigBird();
littleBird();
} 

void rotate(){
 int x = (int)(random(5)); 
 int y = (int)(random(6)); 
rotate(sin (x+y));
}

void bigBird(){
 int x = (int)(random(5)); 
 int y = (int)(random(5)); 
float gg=cos(x+y);
int mox = (int) sqrt (sq (mouseX) + sq (mouseY)); 

translate(160, 260+y);
stroke(204,0,0); 
fill(0);
ellipse(520, -250, 50, 50); 

noStroke(); 
fill(255);
ellipse(525, -240, 20, 15); 

translate(0, 0,-2);
fill(0);
ellipse(410+gg, -240+gg, 15, 12); 

translate(0, 0,-8);

  fill(255,102,0);
  beginShape(POLYGON);
  vertex(522,-141);
  bezierVertex(522+gg,-191+gg);
  bezierVertex(472+gg,-264+gg);
  bezierVertex(400+gg, -284+gg);
  bezierVertex(300+gg, -206+gg);
  vertex(300+gg, -206+gg);
  endShape();

noStroke(); 
fill(200,0,0);
lights(); 
translate(580,10,-180-gg); 
rad = sqrt(mox*mouseX+mouseY)/PI*x;
if(rad > 100) {  sphere(200+x); 
  } else sphere(200-rad+y); 
 
 fill(0,0,255);
ellipse(-110, -380, 500, 800); 

 rotate(random(-1)/4);
 translate(-580,0,+180+gg); 
 fill(224,96,0);  
  beginShape(POLYGON);
  vertex(562+gg,-171+gg);
  bezierVertex(562+gg,-171+gg);
  bezierVertex(512+gg,-44+gg);
  bezierVertex(410+gg, -64+gg);
  bezierVertex(360+gg, -100+gg);
  vertex(360+gg, -100+gg);
  endShape();
}

void littleBird(){

 int x = (int)(random(5)); 
 int y = (int)(random(5)); 
float gg=cos(x+y);
translate(580,0,-180-gg); 
 translate(mouseX-680, mouseY-380, 100+mouseX-mouseY/2);
 
  fill(255,102,0);
  beginShape(TRIANGLES); 
  vertex(42,41);
  vertex(22,31);
  vertex(32,21);
  vertex(18,31);
  vertex(28,24);
  vertex(28,48);
  endShape();
  fill(0,200,0);
  ellipse(0, 0, 35, 35); 
  
  rotate();
  beginShape(QUADS);
  vertex(-50+x,0+y);  
  vertex(-130+x,-20+y);  
  vertex(-149+x,-63+y);  
  vertex(-50+x,-10+y);  
  vertex(0+x,0+y);  
  vertex(-80+x,160+y);  
  vertex(-90+x,3+y);  
  vertex(-40+x,-10+y);  
  vertex(0+x,-5+y);  
  vertex(-10+x,-105+y);  
  vertex(-60+x,-68+y);  
  vertex(-40+x,-15+y);  
 endShape(); 
 
  stroke(0); 
  strokeWidth(3);
  fill(255);
  ellipse(18, 8, 8, 8); 	
}

void soundEvent() 
{
  if(mousePressed) freq--;
  // Initialize sound and set sample length = width of window
  int mox = (int) sqrt (sq (mouseX) + sq (mouseY)); 
  float m = PI * 2.0f * freq / (float)(mox-1);
  // init the buffer
  for (int s=0; s < width; ++s) {
    samples[s] = mute? 0: (int) (mouseX * sin((float)(s * m)));
  }
}

void keyPressed() 
{
  if (key == 'm' || key == 'M') {
    if (mute) {
      mute = false;
    } else {
      mute = true;
    }
  }
  if (key == '+' || key == '=') {
    freq++;
  }
  if (key == '-') {
    freq--;
  }
}

}
