//AUTOBIOGRAPHY//
/*
INTERACTIVE MEDIA COMPUTATION
DEAN ELLIOTT
SEPT. 19, 2017
Horizontal movement of the cursor readjusts the eyes and ears. Verticle movement readjusts eyes along the Y-axis and drops the pants! Clicking the mouse causes a wink.
*/
void setup()
{
size(400, 400);
}
void draw()
{
// Establishing a constant frame rate. This ensures that the clock (see below) runs independently. This also resets the frame rate after the mouse is clicked for a wink.
frameRate(60);
//Setting up background stage.
noStroke();
// Set Background (wall) to taupe.
background(196, 183, 168);
noStroke();
// Floor
fill(175, 175, 175);
rect(0, 320, 400, 400);
// Shadow
fill(0, 0, 0, 55);
ellipse(210, 355, 115, 35);
// Clock - Sine and Cosine are utilized to make the outer ends of the lines (clock arms) revolve.
stroke(0, 0, 0);
fill(255, 255, 255);
ellipse(50, 80, 60, 60);
line((cos(frameCount*0.01))*30+50, (sin(frameCount*0.01))*30+80, 50, 80);
line((cos(frameCount*0.001))*20+50, (sin(frameCount*0.001))*20+80, 50, 80);
//Resetting noStroke after it was used for the clock
noStroke();
//Locker Base
fill(92, 174, 158);
rectMode(CORNERS);
rect(110, 107, 400, 320);
// Locker Doors
fill(152, 212, 200);
//Door 1
quad(120, 120, 116, 320, 184, 320, 176, 118);
//Door 2
quad(179, 117, 189, 320, 238, 320, 241, 120);
//Door 3
quad(245, 121, 242, 320, 298, 320, 290, 121);
//Door 4
quad(296, 122, 303, 320, 343, 320, 348, 117);
//Door 5
quad(352, 120, 348, 320, 400, 320, 390, 120);
// Locker Handles
stroke(46, 67, 63);
strokeWeight(2);
//Handle 1
line(137, 210, 127, 210);
line(127, 210, 126, 237);
line(126, 237, 138, 239);
//Handle 2
line(200, 200, 190, 200);
line(190, 200, 189, 227);
line(189, 227, 200, 231);
//Handle 3
line(260, 207, 250, 207);
line(250, 207, 249, 230);
line(249, 230, 261, 233);
//Handle 4
line(315, 200, 305, 200);
line(305, 200, 304, 227);
line(304, 227, 316, 231);
//Handle 5
line(370, 207, 360, 207);
line(360, 207, 359, 230);
line(359, 230, 371, 233);
// Locker Vents
//Vent 1
line(130, 132, 162, 130);
line(130, 137, 162, 135);
line(130, 142, 162, 140);
line(130, 147, 162, 145);
//Vent 2
line(190, 127, 222, 130);
line(190, 132, 222, 135);
line(190, 137, 222, 140);
line(190, 142, 222, 145);
//Vent 3
line(250, 129, 282, 130);
line(250, 134, 282, 135);
line(250, 139, 282, 140);
line(250, 144, 282, 145);
//Vent 4
line(310, 132, 340, 130);
line(310, 137, 340, 135);
line(310, 142, 340, 140);
line(310, 147, 340, 145);
//Vent 5
line(360, 129, 382, 130);
line(360, 134, 382, 135);
line(360, 139, 382, 140);
line(360, 144, 382, 145);
// Locker Locks
fill(205, 205, 205);
//Lock 1
ellipse(136, 248, 6, 6);
// Lock 2
ellipse(198, 240, 6, 6);
//Lock 3
ellipse(258, 242, 6, 6);
//Lock 4
ellipse(311, 237, 6, 6);
//Lock 5
ellipse(366, 240, 6, 6);
rectMode(CORNER);
// Creating Geek Guy
// Shadow
noStroke();
fill(0, 0, 0, 55);
ellipse(210, 355, 115, 35);
//Skin colour used
fill(234, 223, 201);
// Ears - Moves horizontally against the direction of the cursor.
fill(234, 223, 201);
//Left Ear
ellipse(157 - (mouseX*0.01), 110, 16, 25);
//Right Ear
ellipse(247- (mouseX*0.01), 110, 16, 25);
//Left inner ear lobe
ellipse(157, 110, 6, 12);
//Right inner ear lobe
ellipse(246, 110, 6, 12);
// Head
rect(160, 60, 80, 60);
// Neck
rect(200, 140, 10, 30);
// Jaw
ellipse(200, 120, 80, 60);
// Legs
//Left Leg
rect(192, 284, 8, 58);
//Right Leg
rect(222, 284, 8, 58);
//Arms
//Left Arm
quad(172, 177, 145, 210, 150, 220, 180, 182);
quad(143, 212, 174, 240, 174, 235, 155, 210);
//Right Arm
quad(248, 177, 269, 210, 264, 220, 240, 182);
quad(270, 212, 245, 240, 245, 235, 260, 210);
// Hands
//Left Hand
rect(170, 234, 10, 25);
//Right Hand
rect(240, 234, 10, 25);
// Nose
fill(227, 215, 172);
triangle(192, 120, 206, 120, 200, 127);
// Hair
//Large hair
fill(113, 101, 84);
triangle(180, 60, 192, 36, 240, 60);
//Small Hair
triangle(160, 60, 172, 50, 180, 60);
//Left Side hair
triangle(160, 60, 160, 80, 167, 60);
//Right Side Hair
triangle(240, 60, 240, 83, 233, 60);
// Glasses
fill(255, 255, 255);
stroke(0, 0, 0);
strokeWeight(2);
//Left Lens
rect(165, 95, 27, 15);
//Right Lens
rect(205, 95, 27, 15);
//Bridge
line(194, 105, 205, 105);
// Mouth
noFill();
curve(100, 100, 180, 135, 220, 135+(mouseY*-0.05), 100+(mouseY*-0.05), 100);
// Cheeks
noStroke();
fill(255, 77, 77, 0+(mouseY*+0.09));
//Left Blush
ellipse(180, 120, 16, 16);
//Right Blush
ellipse(220, 120, 16, 16);
// Torso
//Vest
fill(224, 196, 138);
rect(180, 160, 60, 95);
//Buttons
fill(0, 0, 0);
ellipse(210, 187, 3, 3);
ellipse(210, 195, 3, 3);
//Pocket and Pens
strokeWeight(1);
stroke(0,0,0);
line(220, 176, 235, 176);
strokeWeight(2);
stroke(119, 140, 211);
line(230, 178, 230, 171);
stroke(0, 0, 0);
line(225, 178, 223, 171);
// Undershirt
noStroke();
fill(255, 255, 255);
//Left Shoulder
triangle(180, 160, 180, 185, 168, 170);
//Right Shoulder
triangle(240, 160, 240, 185, 252, 170);
//Middle
triangle(203, 160, 210, 174, 217, 160);
// Underpants
fill(255, 255, 255);
rect(180, 255, 60, 30);
fill(250, 115, 115);
//Polka Dots - radians were used to specify the end sides of the arc
ellipse(192, 278, 10, 10);
ellipse(218, 278, 10, 10);
ellipse(208, 262, 10, 10);
arc(180, 255, 14, 14, radians(350), radians(460));
arc(240, 255, 14, 14, radians(90), radians(180));
arc(240, 285, 14, 14, radians(180), radians(270));
fill(152, 212, 200);
rect(203, 280, 17, 5);
// Pupils - Follow cursor vertically and horizonatally.
fill(0, 0, 0);
rectMode(CENTER);
//Left pupil
rect(175 + (mouseX *0.02), 97 + (mouseY *0.03), 12, 6);
// Right pupil
rect(216+ (mouseX *0.02), 97+ (mouseY *0.03), 12, 6);
//Pants - Raise and lower along the Y-axis to reveal underpants beneath.
rectMode(CORNER);
//Crotch
fill(119, 140, 211);
rect(180, 255+ mouseY/6, 60, 40-mouseY/18);
//Left Pant
rect(180, 255+mouseY/6, 20, 100 -mouseY/5);
//Right Pant
rect (221, 255 +mouseY/6, 20, 100-mouseY/5);
// Bowtie
fill(230, 50, 50);
triangle(210, 160, 188, 152, 188, 168);
triangle(210, 160, 232, 152, 232, 168);
fill(250, 115, 115);
ellipse(210, 160, 10, 10);
// Shoes
fill(0, 0, 0);
//Left Shoe
quad(165, 360, 200, 360, 200, 342, 180, 342);
//Right Shoe
quad(221, 342, 221, 360, 253, 360, 240, 342);
}
//Mouse click funtion lowers the frame rate for the wink.
void mousePressed() {
frameRate(5);
//Wink
fill(234, 223, 201);
rect(167, 97, 25, 12);
}
/*
REFERENCES
The projects listed below are credited to their creators, respectively. They assisted by demonstrating various function abilities.
//Moving background (Used sin/cos for Clock)
//http://www-acad.sheridanc.on.ca/PROG14998/2015/interactive-drawing/interactive_drawing_27/index.html
// Frame rate drop/Mouse press (Used for Wink)
http://www-acad.sheridanc.on.ca/PROG14998/2016/interactive-drawing/jason_pushkar_interactive_drawing/index.html
//Object descending with Y-axis (Used for Pants)
http://www-acad.sheridanc.on.ca/PROG14998/2015/interactive-drawing/interactive_drawing_51/index.html
http://www-acad.sheridanc.on.ca/PROG14998/2016/interactive-drawing/emily_bendevis_interactive_drawing/index.html
//Object moving with X-axis (Used for Ears)
http://www-acad.sheridanc.on.ca/PROG14998/2016/interactive-drawing/paolo_di_filippo_interactive_drawing/index.html
http://www-acad.sheridanc.on.ca/PROG14998/2016/interactive-drawing/cael_wood_interactive_drawing/index.html
//Following Eyes
http://www-acad.sheridanc.on.ca/PROG14998/2015/interactive-drawing/interactive_drawing_60/index.html
//Formating
http://www-acad.sheridanc.on.ca/PROG14998/2016/interactive-drawing/william_lu_interactive_drawing/index.html
*/