/*
INTERACTIVE DRAWING- Pastel Haze
Xinran Ma 2017/09/20
A twilight to night landscape of a barren desert amongst tall dunes of sand.
Move the mouse to experience perspective and subtle changes in the setting.
Pressing a key will reveal the darkness that lies beneath it's tranquil surface.
Course: PROG14998 Introduction to Media Computation - 1169_89545
Instructor: Nicolas Hesler
*/
void setup() {
size(400,400);
frameRate(8);
}
void draw() {
background(252,198,201);
//Background gradient. Blue gradient uses mouse vertical movement to fade in.
//Pink gradient
rectMode(CORNER);
noStroke();
fill(253,198,201);
rect(0,0,400,400);
fill(251,187,194);
rect(0,0,400,257);
fill(247,172,190);
rect(0,0,400,230);
fill(231,161,181);
rect(0,0,400,153);
fill(213,157,178);
rect(0,0,400,114);
fill(198,161,180);
rect(0,0,400,50);
fill(186,163,175);
rect(0,0,400,30);
fill(183,161,170);
rect(0,0,400,5);
//Blue gradient
fill(253-60,198,201+90,mouseY);
rect(0,0,400,400);
fill(251-60,187,194+90,mouseY);
rect(0,0,400,257);
fill(247-60,172,190+90,mouseY);
rect(0,0,400,230);
fill(231-60,161,181+90,mouseY);
rect(0,0,400,153);
fill(213-60,157,178+90,mouseY);
rect(0,0,400,114);
fill(198-60,161,180+90,mouseY);
rect(0,0,400,50);
fill(186-60,163,175+90,mouseY);
rect(0,0,400,30);
fill(183-60,161,170+90,mouseY);
rect(0,0,400,5);
//Stars- move in different speeds horizontally with mouse. Fade at day.
fill(255,255,255,mouseY);
rectMode(CENTER);
rect(mouseX/15, 60, 5, 5);
rect(mouseX/10+200, 100, 3, 3);
rect(mouseX/8+170, 96, 5, 5);
rect(mouseX/15+350, 50, 3, 3);
rect(mouseX/10+200, 30, 3, 3);
rect(mouseX/8+270, 86, 5, 5);
//Clouds- move in different speeds horizontally with mouse. Fade at night.
fill(255,255,255,80-mouseY);
rect(120+mouseX/8, 70 + (mouseY), 70, 20, 10);
rect(360+mouseX/8, 90 + (mouseY), 40, 30, 10);
rect(280+mouseX/8, 130 + (mouseY), 60, 30, 10);
rect(40+mouseX/10, 110 + (mouseY), 60, 20, 10);
rect(180+mouseX/8, 150 + (mouseY), 40, 30, 10);
rect(230+mouseX/10, 120 + (mouseY), 70, 10, 10);
//Moon- appears in twilight, hides in dusk.
fill(255,255,255);
ellipse(mouseX/17+90,240+mouseY/7,40,40);
//MoonLight- shines by pulsating various opacities of white
fill(255,255,255,40+5*sin(frameCount/3.6));
ellipse(mouseX/17+90,240+mouseY/7,73,73);
ellipse(mouseX/17+90,240+mouseY/7,45,45);
ellipse(mouseX/17+90,240+mouseY/7,89,89);
fill(255,255,255,10+5*sin(frameCount/3.6));
ellipse(mouseX/17+90,240+mouseY/7,150,150);
ellipse(mouseX/17+90,240+mouseY/7,120,120);
ellipse(mouseX/17+90,240+mouseY/7,50,50);
//Sand Dunes- moves in perspective of the image, changes hue based on day/dusk
fill(204-mouseY/5, 150, 170+mouseY);
beginShape();
vertex(-200-mouseX/7,310);
vertex(-20-mouseX/7,310);
vertex(90-mouseX/7,250);
vertex(280-mouseX/7,300);
vertex(480-mouseX/7,250);
vertex(450-mouseX/7,450);
vertex(-200-mouseX/7,450);
endShape(CLOSE);
//Sand Dune Shadows
fill(147, 100, 108,80);
beginShape();
vertex(-20-mouseX/7,310);
vertex(90-mouseX/7,250);
vertex(70-mouseX/7,290);
endShape(CLOSE);
beginShape();
vertex(280-mouseX/7,300);
vertex(480-mouseX/7,250);
vertex(350-mouseX/7,310);
endShape(CLOSE);
//Path
fill(255-mouseY/10,255-mouseY/10,255-mouseY/15);
beginShape();
vertex(350-mouseX/7,310);
vertex(375-mouseX/7,325);
vertex(386-mouseX/7,335);
vertex(380-mouseX/7,341);
vertex(130-mouseX/7,361);
vertex(120-mouseX/7,367);
vertex(130-mouseX/7,372);
vertex(400-mouseX/7,400);
vertex(140-mouseX/7,400);
vertex(90-mouseX/7,372);
vertex(95-mouseX/7,367);
vertex(100-mouseX/7,361);
vertex(375-mouseX/7,338);
vertex(380-mouseX/7,335);
vertex(375-mouseX/7,329);
vertex(340-mouseX/7,308);
endShape(CLOSE);
//Electric tower
stroke(96, 93, 92);
strokeWeight(1.2);
line(340-mouseX/7,240,340-mouseX/7,300);
line(350-mouseX/7,240,350-mouseX/7,300);
line(320-mouseX/7,240,370-mouseX/7,240);
line(320-mouseX/7,240,340-mouseX/7,250);
line(350-mouseX/7,250,370-mouseX/7,240);
line(340-mouseX/7,250,350-mouseX/7,250);
line(340-mouseX/7,250,350-mouseX/7,240);
line(340-mouseX/7,240,350-mouseX/7,250);
line(340-mouseX/7,260,350-mouseX/7,250);
line(340-mouseX/7,250,350-mouseX/7,260);
line(340-mouseX/7,260,350-mouseX/7,260);
line(340-mouseX/7,270,350-mouseX/7,260);
line(340-mouseX/7,260,350-mouseX/7,270);
line(340-mouseX/7,270,350-mouseX/7,270);
line(340-mouseX/7,280,350-mouseX/7,270);
line(340-mouseX/7,270,350-mouseX/7,280);
line(340-mouseX/7,280,350-mouseX/7,280);
line(340-mouseX/7,290,350-mouseX/7,280);
line(340-mouseX/7,280,350-mouseX/7,290);
line(340-mouseX/7,290,350-mouseX/7,290);
line(340-mouseX/7,300,350-mouseX/7,290);
line(340-mouseX/7,290,350-mouseX/7,300);
line(340-mouseX/7,300,350-mouseX/7,300);
line(340-mouseX/7,250,310-mouseX/7,260);
line(310-mouseX/7,260,340-mouseX/7,260);
line(350-mouseX/7,250,380-mouseX/7,260);
line(380-mouseX/7,260,350-mouseX/7,260);
line(310-mouseX/7,300,380-mouseX/7,300);
line(340-mouseX/7,290,310-mouseX/7,300);
line(350-mouseX/7,290,380-mouseX/7,300);
line(340-mouseX/7,300,330-mouseX/7,370);
line(350-mouseX/7,300,360-mouseX/7,370);
line(350-mouseX/7,300,339-mouseX/7,310);
line(340-mouseX/7,300,351-mouseX/7,310);
line(337-mouseX/7,320,351-mouseX/7,310);
line(352-mouseX/7,320,339-mouseX/7,310);
line(337-mouseX/7,320,355-mouseX/7,332);
line(352-mouseX/7,320,335-mouseX/7,332);
strokeWeight(2);
line(310-mouseX/7,260,310-mouseX/7,275);
line(380-mouseX/7,260,380-mouseX/7,275);
line(310-mouseX/7,300,310-mouseX/7,315);
line(380-mouseX/7,300,380-mouseX/7,315);
}
void mousePressed (){
//A dark rendition of the setting when mouse click function active.
//Grey gradient
rectMode(CORNER);
noStroke();
fill(79);
rect(0,0,400,400);
fill(75);
rect(0,0,400,257);
fill(70);
rect(0,0,400,230);
fill(66);
rect(0,0,400,153);
fill(55);
rect(0,0,400,114);
fill(45);
rect(0,0,400,50);
fill(30);
rect(0,0,400,30);
fill(0);
rect(0,0,400,5);
//Stars
fill(0,0,0,mouseY);
rectMode(CENTER);
rect(mouseX/15, 60, 5, 5);
rect(mouseX/10+200, 100, 3, 3);
rect(mouseX/8+170, 96, 5, 5);
rect(mouseX/15+350, 50, 3, 3);
rect(mouseX/10+200, 30, 3, 3);
rect(mouseX/8+270, 86, 5, 5);
//Clouds
fill(255,255,255,80-mouseY);
rect(120+mouseX/8, 70 + (mouseY), 70, 20, 10);
rect(360+mouseX/8, 90 + (mouseY), 40, 30, 10);
rect(280+mouseX/8, 130 + (mouseY), 60, 30, 10);
rect(40+mouseX/10, 110 + (mouseY), 60, 20, 10);
rect(180+mouseX/8, 150 + (mouseY), 40, 30, 10);
rect(230+mouseX/10, 120 + (mouseY), 70, 10, 10);
//Moon
fill(237, 3, 0);
ellipse(mouseX/17+90,240+mouseY/7,40,40);
fill(237, 3, 0,40);
ellipse(mouseX/17+90,240+mouseY/7,73,73);
ellipse(mouseX/17+90,240+mouseY/7,45,45);
ellipse(mouseX/17+90,240+mouseY/7,89,89);
fill(237, 3, 0,10);
ellipse(mouseX/17+90,240+mouseY/7,150,150);
ellipse(mouseX/17+90,240+mouseY/7,120,120);
ellipse(mouseX/17+90,240+mouseY/7,50,50);
//Sand Dunes
fill(80);
beginShape();
vertex(-200-mouseX/7,310);
vertex(-20-mouseX/7,310);
vertex(90-mouseX/7,250);
vertex(280-mouseX/7,300);
vertex(480-mouseX/7,250);
vertex(450-mouseX/7,450);
vertex(-200-mouseX/7,450);
endShape(CLOSE);
//Sand Dune Shadows
fill(40);
beginShape();
vertex(-20-mouseX/7,310);
vertex(90-mouseX/7,250);
vertex(70-mouseX/7,290);
endShape(CLOSE);
beginShape();
vertex(280-mouseX/7,300);
vertex(480-mouseX/7,250);
vertex(350-mouseX/7,310);
endShape(CLOSE);
//Path
fill(60);
beginShape();
vertex(350-mouseX/7,310);
vertex(375-mouseX/7,325);
vertex(386-mouseX/7,335);
vertex(380-mouseX/7,341);
vertex(130-mouseX/7,361);
vertex(120-mouseX/7,367);
vertex(130-mouseX/7,372);
vertex(400-mouseX/7,400);
vertex(140-mouseX/7,400);
vertex(90-mouseX/7,372);
vertex(95-mouseX/7,367);
vertex(100-mouseX/7,361);
vertex(375-mouseX/7,338);
vertex(380-mouseX/7,335);
vertex(375-mouseX/7,329);
vertex(340-mouseX/7,308);
endShape(CLOSE);
//Electric tower
stroke(70);
strokeWeight(1.2);
line(340-mouseX/7,240,340-mouseX/7,300);
line(350-mouseX/7,240,350-mouseX/7,300);
line(320-mouseX/7,240,370-mouseX/7,240);
line(320-mouseX/7,240,340-mouseX/7,250);
line(350-mouseX/7,250,370-mouseX/7,240);
line(340-mouseX/7,250,350-mouseX/7,250);
line(340-mouseX/7,250,350-mouseX/7,240);
line(340-mouseX/7,240,350-mouseX/7,250);
line(340-mouseX/7,260,350-mouseX/7,250);
line(340-mouseX/7,250,350-mouseX/7,260);
line(340-mouseX/7,260,350-mouseX/7,260);
line(340-mouseX/7,270,350-mouseX/7,260);
line(340-mouseX/7,260,350-mouseX/7,270);
line(340-mouseX/7,270,350-mouseX/7,270);
line(340-mouseX/7,280,350-mouseX/7,270);
line(340-mouseX/7,270,350-mouseX/7,280);
line(340-mouseX/7,280,350-mouseX/7,280);
line(340-mouseX/7,290,350-mouseX/7,280);
line(340-mouseX/7,280,350-mouseX/7,290);
line(340-mouseX/7,290,350-mouseX/7,290);
line(340-mouseX/7,300,350-mouseX/7,290);
line(340-mouseX/7,290,350-mouseX/7,300);
line(340-mouseX/7,300,350-mouseX/7,300);
line(340-mouseX/7,250,310-mouseX/7,260);
line(310-mouseX/7,260,340-mouseX/7,260);
line(350-mouseX/7,250,380-mouseX/7,260);
line(380-mouseX/7,260,350-mouseX/7,260);
line(310-mouseX/7,300,380-mouseX/7,300);
line(340-mouseX/7,290,310-mouseX/7,300);
line(350-mouseX/7,290,380-mouseX/7,300);
line(340-mouseX/7,300,330-mouseX/7,370);
line(350-mouseX/7,300,360-mouseX/7,370);
line(350-mouseX/7,300,339-mouseX/7,310);
line(340-mouseX/7,300,351-mouseX/7,310);
line(337-mouseX/7,320,351-mouseX/7,310);
line(352-mouseX/7,320,339-mouseX/7,310);
line(337-mouseX/7,320,355-mouseX/7,332);
line(352-mouseX/7,320,335-mouseX/7,332);
strokeWeight(2);
line(310-mouseX/7,260,310-mouseX/7,275);
line(380-mouseX/7,260,380-mouseX/7,275);
line(310-mouseX/7,300,310-mouseX/7,315);
line(380-mouseX/7,300,380-mouseX/7,315);
}