// Interactive Drawing for Intro to Media Computation by Qeisan Kendy
// This initializes program
void setup() {
size(400, 400);
}
// Repeats Loop
void draw() {
//normal background
background(250);
// Room Walls
stroke(0);
line(100, 0, 100, 240);
line(100, 240, 400, 240);
line(100, 240, 0, 360);
//Apply Transparency
fill(0, 255-0.5*mouseY);
rect(0, 0, 400, 400);
// Outside Light (Window)
noStroke();
fill(190);
rect(270, 90, 65, 100);
fill(0, 255-0.9*mouseY);
rect(270, 135, 65, 10);
rect(295, 90, 10, 100);
// Ghost
// Back Hand
fill(6, 6, 111, 250);
arc(355+1.7*mouseX-400, 200+ 12*sin(0.1*mouseX), 40, 100, PI, TWO_PI, CHORD);
triangle(355+1.7*mouseX-400, 200+ 12*sin(0.1*mouseX), 335+1.7*mouseX-400, 200+ 12*sin(0.1*mouseX), 345+1.7*mouseX-400, 220+ 12*sin(0.1*mouseX));
triangle(355+1.7*mouseX-400, 200+ 12*sin(0.1*mouseX), 375+1.7*mouseX-400, 200+ 12*sin(0.1*mouseX), 365+1.7*mouseX-400, 220+ 12*sin(0.1*mouseX));
// Tail
fill(0, 0, 255, 230);
triangle(220+1.7*mouseX-400, 50+ 12*sin(0.1*mouseX), 350+1.7*mouseX-400, 180+ 12*sin(0.1*mouseX), 220+1.7*mouseX-400, 170+ 12*sin(0.1*mouseX));
triangle(155+1.7*mouseX-400, 59+ 12*sin(0.1*mouseX), 350+1.7*mouseX-400, 180+ 12*sin(0.1*mouseX), 220+1.7*mouseX-400, 170+ 12*sin(0.1*mouseX));
triangle(155+1.7*mouseX-400, 100+ 12*sin(0.1*mouseX), 265+1.7*mouseX-400, 160+ 12*sin(0.1*mouseX), 200+1.7*mouseX-400, 170+ 12*sin(0.1*mouseX));
// Tail Inner Shade
fill(10, 150);
triangle(230+1.7*mouseX-400, 70+ 12*sin(0.1*mouseX), 360+1.7*mouseX-400, 180+ 12*sin(0.1*mouseX), 220+1.7*mouseX-400, 170+ 12*sin(0.1*mouseX));
triangle(180+1.7*mouseX-400, 85+ 12*sin(0.1*mouseX), 350+1.7*mouseX-400, 180+ 12*sin(0.1*mouseX), 220+1.7*mouseX-400, 170+ 12*sin(0.1*mouseX));
triangle(172+1.7*mouseX-400, 115+ 12*sin(0.1*mouseX), 265+1.7*mouseX-400, 160+ 12*sin(0.1*mouseX), 200+1.7*mouseX-400, 170+ 12*sin(0.1*mouseX));
noStroke();
fill(0, 0, 255);
// Secondary Body
fill(0, 0, 255);
ellipse(240+1.7*mouseX-400, 175+ 12*sin(0.1*mouseX), 90, 80);
// Secondary Body Inner Shade
fill(10, 150);
ellipse(240+1.7*mouseX-400, 175+ 12*sin(0.1*mouseX), 60, 50);
// Main Body
fill(0, 0, 255);
ellipse(303+1.7*mouseX-400, 143+ 12*sin(0.1*mouseX), 130, 140);
// Main Body Inner Shade
fill(10, 150);
ellipse(303+1.7*mouseX-400, 143+ 12*sin(0.1*mouseX), 100, 110);
// Mouth
noStroke();
fill(250, 0, 0, 190);
arc(330+1.7*mouseX-400, 210+ 12*sin(0.1*mouseX), 40, 100, PI, TWO_PI, CHORD);
// Front Hand
fill(6, 6, 111, 250);
noStroke();
arc(275+1.7*mouseX-400, 210+ 12*sin(0.1*mouseX), 40, 100, PI, TWO_PI, CHORD);
triangle(275+1.7*mouseX-400, 210+ 12*sin(0.1*mouseX), 295+1.7*mouseX-400, 210+ 12*sin(0.1*mouseX), 284+1.7*mouseX-400, 230+ 12*sin(0.1*mouseX));
triangle(275+1.7*mouseX-400, 210+ 12*sin(0.1*mouseX), 255+1.7*mouseX-400, 210+ 12*sin(0.1*mouseX), 268+1.7*mouseX-400, 230+ 12*sin(0.1*mouseX));
// Eyes
noStroke();
fill(254, 241, 1, 220);
// Left Eye
arc(290+1.7*mouseX-400, 120+ 12*sin(0.1*mouseX), 40, 90, 0, PI+QUARTER_PI, CHORD);
// Right Eye
arc(350+1.7*mouseX-400, 120+ 12*sin(0.1*mouseX), 40, 80, TWO_PI-QUARTER_PI, 3*PI, CHORD);
// Bed
// Mattress
fill(10, 220);
rect(90, 340, 400, 400);
fill(200, mouseY);
rect(90, 340, 310, 50);
quad(150, 280, 90, 340, 400, 340, 400, 280);
// Blanket
fill(255, 128, 0, mouseY);
rect(90, 340, 239, 40);
quad(150, 280, 90, 340, 330, 340, 370, 280);
// Child
fill(170, 6, 34, mouseY);
rectMode(CENTER);
rect(185, 390, 40+0.1*mouseX, 90-0.1*mouseX);
rectMode(CORNER);
fill(239, 228, 176, mouseY);
ellipse(180+0.1*mouseX, 330+0.15*mouseX, 60, 60);
}