Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
  ANGLER FISH- Assignment 1: Interactive Drawing
  
  Let my creepy fish light up your life!!
  
  Controls:
  Use mouse to make fish swim.
  Click- Turn light ON
  Press any key: CHOMP!

*/


void setup() {
  size(400, 400); //canvas size
}

void draw() {
  background(21,45,82);
  frameRate(60); //default frame rate per second
  
  /*BACKGROUND*/
  
  noCursor();
  rectMode(CENTER);
  
  //medium ocean colour
  fill(10,21,38);
  ellipse(20, 0, 60, 40);
  rectMode(CORNER);
  rect(0, 0, 20, 160);
  ellipse(20, 90, 40, 60);
  rect(0, 300, 200, 50);
  rect(140, 320, 200, 50);

  //light ocean colour
  fill(17,35,64);
  rect(0, 220, 100, 80);
  ellipse(130, 260, 150, 110);
  triangle(180, 220, 180, 310, 250, 310);
  ellipse(248, 310, 60, 60);
  ellipse(280, 190, 60, 20);
  ellipse(300, 180, 20, 60);
  ellipse(350, 230, 40, 40);
  rect(270, 195, 80, 120);
  triangle(390,130,330,270,390,270);

  //ocean colour
  fill(21,45,82);
  ellipse(20, 40, 20, 40);
  ellipse(20, 150, 20, 60);
  ellipse(60, 210, 63, 40);
  ellipse(335, 190, 60, 60);

  //dark ocean colour
  fill(5,10,18);
  ellipse(0, 220, 80, 140);
  triangle(0, 250, 0, 400, 110, 400);
  ellipse(130, 380, 160, 100);
  rect(200, 360, 100, 40);

  //medium ocean colour
  fill(10,21,38);
  arc(40, 305, 70, 60, (3*PI)/12, (8*PI)/6);
  ellipse(60, 335, 40, 30);
  arc(140, 320, 160, 100, PI, (2*PI));
  ellipse(355, 310, 160, 130);
  ellipse(400, 150, 100, 175);
  rect(380, 180, 20, 100);
  ellipse(250, 360, 93, 20);
  rect(380, 0, 100, 100);

  //light ocean colour
  fill(17,35,64);
  ellipse(380, 240, 10, 17);

  //dark ocean colour
  fill(5,10,18);
  ellipse(334, 340, 80, 80);
  triangle(270, 380, 300, 320, 300, 380);
  rect(300, 320, 100, 100);
  ellipse(400, 160, 80, 100);
  rect(380, 180, 20, 300);
  triangle(380, 276, 320, 320, 380, 350);

  //medium ocean colour
  fill(10,21,38);
  ellipse(380, 240, 20, 70);
  ellipse(310,0,25,60);
  //triangle(320,0,400,0,400,60);
  rect(310,0,100,30);
  
  //ocean colour
  fill(21,45,82);
  ellipse(347, 37, 66, 60);
  ellipse(270, 243, 40, 88);
  ellipse(247, 260, 80, 70);
  
  
  /*LITTLE FISH SWIMMING*/
  
  /*  x values:
   abs("start y axis"-((("speed"*abs(400-mouseY)*framecount)/"second speed value")%"distance travelled before looping back"))  
      y values:
   "phase shift" +sin(framecount*"horizontal speed")*"horizontal distance range  credits: Nathan Arcari for formula*/ 
  
  fill(103, 162, 209, 80);
  ellipse(abs(5-(((3.4*abs(400)*frameCount)/280)%411)), 30+sin(frameCount*0.07)*18, 24, 10);
  ellipse(abs(5-(((3.2*abs(400)*frameCount)/150)%650)), 125+sin(frameCount*0.06)*18, 24, 10);
  ellipse(abs(5-(((3.4*abs(400)*frameCount)/260)%411)), 220+sin(frameCount*0.07)*18, 24, 10);
  ellipse(abs(5-(((3.2*abs(400)*frameCount)/150)%650)), 310+sin(frameCount*0.06)*18, 24, 10);
  ellipse(abs(5-(((3.4*abs(400)*frameCount)/280)%411)), 400+sin(frameCount*0.07)*18, 24, 10);
  ellipse(abs(5-(((3.2*abs(400)*frameCount)/150)%650)), 125+sin(frameCount*0.06)*18, 24, 10);


  /*FISH*/

  //antenna
  noFill();
  stroke(122,157,150);
  arc(mouseX-50, mouseY-20, 90, 160, (7*PI)/6, 2*PI);

  //body
  noStroke();
  fill(4,100,22);
  ellipse(mouseX, mouseY, 100, 100);

  //mouth
  arc(mouseX-12.5, mouseY+10, 130, 125, 0, PI);

  //light
  fill(200,209,110);
  ellipse(mouseX-88, mouseY-60, 15, 15);

  //eye
  noStroke();
  fill(16,52,14);
  ellipse(mouseX+20, mouseY+5, 25, 25);
  fill(4,100,22);
  ellipse(mouseX+20, mouseY, 25, 25);
  stroke(0,53,28);
  strokeWeight(3);
  fill(242,248,232);
  ellipse(mouseX+20, mouseY-5, 20, 20);
  fill(0,53,28);
  ellipse(mouseX+20, mouseY-5, 5, 5);
  
  //tail
  noStroke();
  fill(4,100,22);
  triangle(mouseX+40, mouseY+10, mouseX+85, mouseY-15, mouseX+85, mouseY+35);
  ellipse(mouseX+85, mouseY-10, 10, 10);
  ellipse(mouseX+85, mouseY, 10, 10);
  ellipse(mouseX+85, mouseY+10, 10, 10);
  ellipse(mouseX+85, mouseY+20, 10, 10);
  ellipse(mouseX+85, mouseY+30, 10, 10);
  
  fill(0,53,28);
  triangle(mouseX+55, mouseY+5, mouseX+85, mouseY-10, mouseX+80, mouseY);
  quad(mouseX+50, mouseY+10, mouseX+80, mouseY+5, mouseX+85, mouseY+10,mouseX+80, mouseY+15);
  triangle(mouseX+55, mouseY+15, mouseX+85, mouseY+30, mouseX+80, mouseY+20);

  //fin
  fill(7,131,30);
  triangle(mouseX+25, mouseY+20, mouseX+45, mouseY+10, mouseX+45, mouseY+30);
  ellipse(mouseX+45, mouseY+12.5, 5, 5);
  ellipse(mouseX+45, mouseY+20, 10, 10);
  ellipse(mouseX+45, mouseY+27.5, 5, 5);
  
  fill(0,53,28);
  triangle(mouseX+45, mouseY+12, mouseX+42.5, mouseY+16, mouseX+35, mouseY+17.5);
  quad(mouseX+30, mouseY+20, mouseX+42.5, mouseY+17.5, mouseX+47, mouseY+20,mouseX+42.5, mouseY+22.5);
  triangle(mouseX+45, mouseY+28, mouseX+42.5, mouseY+24, mouseX+35, mouseY+22.5);

  //teeth
  fill(255);
  triangle(mouseX-70, mouseY+10, mouseX-65, mouseY, mouseX-60, mouseY+10);
  triangle(mouseX-55, mouseY+10, mouseX-50, mouseY, mouseX-45, mouseY+10);
  triangle(mouseX-40, mouseY+10, mouseX-35, mouseY, mouseX-30, mouseY+10);
  triangle(mouseX-25, mouseY+10, mouseX-20, mouseY, mouseX-15, mouseY+10);
  triangle(mouseX-10, mouseY+10, mouseX-5, mouseY, mouseX, mouseY+10);
  
  
}

