Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
float rearIrisX = 215;
float rearIrisY = 115;

float frontIrisX = 90;
float frontIrisY = 135;

float mouthControllerY = 200;

boolean hairball = false;
float hairballX = 60;
float hairballY = 240;

void setup() {
  size(400,400);
  frameRate(60);
}

void draw() {
  background(120,210,240);
  noStroke();
  //println (mouseY);
  
  if(hairball == true){
  //println("hairball true");
  }
  
  //if the jaw is not locked
  if(hairball != true){
    //and the mouse is in the bounding box
    if(mouseY > 185 && mouseY < 275) {
      //jaw follows mouth
      mouthControllerY = mouseY;
    }
  }
  
  //Rear Whiskers
  fill(255);
  triangle(250,200,255,207,398,248);
  triangle(230,180,235,187,372,228);
  triangle(225,215,230,222,367,253);
  
  //Back Ear
  fill(215,115,25);
  triangle(140,10,155,90,80,90);
  fill(245,145,55);
  quad(140,10,100,90,80,90,122,20);
  //Front Ear
  fill(215,115,25);
  triangle(70,10,85,90,10,90);
  fill(245,145,55);
  quad(70,10,30,90,10,90,52,20);
  
  //Rear lip
  fill(215,115,25);
  quad(160,mouthControllerY+60,260,mouthControllerY+80,250,mouthControllerY+110,160,mouthControllerY+110);
  triangle(160,mouthControllerY+30,240,mouthControllerY+110,150,mouthControllerY+110);
  quad(70,180,180,180,180,mouthControllerY+110,90,mouthControllerY+100);
  
  //Rear EyeSocket
  fill(245,145,55);
  quad(100,77,175,72,175,110,100,110);
  ellipseMode(CENTER);
  ellipse(180,127,110,110);
  fill(215,115,25);
  ellipse(185,121,70,70);
  
  //Rear Eyeball
  fill(255);
  ellipseMode(CENTER);
  ellipse(190,130,80,75);
  
  //Rear Iris
  rearIrisX  = random(213,217);
  rearIrisY  = random(113,117);
  fill(55,210,110);
  ellipseMode(CENTER);
  ellipse(rearIrisX-1,rearIrisY+1,18,18);
  fill(0);
  ellipseMode(CENTER);
  ellipse(rearIrisX,rearIrisY,12,12);

  //Upper Teeth
  fill(230,245,145);
  quad(160,220,192,220,186,245,170,246);
  quad(188,220,205,220,200,242,192,244);
  quad(210,220,223,220,218,243,206,244);
  quad(226,220,246,220,237,246,230,242);
  quad(244,210,265,200,256,237,249,240);

  //Rear Cheek
  fill (250,195,95);
  ellipseMode(CENTER);
  ellipse(230,190,120,80);
  
  //Nose Ridge
  fill(250,150,60);
  quad(160,110,180,140,150,170,130,150);
  quad(160,130,210,150,170,190,140,170);
  
  //Nose
  fill(255,160,210);
  quad(215,145,192,192,160,165,190,145);
  quad(215,145,225,155,220,180,188,188);
  
  ////MOUTH////
    //Throat
  fill(155,55,0);
  ellipseMode(CORNERS);
  quad(90,170,150,170,150,mouthControllerY+110,90,mouthControllerY+110);
  triangle(130,mouthControllerY+30,210,mouthControllerY+110,110,mouthControllerY+110);
  quad(50,180,150,180,150,mouthControllerY+110,80,mouthControllerY+100);
    //Bottom Teeth
  fill(230,245,145);
  quad(128,mouthControllerY+60,145,mouthControllerY+67,148,mouthControllerY+90,125,mouthControllerY+90);
  quad(155,mouthControllerY+59,167,mouthControllerY+56,172,mouthControllerY+90,150,mouthControllerY+90);
  quad(182,mouthControllerY+60,195,mouthControllerY+56,196,mouthControllerY+90,180,mouthControllerY+90);
  quad(205,mouthControllerY+57,219,mouthControllerY+64,222,mouthControllerY+90,200,mouthControllerY+90);
  quad(232,mouthControllerY+59,240,mouthControllerY+66,242,mouthControllerY+90,225,mouthControllerY+90);
    //Gums
  fill(255,160,210);
  quad(120,mouthControllerY+80,175,mouthControllerY+75,235,mouthControllerY+110,100,mouthControllerY+110);
  quad(160,mouthControllerY+85,210,mouthControllerY+74,280,mouthControllerY+90,100,mouthControllerY+110);
    //Chin
  fill(250,150,60);
  //left lip corner
  ellipseMode(CENTER);
  ellipse(90,mouthControllerY+100,60,40);
  //right lip corner
  ellipseMode(CENTER);
  ellipse(270,mouthControllerY+95,60,50);
  //left lip
  quad(60,180,90,180,90,mouthControllerY+100,60,mouthControllerY+100);
  //bottom lip
  quad(90,mouthControllerY+90,270,mouthControllerY+90,270,mouthControllerY+120,90,mouthControllerY+120);
  //left corner adjuster
  quad(80,mouthControllerY+63,130,mouthControllerY+100,80,mouthControllerY+100,70,mouthControllerY+70);
  //right corner adjuster
  quad(255,mouthControllerY+75,270,mouthControllerY+100,230,mouthControllerY+110,175,mouthControllerY+106);
 
  //HAIRBALL SHOOTER
  if (hairball == true){
    //Lock Jaw to most open position   
    mouthControllerY = 275;
    //Create Hairball
    fill(135,105,35);
    ellipseMode(CENTER);
    ellipse(hairballX,hairballY,80,80);
    //Hairball Detail
    fill(225,190,120);
    quad(hairballX-21,hairballY-40,hairballX-10,hairballY-25,hairballX-18,hairballY-15,hairballX-25,hairballY-15);
    quad(hairballX-5,hairballY,hairballX+15,hairballY-20,hairballX+20,hairballY-5,hairballX+5,hairballY+25);
    triangle(hairballX+15,hairballY-40,hairballX+40,hairballY-25,hairballX+20,hairballY-22);
    quad(hairballX-47,hairballY-15,hairballX-32,hairballY-8,hairballX-36,hairballY+5,hairballX-50,hairballY);
    quad(hairballX-15,hairballY+5,hairballX-2,hairballY+20,hairballX-35,hairballY+42,hairballX-20,hairballY+22);
    quad(hairballX+38,hairballY+5,hairballX+45,hairballY+12,hairballX+25,hairballY+40,hairballX+20,hairballY+22);
    //Move Hairball
    hairballX=hairballX+10f;
    hairballY=hairballY+5;
  }
  
  //Reset Hairball
  if(hairballY > 450 && hairballX > 450){
    hairball=false; 
    hairballX = 60;
    hairballY = 220;
  }
  
  //Neck
  //fill(230,130,40);
  fill(245,145,55);
  quad(-10,85,85,71,85,mouthControllerY+100,-10,290);

  //Lip hair
  //1
  fill(250,150,60);
  triangle(18,212,60,172,60,mouthControllerY+20);
  fill(240,140,50);
  triangle(18,212,60,(mouthControllerY-22)/2+100,60,mouthControllerY+20);
  //2
  fill(250,150,60);
  triangle(12,240,60,(mouthControllerY-22)/2+100,60,mouthControllerY+40);
  fill(240,140,50);
  triangle(12,240,60,(mouthControllerY+20)/2+100,60,mouthControllerY+60);
  //3
  fill(250,150,60);
  triangle(22,266,60,(mouthControllerY+20)/2+100,60,mouthControllerY+90);
  fill(240,140,50);
  triangle(22,266,60,mouthControllerY+50,60,mouthControllerY+90);
  //left lip
  fill(250,150,60);
  quad(60,180,90,180,90,mouthControllerY+100,60,mouthControllerY+100);
  
  //Front EyeSocket
  fill(250,150,60);
  ellipseMode(CENTER);
  ellipse(95,130,140,120);
  fill(225,125,35);
  ellipse(105,130,110,90);
 
  // Front Eyeball
  fill(255);
  ellipseMode(CENTER);
  ellipse(110,130,90,75);
  
  //Front Iris
  frontIrisX  = random(85,95);
  frontIrisY  = random(130,140);
  ellipseMode(CENTER);
  fill(55,210,110);
  ellipse(frontIrisX+1,frontIrisY-1,30,30);
  fill(0);
  ellipse(frontIrisX,frontIrisY,20,20);
  
  //Front Cheek
  fill(255,200,100);
  ellipseMode(CENTER);
  ellipse(150,200,130,100);
  
  //Front Whiskers
  fill(255);
  triangle(150,200,155,205,18,248);
  triangle(130,190,135,195,-28,238);
  triangle(125,220,130,225,-33,273);
}

void mousePressed(){
  hairball = true;
}