/***********************
Sebastian Santmaura's
Sentient Training Dummy
"Pracice your swordsmanship!"
September 22th, 2016
*************************/
//Setup
void setup(){
//size
size(400,400);
}
void draw(){
//background wall
background(70,70,70);
//framerate
frameRate(60);
noStroke();
rectMode(CORNERS);
//green grass ground
fill(0,175,10);
rect(0,350,400,400);
//gray bricks for wall
rectMode(CENTER);
fill(130,130,130);
rect(35,25,60,40);
rect(105,25,60,40);
rect(175,25,60,40);
rect(245,25,60,40);
rect(315,25,60,40);
rect(385,25,60,40);
rect(0,75,60,40);
rect(70,75,60,40);
rect(140,75,60,40);
rect(210,75,60,40);
rect(280,75,60,40);
rect(350,75,60,40);
rect(420,75,60,40);
rect(35,125,60,40);
rect(105,125,60,40);
rect(175,125,60,40);
rect(245,125,60,40);
rect(315,125,60,40);
rect(385,125,60,40);
rect(0,175,60,40);
rect(70,175,60,40);
rect(140,175,60,40);
rect(210,175,60,40);
rect(280,175,60,40);
rect(350,175,60,40);
rect(420,175,60,40);
rect(35,225,60,40);
rect(105,225,60,40);
rect(175,225,60,40);
rect(245,225,60,40);
rect(315,225,60,40);
rect(385,225,60,40);
//SO MANY!!!
rect(0,275,60,40);
rect(70,275,60,40);
rect(140,275,60,40);
rect(210,275,60,40);
rect(280,275,60,40);
rect(350,275,60,40);
rect(420,275,60,40);
rect(35,325,60,40);
rect(105,325,60,40);
rect(175,325,60,40);
rect(245,325,60,40);
rect(315,325,60,40);
rect(385,325,60,40);
//the making of the dummy was more
//time consuming than the wall
//wooden stand
rectMode(CORNERS);
fill(98,66,18);
rect(180,280,220,350);
//wooden "arms"
rect(60,120,80,130);
rect(320,120,340,130);
//wooden "neck"
rect(190,80,210,120);
stroke(0);
//chainmail shirt
fill(190,190,190);
rect(80,118,320,150);
rect(155,118,245,280);
ellipseMode(CORNERS);
//metal helmet
ellipse(165,35,235,105);
noStroke();
ellipseMode(CENTER);
//wooden head
fill(150,110,50);
arc(200, 70, 70, 70,0, PI);
//helmet details
fill(190,190,190);
rect(195,70,205,90);
//more deets
fill(100,100,100);
rect(165,63,235,70);
//bolts in helmet
fill(120,120,120);
ellipse(170,66.5,3,3);
ellipse(180,66.5,3,3);
ellipse(190,66.5,3,3);
ellipse(200,66.5,3,3);
ellipse(210,66.5,3,3);
ellipse(220,66.5,3,3);
ellipse(230,66.5,3,3);
//shine
fill(255);
ellipse(210,50,10,10);
//blades of grass
fill(0,175,10);
triangle(350,340,360,350,355,350);
triangle(360,350,370,350,370,320);
triangle(365,350,370,350,380,330);
triangle(370,350,375,350,390,330);
//wooden details
stroke(70,40,0);
noFill();
strokeWeight(2);
line(215,300,215,345);
line(205,282,205,320);
line(200,300,200,335);
line(190,290,190,325);
line(190,330,190,346);
line(185,282,185,310);
line(195,107,195,110);
line(200,111,200,116);
line(205,108,205,114);
line(338,122,330,122);
line(322,126,332,126);
line(61,122,73,122);
line(61,126,69,126);
//chainmail details(cross hatches)
stroke(95,95,95);
line(80,120,100,150);
line(100,120,120,150);
line(120,120,140,150);
line(140,120,245,275);
line(155,173,226,280);
line(155,202,205,280);
line(155,235,185,280);
line(160,120,245,247);
line(180,120,245,215);
line(200,120,245,185);
line(220,120,245,155);
line(240,120,260,150);
line(260,120,280,150);
line(280,120,300,150);
line(300,120,320,150);
line(320,120,300,150);
line(300,120,280,150);
line(280,120,260,150);
line(260,120,156,276);
line(240,120,156,244);
line(220,120,154,218);
line(200,120,154,188);
line(180,120,155,154);
line(160,120,140,150);
line(140,120,120,150);
line(120,120,100,150);
line(100,120,80,150);
line(244,178,175,280);
line(244,207,195,280);
line(244,235,215,280);
//more grass blades
fill(0,175,10);
noStroke();
triangle(230,330,220,350,215,350);
triangle(230,320,215,350,205,350);
triangle(210,320,205,350,195,350);
triangle(212,330,210,350,205,350);
triangle(190,330,210,350,205,350);
triangle(195,350,190,350,180,320);
triangle(190,350,180,350,170,330);
triangle(170,330,168,335,172,332);
triangle(180,350,160,340,190,350);
//scleras(eyes)
fill(255);
ellipse(184,80,18,18);
ellipse(216,80,18,18);
//pupils follow the mouse
noStroke();
ellipseMode(CORNERS);
fill(0);
ellipse(205.7+mouseX/40,70+mouseY/40,215.7+mouseX/40,80+mouseY/40);
ellipse(175.7+mouseX/40,70+mouseY/40,185.7+mouseX/40,80+mouseY/40);
//wooden sword that is always on the mouse's position
fill(77,46,4);
rectMode(CENTER);
rect(mouseX,mouseY,10,30);
rect(mouseX,mouseY-15,50,10);
rect(mouseX,mouseY-60,30,80);
triangle(mouseX-15,mouseY-100,mouseX,mouseY-120,mouseX+15,mouseY-100);
stroke(70,40,0);
line(mouseX,mouseY-25,mouseX,mouseY-105);
}
/*sword tilts when the mouse is pressed,
giving the impression of being swung.
The dummy also closes its eyes*/
void mousePressed(){
//had to remake the entire wall + dummy to hide the upward sword :/
background(70,70,70);
//so you can see the changes easier
frameRate(5);
noStroke();
rectMode(CORNERS);
//ground
fill(0,175,10);
rect(0,350,400,400);
//bricks
rectMode(CENTER);
fill(130,130,130);
rect(35,25,60,40);
rect(105,25,60,40);
rect(175,25,60,40);
rect(245,25,60,40);
rect(315,25,60,40);
rect(385,25,60,40);
rect(0,75,60,40);
rect(70,75,60,40);
rect(140,75,60,40);
rect(210,75,60,40);
rect(280,75,60,40);
rect(350,75,60,40);
rect(420,75,60,40);
rect(35,125,60,40);
rect(105,125,60,40);
rect(175,125,60,40);
rect(245,125,60,40);
rect(315,125,60,40);
rect(385,125,60,40);
rect(0,175,60,40);
rect(70,175,60,40);
rect(140,175,60,40);
rect(210,175,60,40);
rect(280,175,60,40);
rect(350,175,60,40);
rect(420,175,60,40);
//this is what happens without loops
rect(35,225,60,40);
rect(105,225,60,40);
rect(175,225,60,40);
rect(245,225,60,40);
rect(315,225,60,40);
rect(385,225,60,40);
rect(0,275,60,40);
rect(70,275,60,40);
rect(140,275,60,40);
rect(210,275,60,40);
rect(280,275,60,40);
rect(350,275,60,40);
rect(420,275,60,40);
rect(35,325,60,40);
rect(105,325,60,40);
rect(175,325,60,40);
rect(245,325,60,40);
rect(315,325,60,40);
rect(385,325,60,40);
rectMode(CORNERS);
fill(98,66,18);
rect(180,280,220,350);
rect(60,120,80,130);
rect(320,120,340,130);
rect(190,80,210,120);
stroke(0);
fill(190,190,190);
rect(80,118,320,150);
rect(155,118,245,280);
ellipseMode(CORNERS);
ellipse(165,35,235,105);
noStroke();
ellipseMode(CENTER);
fill(150,110,50);
arc(200, 70, 70, 70,0, PI);
fill(190,190,190);
rect(195,70,205,90);
fill(100,100,100);
rect(165,63,235,70);
fill(120,120,120);
ellipse(170,66.5,3,3);
ellipse(180,66.5,3,3);
ellipse(190,66.5,3,3);
ellipse(200,66.5,3,3);
ellipse(210,66.5,3,3);
ellipse(220,66.5,3,3);
ellipse(230,66.5,3,3);
fill(255);
ellipse(210,50,10,10);
fill(0,175,10);
triangle(350,340,360,350,355,350);
triangle(360,350,370,350,370,320);
triangle(365,350,370,350,380,330);
triangle(370,350,375,350,390,330);
stroke(70,40,0);
noFill();
strokeWeight(2);
line(215,300,215,345);
line(205,282,205,320);
line(200,300,200,335);
line(190,290,190,325);
line(190,330,190,346);
line(185,282,185,310);
line(195,107,195,110);
line(200,111,200,116);
line(205,108,205,114);
line(338,122,330,122);
line(322,126,332,126);
line(61,122,73,122);
line(61,126,69,126);
stroke(95,95,95);
line(80,120,100,150);
line(100,120,120,150);
line(120,120,140,150);
line(140,120,245,275);
line(155,173,226,280);
line(155,202,205,280);
line(155,235,185,280);
line(160,120,245,247);
line(180,120,245,215);
line(200,120,245,185);
line(220,120,245,155);
line(240,120,260,150);
line(260,120,280,150);
line(280,120,300,150);
line(300,120,320,150);
line(320,120,300,150);
line(300,120,280,150);
line(280,120,260,150);
line(260,120,156,276);
line(240,120,156,244);
line(220,120,154,218);
line(200,120,154,188);
line(180,120,155,154);
line(160,120,140,150);
line(140,120,120,150);
line(120,120,100,150);
line(100,120,80,150);
line(244,178,175,280);
line(244,207,195,280);
line(244,235,215,280);
fill(0,175,10);
noStroke();
triangle(230,330,220,350,215,350);
triangle(230,320,215,350,205,350);
triangle(210,320,205,350,195,350);
triangle(212,330,210,350,205,350);
triangle(190,330,210,350,205,350);
triangle(195,350,190,350,180,320);
triangle(190,350,180,350,170,330);
triangle(170,330,168,335,172,332);
triangle(180,350,160,340,190,350);
ellipseMode(CENTER);
//covering the scleras
noStroke();
fill(150,110,50);
ellipse(184,80,18.5,18.5);
ellipse(216,80,18.5,18.5);
// lines on the eyes
stroke(0);
line(208,80,228,80);
line(208,80,225,70);
line(208,80,225,90);
line(192,80,172,80);
line(192,80,175,70);
line(192,80,175,90);
//This was the hardest part,
//making the sword tilt
noStroke();
fill(77,46,4);
quad(mouseX+10,mouseY+10,mouseX-10,mouseY-10,mouseX-20,mouseY,mouseX,mouseY+20);
quad(mouseX+11,mouseY-25,mouseX,mouseY-35,mouseX-45,mouseY+8,mouseX-35,mouseY+20);
quad(mouseX-10,mouseY-20,mouseX-70,mouseY-85,mouseX-90,mouseY-65,mouseX-30,mouseY-1);
triangle(mouseX-69,mouseY-84,mouseX-89,mouseY-64,mouseX-95,mouseY-90);
stroke(70,40,0);
line(mouseX-25,mouseY-15,mouseX-85,mouseY-80);
//also added "action lines"
stroke(255);
noFill();
arc(mouseX-5, mouseY-50,100,100, PI+QUARTER_PI, TWO_PI);
arc(mouseX-5, mouseY-30,80,80, PI+QUARTER_PI, TWO_PI);
}
//while you were reading this, I studied the blade.