////////////////////////////////////////////////////
//*Mower Vs. UFO ///////////////////////////////////
//*An interactive toy created in Processing 2.2.1///
//*By Saahil Dhar///////////////////////////////////
////////////////////////////////////////////////////
float g=0;
float m=-40;
float w= mouseX;
////////////////
/**************/
/*WINDOW SETUP*/
/**************/
////////////////
void setup() {
size(800, 500);
smooth();
frameRate(30);
background(#D8EAFF);
println("Use arrow keys to move the mower.");
println("Use the mouse to move the UFO.");
println("Click and hold the Left mouse button to grow grass under the UFO.");
ellipseMode(CENTER);
rectMode(CORNERS);
drawSun();
drawClouds();
}
//////////////
/************/
/*PRIME LOOP*/
/************/
//////////////
void draw() {
//////////////////////
//DRAW INTITAL GRASS//
//////////////////////
while (g<width) {
drawGrass();
g=g+10;
}
///////
//UFO//
///////
drawUFO();
updateUFO();
/////////////////
//CONTROL MOWER//
/////////////////
if (keyPressed) {
mowerMoving();
}
//////////////
//GROW GRASS//
//////////////
if (mousePressed) {
drawGrowth();
}
}
////////////////////
/******************/
/*STATIC FUNCTIONS*/
/******************/
////////////////////
/////////
//GRASS//
/////////
void drawGrass() {
noStroke();
fill(0, 255, 0);
triangle(g, 450, g+10, 450, random (g, g+10), random(400, 450));
rect(0, 450, 800, 500);
}
///////
//SUN//
///////
void drawSun() {
noStroke();
fill(#E3F0FF);
ellipse(100, 50, 400, 400);
fill(235, 255, 108, 50);
ellipse(100, 50, 200, 200);
fill(235, 255, 108, 150);
ellipse(100, 50, 100, 100);
fill(255);
ellipse(100, 50, 60, 60);
}
//////////
//CLOUDS//
//////////
void drawClouds() {
noStroke();
fill(255);
//top right
ellipse(780, 80, 360, 120);
ellipse(660, 100, 220, 80);
//mid
ellipse(430, 170, 100, 40);
ellipse(470, 190, 100, 30);
ellipse(385, 195, 110, 35);
//top mid
ellipse(345, 45, 50, 20);
ellipse(365, 50, 40, 10);
//left
ellipse(10, 160, 200, 70);
ellipse(80, 170, 140, 50);
}
/////////
//MOWER//
/////////
//MOWER GOING RIGHT//
void drawMowerRight() {
noStroke();
//BODY//
fill(#B70D18);
rect(m-100, 410, m, 445);
rect(m-30, 400, m-20, 410);
arc(m+20, 445, 40, 40, PI+HALF_PI, TWO_PI);
fill(0);
quad(m, 420, m, 410, m-20, 410, m-10, 420);
rect(m-20, 400, m-10, 410);
fill(0);
arc(m-10, 410, 20, 20, PI+HALF_PI, TWO_PI);
//MOTOR//
fill(0);
quad(m-80, 390, m-70, 400, m-40, 370, m-80, 370);
rect(m-70, 390, m-30, 410);
fill(#838383);
quad(m-40, 370, m-40, 390, m-25, 390, m-25, 380);
rect(m-60, 370, m-40, 390);
//BAG//
fill(#474848);
quad(m-160, 370, m-160, 430, m-100, 430, m-100, 390 );
//HANDLE//
fill(#CDD1D8);
quad(m-100, 390, m-100, 395, m-185, 310, m-180, 310);
fill(0);
quad(m-100, 390, m-110, 400, m-90, 420, m-80, 410);
quad(m-180, 310, m-185, 305, m-210, 305, m-210, 310);
//WHEELS//
fill(#482727);
ellipse(m+10, 430, 40, 40);
ellipse(m-100, 430, 40, 40);
//CORDS//
fill(0);
stroke(0);
line(m-80, 370, m-180, 310);
line(m-80, 390, m-90, 400);
}
//MOWER GOING LEFT//
void drawMowerLeft() {
noStroke();
//BODY//
fill(#B70D18);
rect(m-185, 410, m-85, 445);
rect(m-165, 400, m-155, 410);
arc(m-205, 445, 40, 40, PI, PI+HALF_PI);
fill(0);
quad(m-185, 420, m-185, 410, m-165, 410, m-175, 420);
rect(m-165, 400, m-175, 410);
fill(0);
arc(m-175, 410, 20, 20, PI, PI+HALF_PI);
//MOTOR//
fill(0);
quad(m-105, 390, m-115, 400, m-145, 370, m-105, 370);
rect(m-115, 390, m-155, 410);
fill(#838383);
quad(m-145, 370, m-145, 390, m-160, 390, m-160, 380);
rect(m-125, 370, m-145, 390);
//BAG//
fill(#474848);
quad(m-25, 370, m-25, 430, m-85, 430, m-85, 390 );
//HANDLE//
fill(#CDD1D8);
quad(m-85, 390, m-85, 395, m, 310, m-5, 310);
fill(0);
quad(m-85, 390, m-75, 400, m-95, 420, m-105, 410);
quad(m-5, 310, m, 305, m+25, 305, m+25, 310);
//WHEELS//
fill(#482727);
ellipse(m-195, 430, 40, 40);
ellipse(m-85, 430, 40, 40);
//CORDS//
fill(0);
stroke(0);
line(m-105, 370, m-5, 310);
line(m-105, 390, m-95, 400);
}
////////////////////
/******************/
/*UPDATE FUNCTIONS*/
/******************/
////////////////////
///////////////
//MOWER MOVING//
////////////////
void mowerMoving() {
if (keyCode==RIGHT) {
drawMowRight();
drawMowerRight();
m=m+5;
} else
if (keyCode==LEFT) {
drawMowLeft();
drawMowerLeft();
m=m-5;
} else {
drawMowRight();
drawMowerRight();
}
}
/////////////
//MOWN LAWN//
/////////////
void drawMowRight() {
noStroke();
fill(#D8EAFF);
rect(m-225, 300, m+40, 445);
fill(#D8EAFF);
rect(m-210, 445, m+10, 450);
}
void drawMowLeft() {
noStroke();
fill(#D8EAFF);
rect(m+40, 300, m-215, 445);
fill(#D8EAFF);
rect(m+25, 445, m-190, 450);
}
/////////////////
//GROWING GRASS//
/////////////////
void drawGrowth() {
noStroke();
fill(0, 255, 0);
triangle(w, 450, w+10, 450, random (w, w+10), random(400, 450));
}
///////
//UFO//
///////
void drawUFO() {
noStroke();
fill(#D8EAFF);
rect(0, 250, 800, 300);
noStroke();
fill(#909090);
ellipse (w, 270, 90, 20);
fill(0);
arc(w, 261, 30, 20, PI, TWO_PI);
fill(255);
arc(w-5, 258, 10, 7, PI, PI+HALF_PI+QUARTER_PI);
fill(#92FF3B);
triangle(w, 290, w+15, 280, w-15, 280);
fill(#909090);
triangle(w-20, 275, w-15, 275, w-2.5, 290);
triangle(w+20, 275, w+15, 275, w+2.5, 290);
fill(0);
rect(w-2.5, 287, w+2.5, 290);
}
void updateUFO() {
w=constrain(mouseX, 0, 800);
}