// "SOMETHING'S IN THE VENT"
// By: Amelia McLeavey
// The thing you dropped has fallen into a vent. It's small and shines white.
// Find it by moving your flashlight and clicking the mouse!
void setup() {
size (400, 400);
}
void draw() {
// The place behind the light
background(0);
// Lower framerate to prevent things from flickering
frameRate(40);
//// LIGHT ////~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
noStroke ();
// MouseX divided by percentage of screen, scaled to 280, + 60 to constrain light to vent opening.
// MouseY divided by percentage of screen, scaled to 130, + 30 to constrain light to vent opening.
// Inner Glow
fill (245, 199, 173, 120);
ellipse (mouseX / 400.0 * 280 + 60, mouseY / 400.0 * 130 + 30, 60, 60);
// Middle Glow
fill (245, 199, 173, 80);
ellipse (mouseX / 400.0 * 280 + 60, mouseY / 400.0 * 130 + 30, 85, 85);
// Outer Glow
fill (245, 199, 173, 30);
ellipse (mouseX / 400.0 * 280 + 60, mouseY / 400.0 * 130 + 30, 180, 180);
// Extra Glow
fill (245, 199, 173, 15);
ellipse (mouseX / 400.0 * 280 + 60, mouseY / 400.0 * 130 + 30, 400, 400);
// HotSpot
fill (252, 251, 229);
ellipse (mouseX / 400.0 * 280 + 60, mouseY / 400.0 * 130 + 30, 40, 40);
//// SURFACES ////~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Back Surface
stroke (0);
strokeWeight (5);
fill (22);
rect (50, 20, 300, 20); // top
rect (50, 160, 300, 20); // bottom
noStroke();
rect (-100, 20, 155, 160); // left, width extends 100 pixels on each side
rect (345, 20, 155, 160); // right, width extends 100 pixels on each side
// Bottom Surface
noStroke();
fill (50);
rect (-100, 170, 600, 230); // width extends 100 pixels on each side, height level to window
// Top Surface
rect (-100, 0, 600, 30); // width extends 100 pixels on each side, height level to window
//// VENT ////~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
noStroke();
fill (0);
// From left to right
rect (55, 40, 20, 120);
rect (85, 40, 20, 120);
rect (115, 40, 20, 120);
rect (145, 40, 20, 120);
rect (175, 40, 20, 120);
rect (205, 40, 20, 120);
rect (235, 40, 20, 120);
rect (265, 40, 20, 120);
rect (295, 40, 20, 120);
rect (325, 40, 20, 120);
//// SHADOWS ////~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Wall Shadows
noStroke();
fill (15);
rect (0, 170, 400, 10);
// Bottom Shadows from left to right,
// these need to move opposite to mouse at slightly different speeds to prevent overlap
quad (-100, 170, 75, 170, 130 - mouseX, 400, -100, 400);
quad (85, 170, 105, 170, 200 - mouseX, 400, 150 - mouseX, 400);
quad (115, 170, 135, 170, 275 - (mouseX / 1.1), 400, 225 - (mouseX / 1.1), 400);
quad (145, 170, 165, 170, 350 - (mouseX / 1.2), 400, 300 - (mouseX / 1.2), 400);
quad (175, 170, 195, 170, 425 - (mouseX / 1.3), 400, 375 - (mouseX / 1.3), 400);
quad (205, 170, 225, 170, 500 - (mouseX / 1.3), 400, 450 - (mouseX / 1.3), 400);
quad (235, 170, 255, 170, 575 - (mouseX / 1.3), 400, 525 - (mouseX / 1.3), 400);
quad (265, 170, 285, 170, 650 - (mouseX / 1.4), 400, 600 - (mouseX / 1.4), 400);
quad (295, 170, 315, 170, 725 - (mouseX / 1.5), 400, 675 - (mouseX / 1.5), 400);
quad (325, 170, 600, 170, 500, 400, 750 - (mouseX / 1.6), 400);
}
// Reveals the thing you have dropped, the shadows have to be redrawn so that they still cover the thing.
void mousePressed() {
// The Thing
stroke (255);
strokeWeight (2);
point (10, 380);
strokeWeight (1);
line (9, 380, 11, 380);
// The Shadows Redrawn
noStroke();
quad (-100, 170, 75, 170, 130 - mouseX, 400, -100, 400);
quad (85, 170, 105, 170, 200 - mouseX, 400, 150 - mouseX, 400);
quad (115, 170, 135, 170, 275 - (mouseX / 1.1), 400, 225 - (mouseX / 1.1), 400);
quad (145, 170, 165, 170, 350 - (mouseX / 1.2), 400, 300 - (mouseX / 1.2), 400);
quad (175, 170, 195, 170, 425 - (mouseX / 1.3), 400, 375 - (mouseX / 1.3), 400); // 770, 680
quad (205, 170, 225, 170, 500 - (mouseX / 1.3), 400, 450 - (mouseX / 1.3), 400);
quad (235, 170, 255, 170, 575 - (mouseX / 1.3), 400, 525 - (mouseX / 1.3), 400);
quad (265, 170, 285, 170, 650 - (mouseX / 1.4), 400, 600 - (mouseX / 1.4), 400);
quad (295, 170, 315, 170, 725 - (mouseX / 1.5), 400, 675 - (mouseX / 1.5), 400);
quad (325, 170, 600, 170, 500, 400, 750 - (mouseX / 1.6), 400);
}