Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/* -------------------------------------------------------------------------------------

    Interactive Drawing - Jeep
    By Irvin Lam
    
    Includes:
      - shaking car (to imitate bumpy surface)
      - horizontal movement by mouse position
      - moving clouds and rocks (an illusion for a moving car)


---------------------------------------------------------------------------------------*/

void setup() {
  size (400,400);
  frameRate(45);
  noCursor();
}

void draw () {
  background (150, 200, 255);
  noStroke();
  //Gradient sky
  fill(255, 25);
  rectMode(CORNER);
  rect(0, 100, 400, 300);
  rect(0, 125, 400, 275);
  rect(0, 150, 400, 250);
  rect(0, 165, 400, 235);
  
  //Clouds
  noStroke();
  fill (255);
  ellipse(-250 + (frameCount*.25 % 1000), 50, 200, 15);
  ellipse(-250 + (frameCount*.35 % 1000), 50, 175, 40);
  ellipse(-250 + (frameCount*.5 % 1000), 10, 100, 30);
  ellipse(-250 + (frameCount*.5 % 1000), 20, 200, 30);
  ellipse(-250 + (frameCount*.65 % 1000), 15, 100, 25);
  ellipse(-250 + (frameCount*.75 % 1000), 10, 50, 15);
  ellipse(-250 + (frameCount*.75 % 1000), 17, 75, 18);
  ellipse(-250 + (frameCount*.75 % 1000), 17, 125, 45);
  ellipse(-250 + (frameCount*.95 % 1000), 10, 125, 25);
  ellipse(-250 + (frameCount*.95 % 1000), 20, 200, 45);
  ellipse(-300 + (frameCount % 1000), 30, 200, 70);
    
  //Back Rocks
  noStroke();
  fill (125);
  quad ((frameCount * 1.5 % 1000) - 310, 328, 
        (frameCount * 1.5 % 1000) - 320, 332,
        (frameCount * 1.5 % 1000) - 300, 332,
        (frameCount * 1.5 % 1000) - 310, 329);
        
  quad ((frameCount * 1.5 % 1000) - 410, 338, 
        (frameCount * 1.5 % 1000) - 420, 332,
        (frameCount * 1.5 % 1000) - 400, 332,
        (frameCount * 1.5 % 1000) - 410, 329);

  quad ((frameCount * 1.5 % 1000) - 610, 338, 
        (frameCount * 1.5 % 1000) - 630, 332,
        (frameCount * 1.5 % 1000) - 595, 332,
        (frameCount * 1.5 % 1000) - 600, 329);
  
  //Jeep (TL, BL, BR, TR)
  
  
  //Headlights
  fill(255,231,96,75);
  triangle(mouseX - 600, 220, mouseX - 600, 300, mouseX -50, 250);
  triangle(mouseX - 600, 225, mouseX - 600, 310, mouseX -50, 250);
  triangle(mouseX - 600, 230, mouseX - 600, 315, mouseX -50, 250);
  triangle(mouseX - 600, 235, mouseX - 600, 320, mouseX -50, 250);
  fill(255,231,96,155);
  triangle(mouseX - 600, 245, mouseX - 600, 330, mouseX -50, 250);
  
  //Body
  //top
  stroke(50);                  //accent
  strokeWeight(7);
  line(mouseX - 40, (frameCount % 2) + 190, mouseX + 70, (frameCount % 2) + 190);
  
  noStroke();                 //main body
  fill (243,191,82);
  quad (mouseX - 50, (frameCount % 2) + 190, mouseX -70, (frameCount % 2) + 240, mouseX + 70, (frameCount % 2) + 240, mouseX + 70, (frameCount % 2) + 190);
  //hood
  quad (mouseX - 150, (frameCount % 2) + 235, mouseX - 160, (frameCount % 2) + 280, mouseX - 75, (frameCount % 2) + 280, mouseX - 50, (frameCount % 2) + 230);
  //bottom
  quad (mouseX - 75, (frameCount % 2) + 240, mouseX -75, (frameCount % 2) + 300, mouseX + 70, (frameCount % 2) + 300, mouseX + 70, (frameCount % 2) + 240);
  //trunk
  rectMode(CORNER);
  rect (mouseX + 70,(frameCount % 2) + 245, 80, 47.5);
  
  //cutlines
  stroke(110);
  strokeWeight(1);
  line(mouseX -88, (frameCount % 2) + 230, mouseX - 90, (frameCount % 2) + 241.7);
  line(mouseX - 152, (frameCount % 2) + 242, mouseX - 60, (frameCount % 2) + 240);
  line(mouseX - 45, (frameCount % 2) + 190, mouseX - 60, (frameCount % 2) + 235);
  line(mouseX - 60, (frameCount % 2) + 235, mouseX -60, (frameCount % 2) + 280);
  line(mouseX - 60, (frameCount % 2) + 280, mouseX -55, (frameCount % 2) + 285);
  line(mouseX -55, (frameCount % 2) + 285, mouseX -15, (frameCount % 2) + 285);
  line(mouseX - 15, (frameCount % 2) + 285, mouseX - 10, (frameCount % 2) + 283);
  line(mouseX - 10, (frameCount % 2) + 283, mouseX + 10, (frameCount % 2) + 270);
  line(mouseX + 10, (frameCount % 2) + 270, mouseX + 12, (frameCount % 2) + 268);
  line(mouseX + 12, (frameCount % 2) + 268, mouseX + 12, (frameCount % 2) + 190);
  
  line(mouseX + 15, (frameCount % 2) + 190, mouseX + 15, (frameCount % 2) + 278);
  line(mouseX + 15, (frameCount % 2) + 278, mouseX + 17, (frameCount % 2) + 280);
  line(mouseX + 17, (frameCount % 2) + 280, mouseX + 23, (frameCount % 2) + 285);
  line(mouseX + 17, (frameCount % 2) + 280, mouseX + 23, (frameCount % 2) + 285);
  line(mouseX + 23, (frameCount % 2) + 285, mouseX + 45, (frameCount % 2) + 285);
  line(mouseX + 45, (frameCount % 2) + 285, mouseX + 48, (frameCount % 2) + 283);
  line(mouseX + 48, (frameCount % 2) + 283, mouseX + 65, (frameCount % 2) + 260);
  line(mouseX + 65, (frameCount % 2) + 260, mouseX + 68, (frameCount % 2) + 253);
  line(mouseX + 68, (frameCount % 2) + 253, mouseX + 68, (frameCount % 2) + 190);
  
  
  //rack
  noStroke();
  fill(75);
  // ||
  rect(mouseX + 70,(frameCount % 2) + 190,10,55);
  fill(50);
  // --
  rect(mouseX + 80,(frameCount % 2) + 192.5,25,10);
  quad(mouseX + 105, (frameCount % 2) + 192.5, mouseX + 105, (frameCount % 2) + 202.5, mouseX + 132.5, (frameCount % 2) + 245, mouseX + 140, (frameCount % 2) + 245);
  
  //windows
  //left
  quad(mouseX - 40, (frameCount % 2) + 195, mouseX - 53, (frameCount % 2) + 235, mouseX + 6, (frameCount % 2) + 235, mouseX + 7, (frameCount % 2) + 195);
  fill(75);
  quad(mouseX - 35, (frameCount % 2) + 200, mouseX - 46, (frameCount % 2) + 230, mouseX + 1, (frameCount % 2) + 230, mouseX +2, (frameCount % 2) + 200);
  //right
  fill(50);
  quad(mouseX + 20, (frameCount % 2) + 195, mouseX + 20, (frameCount % 2) + 235, mouseX + 63, (frameCount % 2) + 235, mouseX + 63, (frameCount % 2) + 195);
  fill(75);
  quad(mouseX + 25, (frameCount % 2) + 200, mouseX + 25, (frameCount % 2) + 230, mouseX + 58, (frameCount % 2) + 230, mouseX + 58, (frameCount % 2) + 200);
  
  //under
  fill(37);
  quad(mouseX - 160, (frameCount % 2) + 248, mouseX - 165, (frameCount % 2) + 285, mouseX - 80, (frameCount % 2) + 300, mouseX - 90, (frameCount % 2) + 248);
  quad(mouseX + 80, (frameCount % 2) + 255, mouseX + 50, (frameCount % 2) + 300, mouseX + 145, (frameCount % 2) + 295, mouseX + 120, (frameCount % 2) + 255);
  
  //bumpers
  fill(75);
  quad(mouseX - 170, (frameCount % 2) + 275, mouseX -170, (frameCount % 2) + 285, mouseX - 160, (frameCount % 2) + 285, mouseX - 160, (frameCount % 2) + 275);
  fill(50);
  quad(mouseX - 160, (frameCount % 2) + 248, mouseX - 165, (frameCount % 2) + 285, mouseX -155, (frameCount % 2) + 285, mouseX - 150, (frameCount % 2) + 248);
  quad(mouseX - 150, (frameCount % 2) + 248, mouseX - 152, (frameCount % 2) + 260, mouseX - 90, (frameCount % 2) + 260, mouseX - 90, (frameCount % 2) + 248);
  quad(mouseX - 90, (frameCount % 2) + 248, mouseX - 95, (frameCount % 2) + 260, mouseX - 80, (frameCount % 2) + 300, mouseX - 70,(frameCount % 2) + 300);
  quad(mouseX - 75, (frameCount % 2) + 290, mouseX - 75, (frameCount % 2) + 300, mouseX + 60, (frameCount % 2) + 300, mouseX + 60, (frameCount % 2) + 290);
  quad(mouseX + 55, (frameCount % 2) + 290, mouseX + 60, (frameCount % 2) + 300, mouseX + 90, (frameCount % 2) + 255, mouseX + 80, (frameCount % 2) + 255);
  quad(mouseX + 90, (frameCount % 2) + 255, mouseX + 80, (frameCount % 2) + 265, mouseX + 130, (frameCount % 2) + 265, mouseX + 130, (frameCount % 2) + 255);
  quad(mouseX + 130, (frameCount % 2) + 255, mouseX + 125, (frameCount % 2) + 265, mouseX + 135, (frameCount % 2) + 295, mouseX + 145, (frameCount % 2) + 295);
  quad(mouseX + 140, (frameCount % 2) + 285, mouseX + 145, (frameCount % 2) + 295, mouseX + 153, (frameCount % 2) + 295, mouseX + 153, (frameCount % 2) + 285);
  
  //wheelLeft;
  noStroke();
  ellipseMode(CORNER);
  //outer
  fill (25);
  ellipse (mouseX -153, (frameCount % 2) + 270, 65, 65);
  //middle
  fill (75);
  ellipse (mouseX - 150.5, (frameCount % 2) + 272.5, 60, 60);
  //inner
  fill (25);
  ellipse (mouseX - 145.5, (frameCount % 2) + 277.5, 50, 50);
  
  //wheelRight;
  //outer
  fill (25);
  ellipse (mouseX + 68, (frameCount % 2) + 270, 65, 65);
  //middle
  fill (75);
  ellipse (mouseX + 70.5, (frameCount % 2) + 272.5, 60, 60);
  //inner
  fill (25);
  ellipse (mouseX + 75.5, (frameCount % 2) + 277.5, 50, 50);
  
  //Rocks (front);
  
  noStroke();
  fill (170);
  quad ((frameCount * 2 % 1000) -250, 323, 
        (frameCount * 2 % 1000) - 253, 332,
        (frameCount * 2 % 1000) - 210, 332,
        (frameCount * 2 % 1000) - 223, 318);
        
  quad ((frameCount * 2 % 1000) - 260, 323, 
        (frameCount * 2 % 1000) - 270, 332,
        (frameCount * 2 % 1000) - 215, 332,
        (frameCount * 2 % 1000) - 220, 315);
  
  ellipse((frameCount * 2 % 1000) - 350, 328, 20, 10);      

        
  quad ((frameCount * 2 % 1000) - 380, 328, 
        (frameCount * 2 % 1000) - 390, 332,
        (frameCount * 2 % 1000) - 365, 332,
        (frameCount * 2 % 1000) - 375, 326);
        
  quad ((frameCount * 2 % 1000) - 400, 323, 
        (frameCount * 2 % 1000) - 415, 332,
        (frameCount * 2 % 1000) - 380, 332,
        (frameCount * 2 % 1000) - 390, 315);

  quad ((frameCount * 2 % 1000) - 600, 315, 
        (frameCount * 2 % 1000) - 620, 332,
        (frameCount * 2 % 1000) - 570, 332,
        (frameCount * 2 % 1000) - 590, 317);
  
  //soil
  fill (78,53,40);
  
  rect(0, 332, 400, 100);
}