Lab3 - Song
void setup() {
size(580, 580);
smooth();
strokeWeight(3);
frameRate(60);
background(255);
scope();
}
void draw() {
fill(255);
ellipse(width/2, height/2, width*3/4, height*3/4);
text_bodyslam(0, 2);
crow(0, 2);
Cloud();
tear();
}
void text_bodyslam(float textX, float textY) {
float RT=width/16; //ratio text
textFont(createFont("Tahoma", 38));
String t = "Body Slam";
fill(0);
text(t, (RT)*5.5+RT*textX, (RT)*13+RT*textY);
}
void crow(float PositionX, float PositionY) {
float RC=width/16; //ratio crow
stroke(0);
fill(0);
//body//
line(RC*6.5+RC*PositionX, RC*5+RC*PositionY, RC*6.65+RC*PositionX, RC*5.5+RC*PositionY);
bezier(RC*9+RC*PositionX, RC*3.01+RC*PositionY, RC*8+RC*PositionX, RC*2.5+RC*PositionY,
RC*7+RC*PositionX, RC*3+RC*PositionY, RC*6.5+RC*PositionX, RC*5.01+RC*PositionY);
bezier(RC*6.65+RC*PositionX, RC*5.5+RC*PositionY, RC*6+RC*PositionX, RC*6+RC*PositionY,
RC*5.75+RC*PositionX, RC*7+RC*PositionY, RC*5.75+RC*PositionX, RC*7.5+RC*PositionY);
line(RC*5.75+RC*PositionX, RC*7.5+RC*PositionY, RC*6+RC*PositionX, RC*7.25+RC*PositionY);
bezier(RC*6+RC*PositionX, RC*7.25+RC*PositionY, RC*6+RC*PositionX, RC*8+RC*PositionY,
RC*6.8+RC*PositionX, RC*8.6+RC*PositionY, RC*7+RC*PositionX, RC*9+RC*PositionY);
//pen//
line(RC*9.0+RC*PositionX, RC*3.0+RC*PositionY, RC*10.0+RC*PositionX, RC*3.1+RC*PositionY);
bezier(RC*10+RC*PositionX, RC*3.1+RC*PositionY, RC*9.5+RC*PositionX, RC*3.25+RC*PositionY,
RC*9.15+RC*PositionX, RC*3.15+RC*PositionY, RC*9+RC*PositionX, RC*3.5+RC*PositionY);
bezier(RC*9+RC*PositionX, RC*3.5+RC*PositionY, RC*9.2+RC*PositionX, RC*3.4+RC*PositionY,
RC*9.5+RC*PositionX, RC*3.45+RC*PositionY, RC*10+RC*PositionX, RC*3.55+RC*PositionY);
noFill();
bezier(RC*10+RC*PositionX, RC*3.55+RC*PositionY, RC*9.25+RC*PositionX, RC*3.7+RC*PositionY,
RC*8.8+RC*PositionX, RC*4.35+RC*PositionY, RC*8.8+RC*PositionX, RC*5.25+RC*PositionY);
fill(0);
bezier(RC*8.8+RC*PositionX, RC*5.25+RC*PositionY, RC*10.2+RC*PositionX, RC*6.75+RC*PositionY,
RC*10.1+RC*PositionX, RC*8+RC*PositionY, RC*10+RC*PositionX, RC*9+RC*PositionY);
//tail//
beginShape();
vertex(RC*10+RC*PositionX, RC*9+RC*PositionY);
vertex(RC*11.25+RC*PositionX, RC*10.75+RC*PositionY);
vertex(RC*10.75+RC*PositionX, RC*10.5+RC*PositionY);
vertex(RC*10.95+RC*PositionX, RC*10.8+RC*PositionY);
vertex(RC*10.25+RC*PositionX, RC*10.5+RC*PositionY);
vertex(RC*10.35+RC*PositionX, RC*10.75+RC*PositionY);
vertex(RC*9.3+RC*PositionX, RC*9.8+RC*PositionY);
endShape();
//leg//
beginShape();
vertex(RC*7+RC*PositionX, RC*9+RC*PositionY);
vertex(RC*7.5+RC*PositionX, RC*10+RC*PositionY);
vertex(RC*7+RC*PositionX, RC*11.1+RC*PositionY);
vertex(RC*7.3+RC*PositionX, RC*11.1+RC*PositionY);
vertex(RC*8+RC*PositionX, RC*10+RC*PositionY);
vertex(RC*7.8+RC*PositionX, RC*9.5+RC*PositionY);
vertex(RC*8.7+RC*PositionX, RC*10.2+RC*PositionY);
vertex(RC*8.5+RC*PositionX, RC*11.1+RC*PositionY);
vertex(RC*8.8+RC*PositionX, RC*11.1+RC*PositionY);
vertex(RC*9.3+RC*PositionX, RC*9.8+RC*PositionY);
endShape();
strokeWeight(3);
beginShape();
vertex(RC*6.5+RC*PositionX, RC*5+RC*PositionY);
vertex(RC*6.65+RC*PositionX, RC*5.5+RC*PositionY);
vertex(RC*5.75+RC*PositionX, RC*7.5+RC*PositionY);
vertex(RC*6+RC*PositionX, RC*7.25+RC*PositionY);
vertex(RC*7+RC*PositionX, RC*9+RC*PositionY);
vertex(RC*9.3+RC*PositionX, RC*9.8+RC*PositionY);
vertex(RC*10+RC*PositionX, RC*9+RC*PositionY);
vertex(RC*8.8+RC*PositionX, RC*5.25+RC*PositionY);
vertex(RC*9+RC*PositionX, RC*3.5+RC*PositionY);
vertex(RC*10+RC*PositionX, RC*3.1+RC*PositionY);
vertex(RC*9.0+RC*PositionX, RC*3.0+RC*PositionY);
endShape();
beginShape();
vertex(RC*8.8+RC*PositionX, RC*5.25+RC*PositionY);
bezierVertex(RC*8.8+RC*PositionX, RC*4.35+RC*PositionY, RC*9.25+RC*PositionX, RC*3.7+RC*PositionY,
RC*10+RC*PositionX, RC*3.55+RC*PositionY);
vertex(RC*9+RC*PositionX, RC*3.5+RC*PositionY);
endShape();
ellipse(RC*7.8+RC*PositionX, RC*11.1+RC*PositionY, 130, 10);
}
void Cloud() {
noStroke();
fill(#828282);
beginShape();
vertex(width*14/16, height*2.5/16);
curveVertex(width*16/16, height*2.5/16);
curveVertex(width*13/16, height*1/16);
curveVertex(width*12/16, height*1/16);
curveVertex(width*10/16, height*2/16);
curveVertex(width*9/16, height*1.5/16);
curveVertex(width*7/16, height*1/16);
curveVertex(width*6/16, height*2/16);
curveVertex(width*4.5/16, height*1.5/16);
curveVertex(width*2.5/16, height*2.5/16);
curveVertex(width*3.5/16, height*4.0/16);
curveVertex(width*6/16, height*4.5/16);
curveVertex(width*7.5/16, height*4/16);
curveVertex(width*10/16, height*4/16);
curveVertex(width*12/16, height*3.5/16);
curveVertex(width*14/16, height*3/16);
curveVertex(width*14/16, height*2.5/16);
endShape();
}
void scope() {
//ratio scope
int Color=0;
for (float pos=width*2; pos>width*3/4; pos--) {
stroke(0);
if (pos<=width*5/4) {
stroke(Color, Color, Color);
Color++;
}
noFill();
ellipse(width/2, height/2, pos, pos);
}
}
float fallY=0, bigger=0, taller=0;
boolean rain_on=false;
void tear() {
if (mouseButton == LEFT)rain_on=true;
else if (mouseButton == RIGHT)rain_on=false;
if (rain_on) {
bigger+=0.1;
taller+=0.2;
fallY+=3;
float Yfalling=height*5.5/16+fallY;
float TBigger=width*5/580+bigger;
if (Yfalling>=height*13.5/16) {
taller=1;
Yfalling=height*13.5/16;
}
if (TBigger>width*30/580)TBigger=width*30/580;
noStroke();
fill(#87CEFF);
ellipse(width*8.5/16, Yfalling, TBigger, height*5/580+taller);
} else if (!rain_on) {
bigger=0;
taller=0;
fallY=0;
}
}