/*
Interactive Drawing Assignment
Class Selection
By: Jonah GM
Interact by:
-At a moderate speed or slow speed, move mouse completely to the left or the right
to select a class
-Mouse right = Rogue Class
-Mouse left = Hero Class
-Click any key to "Select a class"
-Click displays light, as well as message, "Class Selected!"
*/
//Drawn only once
void setup() {
//Size of the Applet
size(400, 400);
}
//Constantly draw
void draw() {
//Set framerate to 60 frames per second
frameRate(60);
//Background to colour (White)
background(255);
//No outer lines (Stroke)
noStroke();
//Background shades
fill(0, 210);
rect(0, 0, 400, 100);
fill(0, 200);
rect(0, 100, 400, 100);
fill(0, 190);
rect(0, 200, 400, 100);
//Floor
fill(25);
rect(0, 280, 400, 400);
//Floor Shadow
fill(23);
ellipse(200, 340, 270, 70);
fill(20);
ellipse(200, 340, 250, 50);
//The use of mouseX allows for shapes to move accordingly to the mouse
//HERO CLASS Waist Cape
fill(160);
triangle(260+mouseX, 260, 240+mouseX, 230, 220+mouseX, 240);
//The use of sin allows for a shape to repeat, faking the 'loop' function
//The use of frameCount is to control how fast the shape will move accordingly
//to the frames per second
//HERO CLASS Sword Hilt
fill(139, 69, 19);
rect(285+mouseX, 130+sin(frameCount/20)*2, 10, 60);
rect(270+mouseX, 120+sin(frameCount/20)*2, 50, 15);
//ROGUE CLASS Dagger Handles
rect(mouseX-114, 130+sin(frameCount/20)*2, 10, 60);
rect(mouseX-309, 215+sin(frameCount/20)*2, 60, 10);
//BASE CLASS CHARACTER
//Hair Colour
fill(25);
//Hair(Back of Head)
//Right
triangle(165, 135, 180, 80, 190, 110);
triangle(150, 120, 170, 80, 190, 100);
//Left
triangle(210, 110, 220, 80, 235, 135);
triangle(230, 80, 210, 100, 250, 120);
//Head
fill(222, 185, 135);
ellipse(200, 80, 80, 80);
//Hair
fill(25);
triangle(210, 60, 260, 80, 230, 50);
triangle(195, 60, 215, 60, 230, 90);
triangle(145, 100, 180, 60, 165, 55);
triangle(240, 30, 215, 60, 200, 60);
triangle(215, 20, 180, 60, 210, 60);
triangle(140, 80, 175, 45, 190, 70);
ellipse(200, 56, 70, 34);
//Body
fill(20);
ellipse(200, 200, 95, 100);
//Feet
fill(13);
triangle(125, 340, 170, 340, 150, 290);
triangle(230, 340, 275, 340, 250, 290);
//Hands
fill(222, 185, 135);
ellipse(290, 160+sin(frameCount/20)*2, 40, 40);
ellipse(120, 220+sin(frameCount/20)*2, 40, 40);
//Pants
fill(0, 0, 50);
arc(200, 210, 93, 80, 0, PI);
//HERO CLASS ATTIRE
//Belt
fill(81, 34, 34);
triangle(155+mouseX, 220, 160+mouseX, 230, 237+mouseX, 160);
triangle(230+mouseX, 150, 150+mouseX, 220, 160+mouseX, 230);
triangle(240+mouseX, 160, 170+mouseX, 210, 220+mouseX, 160);
//Shoulder Attachments
fill(100, 0, 0);
//Left
triangle(175+mouseX, 175, 185+mouseX, 165, 150+mouseX, 150);
triangle(185+mouseX, 165, 160+mouseX, 140, 150+mouseX, 150);
//Right
triangle(225+mouseX, 175, 250+mouseX, 150, 240+mouseX, 140);
triangle(240+mouseX, 140, 215+mouseX, 165, 225+mouseX, 175);
//Shoes
//Red Bottom
fill(113, 0, 0);
triangle(125+mouseX, 340, 170+mouseX, 340, 150+mouseX, 290);
triangle(230+mouseX, 340, 275+mouseX, 340, 250+mouseX, 290);
//Black Top
fill(10);
triangle(130+mouseX, 325, 165+mouseX, 325, 150+mouseX, 290);
triangle(235+mouseX, 325, 270+mouseX, 325, 250+mouseX, 290);
//Waist Cape
fill(200);
triangle(210+mouseX, 210, 250+mouseX, 210, 260+mouseX, 260);
//Blade
fill(120);
triangle(290+mouseX, 130+sin(frameCount/20)*2, 270+mouseX, 40+sin(frameCount/20)*2, 290+mouseX, 40+sin(frameCount/20)*2);
fill(145);
triangle(290+mouseX, 130+sin(frameCount/20)*2, 290+mouseX, 40+sin(frameCount/20)*2, 310+mouseX, 40+sin(frameCount/20)*2);
fill(150);
triangle(270+mouseX, 40+sin(frameCount/20)*2, 310+mouseX, 40+sin(frameCount/20)*2, 290+mouseX, 0+sin(frameCount/20)*2);
fill(140);
triangle(290+mouseX, 0+sin(frameCount/20)*2, 290+mouseX, 40+sin(frameCount/20)*2, 270+mouseX, 40+sin(frameCount/20)*2);
//Hilt
fill(139, 69, 19);
rect(290+mouseX, 120+sin(frameCount/20)*2, 50, 15);
//ROGUE CLASS ATTIRE
//Mask
fill(100);
triangle(mouseX-238, 90, mouseX-198, 100, mouseX-198, 160);
triangle(mouseX-158, 90, mouseX-198, 100, mouseX-198, 160);
//Belt Equip
rect(mouseX-175, 200, 10, 30);
triangle(mouseX-174, 230, mouseX-164, 230, mouseX-169, 240);
//Belt
fill(44, 19, 19);
rect(mouseX-246, 205, 95, 15);
//Belt Buckle
fill(75);
ellipse(mouseX-219, 213, 20, 25);
//Gloves
fill(50);
ellipse(mouseX-108, 160+sin(frameCount/20)*2, 40, 40);
ellipse(mouseX-278, 220+sin(frameCount/20)*2, 40, 40);
//Dagger Blades
//Right
rect(mouseX-114, 185+sin(frameCount/20)*2, 10, 25);
triangle(mouseX-114, 210+sin(frameCount/20)*2, mouseX-104, 210+sin(frameCount/20)*2, mouseX-114, 230+sin(frameCount/20)*2);
//Left
rect(mouseX-330, 215+sin(frameCount/20)*2, 25, 10);
triangle(mouseX-349, 215+sin(frameCount/20)*2, mouseX-329, 215+sin(frameCount/20)*2, mouseX-329, 225+sin(frameCount/20)*2);
}
//Light on Key Click
void keyPressed()
{
//Run one frame per second when key clicked
frameRate(1);
//Selected Light
fill(255, 255, 0, 100);
triangle(70, 340, 200, 340, 200, -50);
triangle(330, 340, 200, 340, 200, -50);
arc(200, 340, 260, 70, 0, PI);
//Display text "Class Selected!"
println("Class Selected!");
}
/*
REFERENCES
http://www-acad.sheridanc.on.ca/PROG14998/2016/interactive-drawing/anita_he_interactive_drawing/index.html
Referred to code using sin, understanding the format in which the code must be typed.
*/