/*
Name: Samuel Barnes
Due: September 17, 2018
Title: midsummer_night
Description: In Iceland, they say that under certain circumstances, elves will bring you gifts...
*/
void setup()
{
// set display window to 400 by 400 pixels
size(400, 400);
}
void draw()
{
// reset background to colour of sky
background(20, 20, 35);
/* PANEL 2 */
// STARS
// glow
noStroke();
fill(255, 255, 255, 8 + sin(frameCount * 0.01));
ellipse(240, 340 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
ellipse(340, 360 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
ellipse(40, 360 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
ellipse(20, 240 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
ellipse(60, 285 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
ellipse(120, 240 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
ellipse(180, 260 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
ellipse(240, 220 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
ellipse(300, 280 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
ellipse(340, 240 - (mouseY / (height * 1.0)) * 100, 20 + sin(frameCount * 0.02) * 5, 20 + sin(frameCount * 0.02) * 5);
// stars
stroke(255);
strokeWeight(1);
point(240, 340 - (mouseY / (height * 1.0)) * 100);
point(340, 360 - (mouseY / (height * 1.0)) * 100);
point(40, 360 - (mouseY / (height * 1.0)) * 100);
point(20, 240 - (mouseY / (height * 1.0)) * 100);
point(60, 285 - (mouseY / (height * 1.0)) * 100);
point(120, 240 - (mouseY / (height * 1.0)) * 100);
point(180, 260 - (mouseY / (height * 1.0)) * 100);
point(240, 220 - (mouseY / (height * 1.0)) * 100);
point(300, 280 - (mouseY / (height * 1.0)) * 100);
point(340, 240 - (mouseY / (height * 1.0)) * 100);
// MOUNTAIN 1
// shadow
noStroke();
fill(41, 64, 59, 128);
triangle(270, 370 - (mouseY / (height * 1.0)) * 100, 50, 500 - (mouseY / (height * 1.0)) * 100, 550, 500 - (mouseY / (height * 1.0)) * 100);
// mountain
fill(38, 72, 61, 128);
triangle(270, 370 - (mouseY / (height * 1.0)) * 100, 50, 500 - (mouseY / (height * 1.0)) * 100, 450, 500 - (mouseY / (height * 1.0)) * 100);
// MOUNTAIN 2
// shadow
fill(41, 64, 59);
triangle(120, 320 - (mouseY / (height * 1.0)) * 100, -100, 500 - (mouseY / (height * 1.0)) * 100, 400, 500 - (mouseY / (height * 1.0)) * 100);
// mountain
fill(38, 72, 61);
triangle(120, 320 - (mouseY / (height * 1.0)) * 100, 0, 500 - (mouseY / (height * 1.0)) * 100, 400, 500 - (mouseY / (height * 1.0)) * 100);
// GROUND
rectMode(CORNERS);
fill(49, 93, 69);
rect(0, 465 - (mouseY / (height * 1.0)) * 100, 400, 500 - (mouseY / (height * 1.0)) * 100);
// CHURCH
// walls
noStroke();
fill(255);
rect(80, 430 - (mouseY / (height * 1.0)) * 100, 140, 470 - (mouseY / (height * 1.0)) * 100);
// roof
fill(91, 138, 201);
rect(78, 429 - (mouseY / (height * 1.0)) * 100, 142, 450 - (mouseY / (height * 1.0)) * 100);
// tower
fill(255);
rect(82, 420 - (mouseY / (height * 1.0)) * 100, 92, 435 - (mouseY / (height * 1.0)) * 100);
// tower roof
noStroke();
fill(91, 138, 201);
triangle(80, 420 - (mouseY / (height * 1.0)) * 100, 94, 420 - (mouseY / (height * 1.0)) * 100, 87, 405 - (mouseY / (height * 1.0)) * 100);
/* PANEL 1 */
// SKIN
rectMode(CORNERS);
fill(255, 243, 240);
rect(0, 0, 400, 200);
// EYES
fill(255);
// right eye
ellipse(100, 100, 100, 100);
// left eye
ellipse(300, 100, 100, 100);
// IRISES
fill(96, 130, 170);
// right eye
ellipse(85 + (mouseX / (width * 1.0)) * 30, 85 + (mouseY / (height * 1.0)) * 30, 50, 50);
// left eye
ellipse(285 + (mouseX / (width * 1.0)) * 30, 85 + (mouseY / (height * 1.0)) * 30, 50, 50);
// PUPILS
fill(0);
// right eye
ellipse(85 + (mouseX / (width * 1.0)) * 30, 85 + (mouseY / (height * 1.0)) * 30, 20, 20);
// left eye
ellipse(285 + (mouseX / (width * 1.0)) * 30, 85 + (mouseY / (height * 1.0)) * 30, 20, 20);
// TWINKLES
fill(255, 255, 255, 255 - (mouseY / (height * 1.0)) * 255);
// right eye
ellipse(85 + (mouseX / (width * 1.0)) * 30, 85 + (mouseY / (height * 1.0)) * 30, 5, 5);
// left eye
ellipse(285 + (mouseX / (width * 1.0)) * 30, 85 + (mouseY / (height * 1.0)) * 30, 5, 5);
// EYE LIDS
stroke(255, 226, 219);
strokeWeight(25);
noFill();
// right eye, top lid
arc(100, 100, 100, 100 - (mouseY / (height * 1.0)) * 25, PI, TWO_PI);
// right eye, bottom lid
arc(100, 100, 100, 100 - (mouseY / (height * 1.0)) * 25, 0, PI);
// left eye, top lid
arc(300, 100, 100, 100 - (mouseY / (height * 1.0)) * 25, PI, TWO_PI);
// left eye, bottom lid
arc(300, 100, 100, 100 - (mouseY / (height * 1.0)) * 25, 0, PI);
// EYE BROWS
noFill();
stroke(92, 64, 51);
strokeWeight(25);
// right brow
arc(100, 50 + (mouseY / (height * 1.0)) * 25, 125, 100, PI+QUARTER_PI, TWO_PI-QUARTER_PI);
// left brow
arc(300, 50 + (mouseY / (height * 1.0)) * 25, 125, 100, PI+QUARTER_PI, TWO_PI-QUARTER_PI);
// NOSE
noStroke();
fill(255, 172, 124);
// nose
triangle(200, 100, 150, 200, 250, 200);
// shadow
fill(216, 72, 50);
triangle(200, 100, 190 + (mouseX / (width * 1.0)) * 20, 200, 250, 200);
/* GUTTER */
// gutter will separate panels
noStroke();
fill(0);
rect(0, 190, 400, 210);
}
void mousePressed()
{
println("It's already midnight... Would they mind if I threw a stone?");
}