/*
Interative Drawing - The Spoopy (Not so) Forest
By Robert Orange
*/
void setup()
{
size(600,400);
rectMode(CORNERS);
ellipseMode(CENTER);
noStroke();
//Remove cursor.
noCursor();
frameRate(25);
}
void draw()
{
rectMode(CORNERS);
//Redraw the background.
background(0);
//NIGHTTIME BACKGROUND ----------
//Replace the background with a blue gradient background to simulate night time.
fill(50,50,100);
rect(0,0,600,75);
fill(30,30,90);
rect(0,75,600,225);
fill(10,10,70);
rect(0,225,600,400);
//Grass
fill(10,45,20);
rect(0,250,600,400);
//Water
fill(10,20,60);
quad(-40-mouseX/6,250,20-mouseX/6,250,40-mouseX/10,400,-80-mouseX/10,400);
//TREES LAYERS
rectMode(CORNERS);
fill(10,5,10);
//LAYER 1
//1st Tree
rect(75-mouseX/4,250,120-mouseX/4,0);
triangle(50-mouseX/4,250,75-mouseX/4,210,75-mouseX/4,250);
triangle(120-mouseX/4,250,120-mouseX/4,210,145-mouseX/4,250);
//2nd Tree
rect(145-mouseX/4,250,195-mouseX/4,0);
triangle(120-mouseX/4,250,145-mouseX/4,230,145-mouseX/4,250);
triangle(195-mouseX/4,250,195-mouseX/4,230,215-mouseX/4,250);
quad(195-mouseX/4,30,195-mouseX/4,10,215-mouseX/4,0,230-mouseX/4,0);
//3rd Tree
rect(250-mouseX/4,250,270-mouseX/4,0);
triangle(225-mouseX/4,250,250-mouseX/4,210,250-mouseX/4,250);
triangle(270-mouseX/4,250,270-mouseX/4,210,295-mouseX/4,250);
//4th Tree
rect(320-mouseX/4,250,345-mouseX/4,0);
triangle(295-mouseX/4,250,320-mouseX/4,210,320-mouseX/4,250);
triangle(345-mouseX/4,250,345-mouseX/4,210,365-mouseX/4,250);
//4th Tree
rect(375-mouseX/4,250,430-mouseX/4,0);
triangle(350-mouseX/4,250,375-mouseX/4,210,375-mouseX/4,250);
triangle(430-mouseX/4,250,430-mouseX/4,210,455-mouseX/4,250);
//LAYER 2
/*Draw a hovering ghost Behind the 2nd layer of trees.
Ghost moves when the mouse moves*/
fill(10,75);
//Draw ghost body
ellipse(width/2+mouseX-mouseY,170+5*sin(frameCount/5),100,150);
ellipse(width/2+mouseX-mouseY,170+5*sin(frameCount/5.5),110,160);
fill(100,0,0,50);
//Draw Ghost eyes
ellipse(-20+width/2+mouseX-mouseY,130+5*sin(frameCount/5.5),20,20);
ellipse(-20+width/2+mouseX-mouseY,130+5*sin(frameCount/5.5),25,25);
ellipse(20+width/2+mouseX-mouseY,130+5*sin(frameCount/5.5),20,20);
ellipse(20+width/2+mouseX-mouseY,130+5*sin(frameCount/5.5),25,25);
//Draw Ghost eye trails
ellipse(-20+width/2+pmouseX-pmouseY,130+5*sin(frameCount/5.5),20,20);
ellipse(20+width/2+pmouseX-pmouseY,130+5*sin(frameCount/5.5),20,20);
//1st Tree
fill(30,25,10);
rect(40-mouseX/6,270,110-mouseX/6,0);
triangle(25-mouseX/6,270,50-mouseX/6,225,50-mouseX/6,270);
triangle(100-mouseX/6,270,100-mouseX/6,225,125-mouseX/6,270);
//2nd Tree
rect(220-mouseX/6,270,270-mouseX/6,0);
triangle(195-mouseX/6,270,220-mouseX/6,195,220-mouseX/6,270);
triangle(270-mouseX/6,270,270-mouseX/6,195,295-mouseX/6,270);
quad(220-mouseX/6,70,220-mouseX/6,25,200-mouseX/6,0,180-mouseX/6,0);
//3rd Tree
rect(290-mouseX/6,270,360-mouseX/6,0);
triangle(265-mouseX/6,270,290-mouseX/6,190,385-mouseX/6,270);
triangle(360-mouseX/6,270,360-mouseX/6,190,385-mouseX/6,270);
//LAYER 3
/*Nothing here cause drawing all of the trees takes forever
and would be nicer with loops. #Lazy4Lyf
Wake me up inside*/
//LAYER 4
//Bush 1
fill(32,80,27);
ellipse(600-mouseX/11,400,200,150);
ellipse(575-mouseX/11,340,100,50);
ellipse(625-mouseX/11,340,100,50);
fill(45,90,42);
ellipse(550-mouseX/12,375,100,75);
ellipse(625-mouseX/12,375,100,75);
ellipse(600-mouseX/12,325,75,50);
strokeWeight(5);
stroke(95,85,45);
line(600-mouseX/11,400,550-mouseX/13,350);
stroke(103,92,48);
line(595-mouseX/12,395,630-mouseX/13,350);
noStroke();
fill(60,98,56);
ellipse(590-mouseX/13,350,100,75);
// LIGHT ------------------------
/*
Draw the light that follows the cursor
only when the mouse is pressed.
Slight drag on the light to simulate distance.
Can't wake up*/
if(mousePressed)
{
fill(255,255,70,5+mouseY/15);
ellipse(pmouseX,pmouseY + 7, 200 + mouseY/4, 185 +mouseY/6);
ellipse(pmouseX,pmouseY + 5, 165 + mouseY/4, 150 +mouseY/6);
ellipse(pmouseX,pmouseY + 5, 155 + mouseY/4, 140 +mouseY/6);
ellipse(pmouseX,pmouseY + 5, 150 + mouseY/4, 135 +mouseY/6);
//Change fill to be whiter.
fill(255,255,150,15+mouseY/15);
ellipse(pmouseX,pmouseY, 70 + mouseY/6, 67 +mouseY/8);
ellipse(pmouseX,pmouseY, 65 + mouseY/6, 62 +mouseY/8);
ellipse(pmouseX,pmouseY, 55 + mouseY/6, 52 +mouseY/8);
ellipse(pmouseX,pmouseY, 50 + mouseY/6, 47 +mouseY/8);
//BRIGHTNESS INTENSIFIES.
fill(255,255,220,30+mouseY/15);
ellipse(pmouseX,pmouseY, 45 + mouseY/9, 42 +mouseY/10);
ellipse(pmouseX,pmouseY, 35 + mouseY/9, 32 +mouseY/10);
ellipse(pmouseX,pmouseY, 30 + mouseY/9, 27 +mouseY/10);
}
//FLASHLIGHT ----------------
rectMode(CENTER);
translate(width/2,height+25);
//Rotate the flashlight to follow the cursor's position.
rotate(atan2( mouseY - height,mouseX - width/2));
//Draw the Light emitted from flashlight.
if(mousePressed)
{
fill(255,255,220,70);
quad(50,25,50,-25,100,-50,100,50);
quad(50,25,50,-25,105,-105/2,105,105/2);
fill(255,255,150,30);
triangle(50,0,50,25,130,130/2);
triangle(50,0,50,-25,130,-130/2);
quad(50,25,50,-25,125,-125/2,125,125/2);
quad(50,25,50,-25,130,-130/2,130,130/2);
fill(255,255,70,10);
quad(50,25,50,-25,150,-75,150,75);
quad(50,25,50,-25,155,-155/2,155,155/2);
}
fill(90);
ellipse(60,0,60,60);
fill(100);
ellipse(50,0,50,60);
rect(0,0,100,50);
}