/*Open mouth with any key on the keyboard*/

void keyPressed() {
  frameRate(3);// 3frames/second -slowed down to show open mouth
  //open mouth
  fill(21,45,82);
  arc(mouseX+.5, mouseY+10, 120, 123, PI, (8*PI)/6);

  //bottom teeth
  fill(255);
  triangle(mouseX-70, mouseY+10, mouseX-65, mouseY, mouseX-60, mouseY+10);
  triangle(mouseX-55, mouseY+10, mouseX-50, mouseY, mouseX-45, mouseY+10);
  triangle(mouseX-40, mouseY+10, mouseX-35, mouseY, mouseX-30, mouseY+10);
  triangle(mouseX-25, mouseY+10, mouseX-20, mouseY, mouseX-15, mouseY+10);
  triangle(mouseX-10, mouseY+10, mouseX-5, mouseY, mouseX, mouseY+10);

  //top teeth
  triangle(mouseX-25, mouseY-40, mouseX-35, mouseY-30, mouseX-20, mouseY-30);
  triangle(mouseX-27.5, mouseY-20, mouseX-20, mouseY-30, mouseX-15, mouseY-20);
  triangle(mouseX-25, mouseY-10, mouseX-15, mouseY-20, mouseX-10, mouseY-10);
  triangle(mouseX-15, mouseY, mouseX-10, mouseY-10, mouseX-5, mouseY);
  fill(4,100,22);
  //jaw
  arc(mouseX+.5, mouseY+10, 130, 115, (8*PI)/6, (3*PI)/2);
}

/*Turn light on by clicking mouse*/

void mousePressed() { 
  fill(237, 255, 49, 70);
  frameRate(3); // 3frames/second -slowed down to show light
  //light
  ellipse(mouseX-88, mouseY-60, 450, 450);
  ellipse(mouseX-88, mouseY-60, 250, 250);
  ellipse(mouseX-88, mouseY-60, 140, 140);
  ellipse(mouseX-88, mouseY-60, 80, 80);
  ellipse(mouseX-88, mouseY-60, 50, 50);
  ellipse(mouseX-88, mouseY-60, 30, 30);
}