/* ------------------------------------------------------------------------------------- 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); }