/*
Living + Dead Cities
Evan McQueen, 2018-09-18
Simple image of a modern day city. Moving mouse to the left will reveal
an alternate destroyed version, with a significantly different atmosphere.
*/
void setup(){
size (400, 400);
}
void draw(){
background(92, 171, 227);
//background(61, 60, 70); RGB for night time version
//Sunset Gradient (Purple glow behind city, thought it looked neat)
fill(153, 133, 204);
rect(0, 330, 400, 30);
fill(153, 133, 204, 200);
rect(0, 310, 400, 20);
fill(153, 133, 204, 150);
rect(0, 290, 400, 20);
fill(153, 133, 204, 100);
rect(0, 270, 400, 20);
fill(153, 133, 204, 50);
rect(0, 250, 400, 20);
fill(153, 133, 204, 25);
rect(0, 230, 400, 20);
noStroke();
// NON DESTROYED VERSION \\
//Buildings so far in the background they need another section
fill(25, 43, 62);
rect(280, 280, 20, 80);
fill(52, 73, 90);
triangle(280, 280, 300, 280, 290, 270);
//Monorail Track
fill(20, 28, 46, mouseX);
rect(0, 275, 500, 3);
//Train
fill(5, 16, 30, mouseX);
rect((140-(tan(frameCount * 0.003) * 200)), 272, 40, 3);
//Background Buildings (i.e misc, tend to be smaller + closer to ground)
fill(20, 28, 46);
rect(80, 280, 20, 80);
fill(10, 47, 69);
rect(95, 250, 30, 110);
fill(5, 104, 139);
rect(95, 250, 30, 15);
fill(67, 107, 120);
rect(170, 320, 50, 40);
fill(47, 51, 84);
rect(15, 300, 10, 60);
fill(20, 28, 46);
rect(240, 310, 15, 50);
//A (Biggest one, has an antenna)
fill(155, 196, 221, mouseX);
triangle(130, 140, 150, 140, 140, 320);
fill(3, 92, 155, mouseX);
triangle(130, 140, 120, 260, 140, 280);
fill(10, 114, 168, mouseX);
triangle(150, 140, 160, 263, 140, 280);
fill(0, 27, 66, mouseX);
rect(130, 135, 20, 5);
rect(133, 132, 14, 5);
triangle(138, 132, 142, 132, 140, 60);
fill(3, 80, 114, mouseX);
ellipse(138, 265, 35, 35);
//line(130, 120, 150, 120);
//C (Furthest to right)
fill(9, 95, 150, mouseX);
quad(360, 177, 390, 170, 390, 320, 360, 320);
fill(66, 151, 193, mouseX);
quad(390, 170, 420, 180, 420, 320, 390, 320);
//B (Just left of C, partially covering it in fact)
fill(1, 54, 98, mouseX);
rect(330, 160, 20, 150);
fill(113, 168, 192, mouseX);
quad(350, 160, 365, 165, 365, 320, 350, 320);
//Buildings just beneath / in front of C
fill(95, 77, 69, mouseX);
rect(385, 270, 20, 90);
fill(107, 96, 96, mouseX);
rect(350, 300, 20, 60);
fill(51, 35, 45, mouseX);
rect(370, 300, 20, 60);
//E (Almost the leftmost, has a pyramid on top)
fill(1, 82, 111, mouseX);
triangle(30, 240, 59, 240, 55, 225);
fill(8, 97, 123, mouseX);
triangle(58, 240, 75, 243, 55, 225);
fill(56, 95, 119, mouseX);
rect(30, 240, 28, 25);
fill(108, 151, 161, mouseX);
quad(58, 240, 75, 243, 75, 265, 58, 265);
fill(56, 95, 119, mouseX);
rect(25, 260, 30, 100);
fill(108, 151, 161, mouseX);
quad(55, 260, 80, 263, 80, 360, 55, 360);
//G (Plain looking thin tall one to the right of A)
fill(47, 74, 100, mouseX);
rect(210, 220, 10, 100);
fill(76, 116, 129, mouseX);
quad(220, 220, 230, 222, 230, 320, 220, 320);
fill(65, 69, 79);
rect(200, 290, 20, 70);
fill(44, 69, 79);
quad(220, 290, 245, 292, 245, 360, 220, 360);
//H (To the right of G)
fill(18, 64, 94, mouseX);
quad(268, 230, 277, 233, 277, 265, 268, 265);
fill(59, 86, 105, mouseX);
rect(253, 230, 15, 30);
fill(59, 86, 105, mouseX);
rect(250, 260, 20, 100);
fill(18, 64, 94, mouseX);
quad(270, 260, 280, 263, 280, 360, 270, 360);
fill(48, 92, 97, mouseX);
triangle(253, 230, 268, 230, 265, 210);
fill(47, 134, 135, mouseX);
triangle(268, 230, 277, 233, 265, 210);
//D (Building with ball on top in front of B)
fill(3, 85, 118, mouseX);
ellipse(335, 245, 45, 45);
fill(26, 93, 145, mouseX);
rect(310, 240, 30, 120);
fill(75, 94, 120, mouseX);
quad(340, 240, 360, 245, 360, 360, 340, 360);
//Building in front of D
fill(117, 144, 171, mouseX);
rect(295, 300, 25, 60);
fill(64, 96, 121, mouseX);
rect(320, 300, 15, 60);
//I (Leftmost building, tan coloured)
fill(191, 203, 185, mouseX);
rect(0, 220, 10, 40);
fill(75, 86, 100, mouseX);
rect(0, 220, 10, 10);
//Even more tan building peeking over I
fill(131, 130, 125, mouseX);
rect(0, 260, 20, 100);
fill(5, 54, 83, mouseX);
rect(0, 255, 15, 5);
//Stadium (That black orb down there)
fill(5, 16, 30);
ellipse(95, 355, 40, 40);
//F (Building with ball on top in front of A)
fill(131, 157, 171);
rect(115, 260, 25, 80);
fill(76, 116, 135);
quad(140, 260, 165, 263, 165, 285, 140, 285);
fill(122, 135, 154);
rect(110, 280, 35, 80);
fill(39, 64, 86);
quad(170, 283, 170, 360, 145, 360, 145, 280);
quad(160, 300, 180, 303, 180, 360, 160, 360);
//Buildings on road
fill(43, 79, 99);
rect(0, 325, 35, 35);
fill(51, 54, 71);
rect(0, 350, 170, 10);
fill(77, 112, 139);
rect(170, 340, 15, 20);
fill(14, 21, 31);
rect(185, 340, 10, 20);
//Road
rect(0, 358, 400, 2);
//Trees
fill(61, 128, 47, mouseX);
rect(237, 350, 7, 7, 3);
rect(252, 350, 7, 7, 3);
rect(267, 350, 7, 7, 3);
rect(282, 350, 7, 7, 3);
rect(307, 350, 7, 7, 3);
rect(322, 350, 7, 7, 3);
rect(347, 350, 7, 7, 3);
//Cars
fill(245, 52, 75, mouseX);
rect(-(140-(tan(frameCount * 0.015) * 400)), 356, 4, 2);
rect(140-(tan(frameCount * 0.020) * 100), 356, 4, 2);
fill(223, 222, 133, mouseX);
rect(-(300-(tan(frameCount * 0.015) * 400)), 356, 4, 2);
fill(137, 223, 133, mouseX);
rect(20-(tan(frameCount * 0.015) * 400), 356, 4, 2);
//Lights (On A's antenna)
fill(234, 28, 28, (5 - (sin(frameCount * 0.045) * 50)) - (350 - mouseX));
ellipse(140, 60, 4, 4);
ellipse(140, 80, 6, 6);
//Lake
fill(28, 125, 175);
rect(0, 360, 400, 40);
//Lake Gradient
fill(1, 96, 152, 175);
rect(0, 360, 400, 10);
fill(1, 96, 152, 100);
rect(0, 370, 400, 10);
fill(1, 96, 152, 50);
rect(0, 380, 400, 10);
// DESTROYED VERSION \\
//I won't explain each comment because they are the same as the normal version
//Sunset Gradient
fill(38, 38, 38, 255 / 1.5 - mouseX);
rect(0, 330, 400, 30);
fill(38, 38, 38, 255 / 2 - mouseX);
rect(0, 310, 400, 20);
fill(38, 38, 38, 255 / 2.5 - mouseX);
rect(0, 290, 400, 20);
fill(38, 38, 38, 255 / 3 - mouseX);
rect(0, 270, 400, 20);
fill(38, 38, 38, 255 / 3.5 - mouseX);
rect(0, 250, 400, 20);
fill(38, 38, 38, 255 / 4.5 - mouseX);
rect(0, 230, 400, 20);
fill(38, 38, 38, 255 / 6 - mouseX);
rect(0, 210, 400, 20);
fill(38, 38, 38, 255 / 10 - mouseX);
rect(0, 190, 400, 20);
fill(38, 38, 38, 255 - mouseX);
//Buildings so far in the background they need another section
rect(280, 280, 20, 80);
triangle(280, 280, 300, 280, 290, 270);
//Background Buildings
rect(80, 280, 20, 80);
rect(95, 250, 30, 110);
rect(95, 250, 30, 15);
rect(170, 320, 50, 40);
rect(15, 300, 10, 60);
rect(240, 310, 15, 50);
//A
//fill(10, 114, 168, 255 - mouseX);
quad(145, 205, 157, 210, 160, 263, 140, 263);
//fill(155, 196, 221, 255 - mouseX);
triangle(132, 170, 148, 185, 135, 320);
quad(128, 170, 133, 170, 136, 320, 120, 270);
//C
quad(360, 230, 390, 223, 390, 320, 360, 320);
triangle(390, 215, 390, 223, 378, 230);
rect(380, 180, 3, 60);
rect(373, 192, 2, 50);
rect(360, 220, 5, 10);
rect(390, 200, 20, 100);
//B
rect(385, 270, 20, 90);
rect(350, 300, 20, 60);
rect(370, 300, 20, 60);
//F
rect(115, 260, 25, 80);
quad(140, 260, 165, 263, 165, 285, 140, 285);
rect(110, 280, 35, 80);
quad(170, 283, 170, 360, 145, 360, 145, 280);
quad(160, 300, 180, 303, 180, 360, 160, 360);
//E
rect(30, 240, 28, 25);
triangle(58, 240, 75, 265, 58, 265);
rect(25, 260, 30, 100);
quad(55, 260, 80, 263, 80, 360, 55, 360);
//G
triangle(230, 240, 230, 300, 210, 300);
rect(200, 290, 20, 70);
quad(220, 290, 245, 292, 245, 360, 220, 360);
//H
quad(268, 230, 277, 233, 277, 265, 268, 265);
triangle(254, 232, 268, 260, 254, 260);
triangle(268, 250, 268, 260, 254, 260);
//rect(253, 230, 15, 30);
rect(250, 260, 20, 100);
quad(270, 260, 280, 263, 280, 360, 270, 360);
//D
rect(310, 240, 30, 120);
quad(340, 240, 360, 245, 360, 360, 340, 360);
rect(295, 300, 25, 60);
rect(320, 300, 15, 60);
//I
rect(0, 260, 20, 100);
rect(0, 255, 15, 5);
//Buildings on road
rect(0, 325, 35, 35);
rect(0, 350, 170, 10);
rect(170, 340, 15, 20);
rect(185, 340, 10, 20);
//Road
rect(0, 358, 400, 2);
//Lake
fill(28, 125, 175, 255 - mouseX);
rect(0, 360, 400, 40);
//Lake Gradient
fill(38, 38, 38, 255 / 2.5 - mouseX);
rect(0, 360, 400, 10);
fill(38, 38, 38, 255 / 3.5 - mouseX);
rect(0, 370, 400, 10);
fill(38, 38, 38, 255 / 4.5 - mouseX);
rect(0, 380, 400, 10);
//Overlay (Gives the image a spooky gray-orange look)
fill(52, 39, 29, (255 / 2.5 - mouseX));
rect(0, 0, 400, 400);
}