/*
By Leona Wu
interactive_toy1:Tobi the Tapioca
Avoid the falling straws or Tobi will get hurt. "Ouch"would be printed on screen if Tobi gets hit by straw.
In console log it'll show feedback if Tobi gets hit by straw
Use mouseX to move Tobi from side to side
Mouse press will change the color of Tobi
reference Daniel Shiffman "Learning Processing" 5-09 Gravity
*/
float ballX= 0;
float ballY1= random(0, 250);
float ballY2= random(0, 250);
float ballY3= random(0, 250);
float ballSizeX1= random(5, 50);
float ballSizeY1= ballSizeX1;
float ballSizeX2= random(10, 60);
float ballSizeY2= ballSizeX2;
float ballSizeX3= random(7, 57);
float ballSizeY3= ballSizeX3;
float ballSpeed= 5;
float strawx= random(30, 370);
float strawy= 0;
float speed = 0;
float gravity = 0.30;
float tobiPositionY= 360;
color tobiColor= color(255, 221, 215);
void setup() {
size(400, 400);
noCursor();
}
void draw() {
drawBackground();
backgroundBalls();
drawTobi();
strawFall();
//When straw touches Tobi text will appear in the middle of the screen and console log
if (strawx-21<mouseX && strawx+21>mouseX&& strawy-25< 340 && strawy+25>340 ) {
fill(150, 147, 136);
textAlign (CENTER, CENTER);
textSize (80);
text("Ouch", width/2, height/2);
println("Tobi got hurt");
}
}
void drawBackground() {
//background colour
background(200, 255, 255);
fill(119, 156, 209);
rect(width/2, 400, 400, 200);
fill(164, 186, 227);
rect(width/2, 400, 400, 150);
fill(183, 191, 228);
rect(width/2, 400, 400, 100);
fill(196, 197, 227);
rect(width/2, 400, 400, 50);
//edges
fill(241, 217, 191);
triangle(0, 80, 50, 400, 0, 400);
triangle(400, 80, 350, 400, 400, 400);
}
void backgroundBalls() {
//draw balls
noStroke();
fill(254, 254, 220);
//ball1
ellipse(ballX, ballY1, ballSizeX1, ballSizeY1);
//ball2
ellipse(ballX, ballY2, ballSizeX2, ballSizeY2);
//ball3
ellipse(ballX, ballY3, ballSizeX3, ballSizeY3);
//makes balls move from side
ballX += ballSpeed;
//when balls reache the edge it'll reset
if (ballX > width) {
ballX=0;
speed=0;
ballSizeX1=random(5, 50);
ballSizeY1=ballSizeX1;
ballSizeX2= random(10, 60);
ballSizeY2= ballSizeX2;
ballSizeX3= random(7, 57);
ballSizeY3= ballSizeX3;
ballY1=random(0, 250);
ballY2=random(0, 250);
ballY3=random(0, 250);
}
}
void strawFall() {
fill(254, 236, 152);
stroke(255);
rectMode(CENTER);
rect(strawx, strawy, 30, 120, 5);
noStroke();
fill(238, 215, 174);
rect(strawx+6, strawy, 15, 120, 5);
//straw speed
strawy += speed;
//straw gravity
speed += gravity;
//when straw reaches bottom it'll reset to top
if (strawy > height) {
strawy=0;
speed=0;
strawx=random(0, 400);
}
}
void drawTobi() {
//Tobi moves according to mouseX position
ellipseMode(CENTER);
//legs
fill(tobiColor);
stroke(205, 157, 149);
ellipse(mouseX-8, tobiPositionY+22, 10, 15);
ellipse(mouseX+8, tobiPositionY+22, 10, 15);
//body
ellipse(mouseX, tobiPositionY, 43, 50);
//face
noStroke();
fill(138, 105, 93);
ellipse(mouseX-10, tobiPositionY-5.5, 6, 6);
ellipse(mouseX+10, tobiPositionY-5.5, 6, 6);
rect(mouseX, tobiPositionY, 7, 2);
//hands
fill(200, 179, 176);
arc(mouseX+7, tobiPositionY+10, 10, 9, 0, PI+HALF_PI);
arc(mouseX-7, tobiPositionY+10, 10, 10, radians(-75), radians(179));
}
void mousePressed() {
//when mouse is pressed TObi changes color
tobiColor= color(random(255), random(255), random(255));
}