///////////////////////////////////////////
///// BOUNCE TOY /////////
//////////////////////////////////////////
//This toy bounces between two bumpers depending on how fast you push them, and the bumpers glow when they're struck. Delightful!
//By: Daniel Jones
//Note to self: translate(mousex, mousey) will draw everything under it relative to mousex and mousey
//Declare variables
float mouseSpeed = 0.0, rectSpeedX = 0.0, rectSpeedY = 0.0;
int rectPosX = width/2, rectPosY = height/2, rectPosX2 = width/2, rectPosY2 = height/2, blueValLeft = 0, blueValRight = 0, blueValLeft2 = 0, blueValRight2 = 0;
//Set frame rate, window size, etc.
void setup() {
frameRate(60);
size(1000, 1000);
rectPosY = height/2;
rectMode(CENTER);
}
void draw() {
drawBackground();
horizSetup();
verticalSetup();
//diagLeftSetup();
//diagRightSetup();
}
void drawBackground(){
//Draw the lightest shade of green on the BG
background(0, 255, 175);
//Draw increasingly bright rectangles as gradients
noStroke();
fill(0, 100, 0);
rect(width/2, 900, 1000, 200);
fill(0, 150, 40);
rect(width/2, 700, 1000, 200);
fill(0, 200, 80);
rect(width/2, 500, 1000, 200);
fill(0, 230, 115);
rect(width/2, 300, 1000, 200);
}
void horizSetup(){
//Set the line color
stroke(0, 0, 0);
//Calculate the mouse speed
mouseSpeed = mouseX - pmouseX;
//Determine if the mouse is moving within the confines of the square
if (mouseX < rectPosX + 50 && mouseX > rectPosX - 50 && mouseY < rectPosY + 50 && mouseY > rectPosY - 50)
{
//Set the rectangle's horizontal speed to a fraction of the mouse speed
rectSpeedX = mouseSpeed / 1.5;
}
//Allow the speed variable to affect the square's position
rectPosX += rectSpeedX;
//Check if the square has collided with the left bumper
if(rectPosX < 150)
{
rectPosX = 150;
rectSpeedX = rectSpeedX * -1;
blueValLeft = 255;
}
//Check if the square has collided with the right bumper
if(rectPosX > 850)
{
rectPosX = 850;
rectSpeedX = rectSpeedX * -1;
blueValRight = 255;
}
// Make the square decelerate if it is in motion
if (rectSpeedX > 0)
{
rectSpeedX -= .1;
}
if (rectSpeedX < 0);
{
rectSpeedX += .1;
}
//Draw the bumpers
fill(255, blueValLeft, 0);
rect(50, rectPosY, 100, 100);
fill(255, blueValRight, 0);
rect(950, rectPosY, 100, 100);
//Draw the square
fill(255, 150, 150);
rect(rectPosX, rectPosY, 100, 100);
//Slowly decrease the brightness of a bumper after they've been hit.
if (blueValLeft > 0)
{
blueValLeft -= 6;
}
if (blueValRight > 0)
{
blueValRight -=6;
}
}
void verticalSetup(){
//Set the line color
stroke(0, 0, 0);
//Calculate the mouse speed
mouseSpeed = mouseY - pmouseY;
//Determine if the mouse is moving within the confines of the square
if (mouseX < rectPosX2 + 50 && mouseX > rectPosX2 - 50 && mouseY < rectPosY2 + 50 && mouseY > rectPosY2 - 50)
{
//Set the rectangle's horizontal speed to a fraction of the mouse speed
rectSpeedY = mouseSpeed / 1.5;
}
//Allow the speed variable to affect the square's position
rectPosY2 += rectSpeedY;
//Check if the square has collided with the left bumper
if(rectPosY2 < 150)
{
rectPosY2 = 150;
rectSpeedY = rectSpeedY * -1;
blueValLeft2 = 255;
}
//Check if the square has collided with the right bumper
if(rectPosY2 > 850)
{
rectPosY2 = 850;
rectSpeedY = rectSpeedY * -1;
blueValRight2 = 255;
}
// Make the square decelerate if it is in motion
if (rectSpeedY > 0)
{
rectSpeedY -= .1;
}
if (rectSpeedY < 0);
{
rectSpeedY += .1;
}
// Set the horizontal position of the mechanism
rectPosX2 = width/2;
//Draw the bumpers
fill(0, blueValLeft2, 255);
rect(rectPosX2, 50, 100, 100);
fill(0, blueValRight2, 255);
rect(rectPosX2, 950, 100, 100);
//Draw the square
fill(150, 150, 255);
rect(rectPosX2, rectPosY2, 100, 100);
//Slowly decrease the brightness of a bumper after they've been hit.
if (blueValLeft2 > 0)
{
blueValLeft2 -= 6;
}
if (blueValRight2 > 0)
{
blueValRight2 -=6;
}
}