/*
Man Dying Horribly
Shawn Morey P01
-Move the mouse left and right to scroll the background
-Move the mouse up and down to watch the man slowly be submerged in lava as his soul leaves his body
*/
void setup()
{
size(400, 400);
noStroke();
rectMode(CORNER);
ellipseMode(CORNER);
}
void draw()
{
//BG Layer 1
//Draws the background
background(#6A1712);
//BG Layer 2
//Moving mouse left and right moves the background on the x axis
//Ridges are ordered from left to right
fill(#93342F);
rect(-25 + mouseX/8, 180, 400, 100);
rect(-50 + mouseX/8, 120, 25, 160);
quad(-25 + mouseX/8, 120, -5 + mouseX/8, 140, -5 + mouseX/8, 180, -25 + mouseX/8, 180);
rect(-5 + mouseX/8, 140, 20, 40);
triangle(15 + mouseX/8, 140, 55 + mouseX/8, 180, 15 + mouseX/8, 180);
triangle(75 + mouseX/8, 180, 95 + mouseX/8, 180, 95 + mouseX/8, 160);
rect(95 + mouseX/8, 160, 20, 20);
triangle(115 + mouseX/8, 180, 115 + mouseX/8, 160, 135 + mouseX/8, 180);
triangle(155 + mouseX/8, 180, 195 + mouseX/8, 180, 195 + mouseX/8, 140);
rect(195 + mouseX/8, 140, 20, 40);
quad(215 + mouseX/8, 140, 235 + mouseX/8, 160, 235 + mouseX/8, 180, 215 + mouseX/8, 180);
rect(235 + mouseX/8, 160, 40, 20);
triangle(275 + mouseX/8, 160, 275 + mouseX/8, 180, 295 + mouseX/8, 180);
triangle(315 + mouseX/8, 180, 335 + mouseX/8, 180, 335 + mouseX/8, 160);
rect(335 + mouseX/8, 160, 20, 20);
quad(355 + mouseX/8, 180, 355 + mouseX/8, 160, 375 + mouseX/8, 140, 375 + mouseX/8, 180);
rect(375 + mouseX/8, 140, 25, 140);
//BG Layer 3
//Moving mouse left and right moves the background on the x axis
//Moves at half the rate than BG layer 2 for a paralax effect
//Ridges are ordered from left to right
fill(#AD5652);
rect(-50 + mouseX/4, 260, 400, 100);
rect(-100 + mouseX/4, 200, 50, 140);
rect(350 + mouseX/4, 200, 50, 140);
rect(-50 + mouseX/4, 200, 20, 60);
quad(-30 + mouseX/4, 200, 10 + mouseX/4, 240, 10 + mouseX/4, 260, -30 + mouseX/4, 260);
rect(10 + mouseX/4, 240, 40, 20);
triangle(50 + mouseX/4, 240, 70 + mouseX/4, 260, 50 + mouseX/4, 260);
triangle(90 + mouseX/4, 260, 110 + mouseX/4, 260, 110 + mouseX/4, 240);
rect(110 + mouseX/4, 240, 40, 20);
quad(150 + mouseX/4, 240, 170 + mouseX/4, 220, 170 + mouseX/4, 260, 150 + mouseX/4, 260);
rect(170 + mouseX/4, 220, 20, 40);
quad(190 + mouseX/4, 220, 210 + mouseX/4, 240, 210 + mouseX/4, 260, 190 + mouseX/4, 260);
rect(210 + mouseX/4, 240, 20, 20);
triangle(230 + mouseX/4, 240, 250 + mouseX/4, 260, 230 + mouseX/4, 260);
triangle(270 + mouseX/4, 260, 310 + mouseX/4, 220, 310 + mouseX/4, 260);
rect(310 + mouseX/4, 220, 20, 40);
quad(330 + mouseX/4, 220, 350 + mouseX/4, 200, 350 + mouseX/4, 260, 330 + mouseX/4, 260);
//Soul
//As mouseY increases it will move up the screen in a sine wave pattern
//Body
fill(#2ED1FC);
rect(170 + 15*sin(mouseY * 0.04), (70 - mouseY * 1.1) + 300, 60, 35);
triangle(170 + 15*sin(mouseY * 0.04), (100 - mouseY * 1.1) + 300, 170 + 15*sin(mouseY * 0.04), (120 - mouseY * 1.1) + 300, 200 + 15*sin(mouseY * 0.04), (100 - mouseY * 1.1) + 300);
triangle(170 + 15*sin(mouseY * 0.04), (100 - mouseY * 1.1) + 300, 200 + 15*sin(mouseY * 0.04), (120 - mouseY * 1.1) + 300, 230 + 15*sin(mouseY * 0.04), (100 - mouseY * 1.1) + 300);
triangle(200 + 15*sin(mouseY * 0.04), (100 - mouseY * 1.1) + 300, 230 + 15*sin(mouseY * 0.04), (100 - mouseY * 1.1) + 300, 230 + 15*sin(mouseY * 0.04), (120 - mouseY * 1.1) + 300);
ellipse(170 + 15*sin(mouseY * 0.04), (40 - mouseY * 1.1) + 300, 60, 60);
//Face
fill(#B4E7FF);
ellipse(175 + 15*sin(mouseY * 0.04), (45 - mouseY * 1.1) + 300, 50, 50);
fill(#2ED1FC);
ellipse(180 + 15*sin(mouseY * 0.04), (60 - mouseY * 1.1) + 300, 10, 10);
ellipse(210 + 15*sin(mouseY * 0.04), (60 - mouseY * 1.1) + 300, 10, 10);
arc(190 + 15*sin(mouseY * 0.04), (70 - mouseY * 1.1) + 300, 20, 20, PI, PI*2);
//Smoke
//rotates constantly and increases in size as mouseY increases
//rectMode is temporarily set to CENTER to make rotating easier
//change origin to center of each smoke puff
//convert degrees to radians for simplicity
rectMode(CENTER);
fill(80);
pushMatrix();
translate(70, 310);
rotate(radians(-frameCount));
rect(0, 0, 10 + (mouseY * 0.01), 10 + (mouseY * 0.01), 3);
popMatrix();
pushMatrix();
translate(70, 280);
rotate(radians(-frameCount));
rect(0, 0, 20 + (mouseY * 0.01), 20 + (mouseY * 0.01), 3);
popMatrix();
pushMatrix();
translate(330, 310);
rotate(radians(frameCount));
rect(0, 0, 10 + (mouseY * 0.01), 10 + (mouseY * 0.01), 3);
popMatrix();
pushMatrix();
translate(330, 280);
rotate(radians(frameCount));
rect(0, 0, 20 + (mouseY * 0.01), 20 + (mouseY * 0.01), 3);
popMatrix();
rectMode(CORNER);
//Man
//sinks into the lava and darkens as mouseY increases
//Body and Head
fill(230 - mouseY * 0.3);
rect(180, 300 + 0.02*mouseY, 40, 50);
ellipse(170, 250 + 0.02*mouseY, 60, 60);
fill(255 - mouseY * 0.3);
ellipse(175, 255 + 0.02*mouseY, 50, 50);
//Face
//does not move to create the illusion that he is tiliting his head
fill(220 - mouseY * 0.3);
ellipse(180, 265, 10, 10);
ellipse(210, 265, 10, 10);
arc(190, 270, 20, 20, PI, PI*2);
//Hands
//raises hands as he sinks
ellipse(148, 290 - 0.03*mouseY, 20, 20);
ellipse(232, 290 - 0.03*mouseY, 20, 20);
//Lava
//Lava rises and becomes more yellow as mouseY increases
fill(237, 115 + mouseY * 0.06, 67);
rect(0, 340 - 0.03 *mouseY, 400, 80);
//Lava Surface
ellipse(-20, 330 - 0.03*mouseY, 40, 20);
ellipse(20, 330 - 0.03*mouseY, 40, 20);
ellipse(60, 330 - 0.03*mouseY, 40, 20);
ellipse(100, 330 - 0.03*mouseY, 40, 20);
ellipse(140, 330 - 0.03*mouseY, 40, 20);
ellipse(180, 330 - 0.03*mouseY, 40, 20);
ellipse(220, 330 - 0.03*mouseY, 40, 20);
ellipse(260, 330 - 0.03*mouseY, 40, 20);
ellipse(300, 330 - 0.03*mouseY, 40, 20);
ellipse(340, 330 - 0.03*mouseY, 40, 20);
ellipse(380, 330 - 0.03*mouseY, 40, 20);
}