//Created by: Gavin Nelson
//Name of Creation:Not_so_typical_weather_balloon
//
//This is an interactive drawing that will allow the user to
//determine the weather in the scene and manipulate a hot air
//balloon and it floats over the sea. Pressing the mouse button
//will animate the cursor, simulating blowing wind.
//Setting canvas and mode
void setup() {
size(400, 400);
rectMode(CENTER);
frameRate(60); //Setting the rate drawing will move at
noCursor();
}
//animated parts of scene
void draw() {
//Layer zero
background(-mouseY*0.325, 115, 150+mouseY*0.325);
noStroke();
//small rain drops
strokeWeight(1);
stroke(0, 0, 255, 255-mouseY);
line(30-mouseY*0.5+frameCount*2%400, frameCount*4%400 , 50-mouseY*0.5+frameCount*2%400, 30+(frameCount*4)%400);
line(80-mouseY*0.5+frameCount*2%400, -70+frameCount*4%400 , 100-mouseY*0.5+frameCount*2%400, -40+(frameCount*4)%400);
line(180-mouseY*0.5+frameCount*2%400, 30+frameCount*4%400 , 200-mouseY*0.5+frameCount*2%400, 60+(frameCount*4)%400);
line(200-mouseY*0.5+frameCount*2%400, -100+frameCount*4%400 , 220-mouseY*0.5+frameCount*2%400 , -70+frameCount*4%400);
line(-200-mouseY*0.5+frameCount*2%400, -60+frameCount*4%400 , -180-mouseY*0.5+frameCount*2%400 , -30+frameCount*4%400);
line(-120+frameCount*2%800, -120+frameCount*4%800 , -100+frameCount*2%800, -90+(frameCount*4)%800);
line(-100+frameCount*2%800, -200+frameCount*4%800 , -80+frameCount*2%800, -170+(frameCount*4)%800);
line(60+frameCount*2%800, -250+frameCount*4%800 , 80+frameCount*2%800, -220+(frameCount*4)%800);
line(-100+frameCount*2%800, -400+frameCount*4%800 , -80+frameCount*2%800, -370+(frameCount*4)%800);
line(-100+frameCount*2%800, -350+frameCount*4%800 , -80+frameCount*2%800, -320+(frameCount*4)%800);
//Sun
fill(255, 255, 100, 125+mouseY*0.5);
ellipse(400-mouseY*0.1, mouseY*0.05, 100+mouseY*0.1, 100+mouseY*0.1);
//Small sun rays
stroke(255, 255, 100, 100+mouseY*0.5);
strokeWeight(2);
line(335-mouseY*0.2, 10+mouseY*0.1, 345-mouseY*0.17, 10+mouseY*0.09);
line(340-mouseY*0.12, 40+mouseY*0.17, 350-mouseY*0.12, 35+mouseY*0.14);
line(380-mouseY*0.07, 70+mouseY*0.17, 385-mouseY*0.07, 60+mouseY*0.14);
noStroke();
//Hot air balloon
//Lantern ropes
stroke(0);
strokeWeight(1);
line(180+(-50+mouseX*0.25), 150+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 200+(-50+mouseX*0.25), 180+(((mouseY*0.05)-17)*sin(frameCount*0.1)));
line(220+(-50+mouseX*0.25), 150+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 200+(-50+mouseX*0.25), 180+(((mouseY*0.05)-17)*sin(frameCount*0.1)));
//Balloon
fill(255, 0, 0);
ellipse(200+(-50+mouseX*0.25), 150+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 40, 40);
strokeWeight(2);
//Ropes
line(180+(-50+mouseX*0.25), 150+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 190+(-50+mouseX*0.25), 190+(((mouseY*0.05)-17)*sin(frameCount*0.1)));//Rope left
line(220+(-50+mouseX*0.25), 150+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 210+(-50+mouseX*0.25), 190+(((mouseY*0.05)-17)*sin(frameCount*0.1)));//Rope right
//Basket
fill(110, 84, 56);//Brown
stroke(90, 64, 36);//Darker Brown
quad(190+(-50+mouseX*0.25), 190+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 210+(-50+mouseX*0.25), 190+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 208+(-50+mouseX*0.25), 202+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 192+(-50+mouseX*0.25), 202+(((mouseY*0.05)-17)*sin(frameCount*0.1)));
//Fire
stroke(255, 120, 0);//Orange
strokeWeight(2);
line(200+(-50+mouseX*0.25), 180+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 200+(-50+mouseX*0.25), 175+(((mouseY*0.05)-17)*sin(frameCount*0.1)));
//Lantern
noStroke();
fill(200);//Grey
rect(200+(-50+mouseX*0.25), 180+(((mouseY*0.05)-17)*sin(frameCount*0.1)), 6, 6);
//cloud1
fill(200, 200, 200);
quad(355-mouseY*0.25, 0, 355-mouseY*0.25, 20, 0-mouseY*0.25, 63, 0-mouseY*0.25, 0);
strokeWeight(1);
stroke(80, 80, 90);
arc(350-mouseY*0.25, 0, 50, 50, 0, HALF_PI);
arc(280-mouseY*0.25, 20, 100, 75, 0, PI);
arc(315-mouseY*0.25, 20, 75, 50, 0, HALF_PI);
arc(230-mouseY*0.25, 20, 100, 75, 1, PI-QUARTER_PI);
arc(200-mouseY*0.25, 20, 100, 75, 1, PI);
arc(110-mouseY*0.25, 20, 100, 95, 0.75, 2.5);
arc(150-mouseY*0.25, 20, 100, 75, 0.75, 2);
arc(60-mouseY*0.25, 20, 100, 95, 0.75, 2.5);
arc(25-mouseY*0.25, 20, 100, 95, 0.75, 2.5);
//cloud 2
fill(200, 200, 200);
noStroke();
quad(385-mouseY*0.7, 0, 385-mouseY*0.7, 40, 0-mouseY*0.7, 83, 0-mouseY*0.7, 0);
strokeWeight(1);
stroke(80, 80, 90);
arc(375-mouseY*0.7, 20, 70, 70, -1.2, HALF_PI);
arc(300-mouseY*0.7, 45, 90, 70, 0, 3);
arc(345-mouseY*0.7, 40, 70, 70, 0, 2);
arc(215-mouseY*0.7, 40, 110, 70, 0.6, 2);
arc(255-mouseY*0.7, 40, 70, 70, 0.6, 2.2);
arc(175-mouseY*0.7, 50, 70, 70, 0.3, 2.6);
arc(70-mouseY*0.7, 50, 50, 100, 0.4, 2.7);
arc(100-mouseY*0.7, 55, 110, 70, 0.2, 2);
arc(10-mouseY*0.7, 60, 100, 100, 0.3, 3);
//cloud 3
fill(200, 200, 200);
noStroke();
quad(401-mouseY, 0, 401-mouseY, 75, 0-mouseY, 135, 0-mouseY, 0);
strokeWeight(2);
stroke(80, 80, 90);
arc(400-mouseY*1.1, 0, 80, 150, 0, HALF_PI);
arc(330-mouseY*1.1, 70, 100, 75, 0, 2.5);
arc(365-mouseY*1.1, 70, 75, 50, 0, 2);
arc(280-mouseY*1.1, 70, 100, 75, 1, PI-QUARTER_PI);
arc(250-mouseY*1.1, 70, 100, 75, 1, 2.5);
arc(160-mouseY*1.1, 70, 100, 95, 0.75, 2.5);
arc(200-mouseY*1.1, 70, 100, 75, 0.75, 2);
arc(110-mouseY*1.1, 75, 100, 95, 0.75, 2.5);
arc(25-mouseY*1.1, 95, 100, 95, 0.75, 2.5);
arc(75-mouseY*1.1, 90, 100, 95, 0.75, 2.5);
//Wave 1
noStroke();
fill(50+mouseY*0.1, mouseY*0.2, 255);
quad(-80+( 40+frameCount)%480 , 400, -80+( 40+frameCount)%480, 320+5*sin(frameCount*0.1), ( 40+frameCount)%480, 280+5*sin(frameCount*0.1), ( 40+frameCount)%480, 400);
fill(-mouseY*0.325, 115, 150+mouseY*0.325);
noStroke();
ellipse((40+frameCount)%480, 300+5*sin(frameCount*0.1), 10, 40);
fill(50+mouseY*0.1, mouseY*0.2, 255);
quad(-80+(120+frameCount)%480 , 400, -80+(120+frameCount)%480, 320+5*sin(frameCount*0.1), (120+frameCount)%480, 280+5*sin(frameCount*0.1), (120+frameCount)%480, 400);
fill(-mouseY*0.325, 115, 150+mouseY*0.325);
noStroke();
ellipse((120+frameCount)%480, 300+5*sin(frameCount*0.1), 10, 40);
fill(50+mouseY*0.1, mouseY*0.2, 255);
quad(-80+(200+frameCount)%480 , 400, -80+(200+frameCount)%480, 320+5*sin(frameCount*0.1), (200+frameCount)%480, 280+5*sin(frameCount*0.1), (200+frameCount)%480, 400);
fill(-mouseY*0.325, 115, 150+mouseY*0.325);
noStroke();
ellipse((200+frameCount)%480, 300+5*sin(frameCount*0.1), 10, 40);
fill(50+mouseY*0.1, mouseY*0.2, 255);
quad(-80+(280+frameCount)%480 , 400, -80+(280+frameCount)%480, 320+5*sin(frameCount*0.1), (280+frameCount)%480, 280+5*sin(frameCount*0.1), (280+frameCount)%480, 400);
fill(-mouseY*0.325, 115, 150+mouseY*0.325);
noStroke();
ellipse((280+frameCount)%480, 300+5*sin(frameCount*0.1), 10, 40);
fill(50+mouseY*0.1, mouseY*0.2, 255);
quad(-80+(360+frameCount)%480 , 400, -80+(360+frameCount)%480, 320+5*sin(frameCount*0.1), (360+frameCount)%480, 280+5*sin(frameCount*0.1), (360+frameCount)%480, 400);
fill(-mouseY*0.325, 115, 150+mouseY*0.325);
noStroke();
ellipse((360+frameCount)%480, 300+5*sin(frameCount*0.1), 10, 40);
fill(50+mouseY*0.1, mouseY*0.2, 255);
quad(-80+(440+frameCount)%480 , 400, -80+(440+frameCount)%480, 320+5*sin(frameCount*0.1), (440+frameCount)%480, 280+5*sin(frameCount*0.1), (440+frameCount)%480, 400);
fill(-mouseY*0.325, 115, 150+mouseY*0.325);
noStroke();
ellipse((440+frameCount)%480, 300+5*sin(frameCount*0.1), 10, 40);
fill(50+mouseY*0.1, mouseY*0.2, 255);
//Land
fill(100);
ellipse(200, 400, 500, 110);
fill(85, 133, 64); //Green
ellipse(200, 400, 460, 90);
//Bench
strokeWeight(5);
stroke(150);
line(150, 310, 150, 365);//Left back rail
line(250, 310, 250, 365);//Right back rail
line(150, 365, 140, 385);//Left bottom rail
line(250, 365, 260, 385);//Right bottom rail
noStroke();
fill(110, 84, 56);//Brown
rect(200, 325, 140, 20); //Back top
rect(200, 350, 140, 20); //Back bottom
quad(130, 365, 270, 365, 280, 380, 120, 380); //Bottom back
quad(118, 385, 282, 385, 280, 400, 120, 400);
//Big sun ray
noStroke();
fill(255, 255, 100, -50+mouseY*0.5);
triangle(400-mouseY*0.1, 0, 400, 400, 400-mouseY, 400);
//Cursor substitute
strokeWeight(3);
stroke(100);
line(mouseX-5, mouseY, mouseX+20, mouseY);
line(mouseX-5, mouseY, mouseX-10, mouseY-5);
line(mouseX-10, mouseY-5, mouseX-5, mouseY-10);
}
//Cursor breeze icon
void mousePressed(){
frameRate(2);
noFill();
strokeWeight(3);
stroke(100);
line(mouseX, mouseY, mouseX+40, mouseY);
line(mouseX, mouseY+5, mouseX+20, mouseY+5);
line(mouseX, mouseY+5, mouseX-5, mouseY+10);
line(mouseX-5, mouseY+10, mouseX, mouseY+15);
line(mouseX-15, mouseY, mouseX-20, mouseY-5);
line(mouseX-20, mouseY-5, mouseX-10, mouseY-15);
}
void mouseReleased(){
frameRate(60);
}