/*
Interactive Drawing - River
By: JinXuan (Jacky) Xu
- place the mouse in the center-ish to see a perfect reflection
of the bridge in the river
- move the mouse left and right to ripple the reflection
- move the mouse up to go into night time
- move the mouse around during the night to move the fireflies
- click the mouse to light up the fireflies
*/
//setup size, rectangle mode to corner with no border(stroke)
void setup() {
size(400, 400);
rectMode(CORNER);
noStroke();
}
void draw () {
//constantly set the frame rate to 60
frameRate (60);
//draw sky and dark undertone
background(30);
fill (136, 178, 198, mouseY/2+130);
rect (0, 0, 400, 160);
//dark red structure, transparency increses when mouse moves up
fill (121, 55, 56, mouseY/1.5+120);
rect (320, 10, 20, 10);
rect (320, 30, 20, 30);
//red structure, transparency increses when mouse moves up
fill (172, 73, 75, mouseY/1.5+120);
rect (290, 0, 110, 10);
rect (270, 10, 30, 10);
//2
rect (250, 20, 20, 10);
rect (250, 40, 20, 10);
rect (290, 20, 110, 10);
//3
rect (230, 30, 20, 10);
rect (230, 50, 20, 10);
rect (270, 30, 30, 10);
rect (290, 40, 10, 20);
//4
rect (210, 40, 20, 10);
rect (210, 60, 20, 10);
//5
rect (190, 50, 20, 10);
rect (190, 70, 20, 10);
//6
rect (170, 60, 20, 10);
rect (170, 80, 20, 10);
//7
rect (150, 70, 20, 10);
rect (150, 90, 20, 10);
rect (140, 80, 10, 60);
//lanturn
rect (80, 110, 10, 30);
rect (100, 110, 10, 30);
rect (70, 100, 50, 10);
rect (80, 90, 30, 10);
rect (90, 80, 10, 10);
//candle
fill (200, 200, 200);
rect (90, 120, 10, 20);
//dark bridge, transparency increses when mouse moves up
fill (58, 58, 58, mouseY/1.5+120);
rect (290, 60, 20, 10);
rect (370, 60, 30, 20);
rect (330, 70, 30, 10);
rect (340, 80, 20, 10);
rect (290, 80, 20, 20);
rect (280, 90, 10, 10);
rect (270, 100, 30, 20);
rect (260, 110, 10, 10);
rect (230, 90, 10, 10);
rect (220, 100, 20, 10);
rect (210, 120, 30, 20);
rect (190, 110, 10, 10);
rect (170, 120, 30, 10);
rect (180, 140, 40, 10);
rect (100, 140, 50, 10);
rect (40, 150, 20, 10);
rect (120, 150, 30, 10);
rect (220, 150, 20, 10);
//light bridge, transparency increses when mouse moves up
fill (80, 80, 80, mouseY/1.5+120);
rect (310, 60, 60, 10);
rect (270, 70, 60, 10);
rect (360, 70, 10, 20);
rect (370, 80, 30, 10);
rect (250, 80, 40, 10);
rect (310, 80, 30, 10);
rect (240, 90, 40, 10);
rect (240, 100, 30, 10);
rect (310, 90, 50, 10);
rect (300, 100, 20, 10);
rect (210, 100, 10, 10);
rect (200, 110, 60, 10);
rect (200, 120, 10, 10);
rect (240, 120, 30, 20);
rect (270, 120, 10, 10);
rect (150, 130, 60, 10);
rect (0, 140, 100, 10);
rect (0, 150, 40, 10);
rect (60, 150, 60, 10);
rect (150, 150, 70, 10);
rect (150, 140, 30, 10);
rect (220, 140, 30, 10);
//REFLECTIONS
//LINE 1, follows the mouse horizontally
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (mouseX/8-50, 160, 65, 10);
rect (mouseX/8+35, 160, 60, 10);
rect (mouseX/8+125, 160, 70, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (mouseX/8+95, 160, 30, 10);
rect (mouseX/8+195, 160, 20, 10);
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/8+215, 160, 110, 10);
rect (mouseX/8+345, 160, 130, 10);
fill (219, 167, 188, mouseY/1.5+120); //pink peddle
rect (mouseX/8+15, 160, 20, 10);
rect (mouseX/8+325, 160, 20, 10);
//LINE 2, follows the mouse horizontally
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (mouseX/8-50, 170, 125, 10);
rect (mouseX/8+125, 170, 30, 10);
rect (mouseX/8+195, 170, 30, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (mouseX/8+75, 170, 50, 10);
rect (mouseX/8+155, 170, 40, 10);
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/8+225, 170, 300, 10);
//LINE 3, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/5-80, 180, 120, 10);
rect (mouseX/5+70, 180, 30, 10);
rect (mouseX/5+230, 180, 170, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (mouseX/5+40, 180, 10, 10);
rect (mouseX/5+60, 180, 10, 10);
rect (mouseX/5+100, 180, 10, 10);
fill (160, 185, 168, mouseY/1.5+120); //candle
rect (mouseX/5+50, 180, 10, 10);
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (mouseX/5+110, 180, 60, 10);
rect (mouseX/5+200, 180, 30, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (mouseX/5+170, 180, 30, 10);
//LINE 4, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/8, 190, 105, 10);
rect (-mouseX/8+135, 190, 30, 10);
rect (-mouseX/8+175, 190, 20, 10);
rect (-mouseX/8+305, 190, 145, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (-mouseX/8+105, 190, 10, 10);
rect (-mouseX/8+125, 190, 10, 10);
rect (-mouseX/8+165, 190, 10, 10);
fill (160, 185, 168, mouseY/1.5+120); //candle
rect (-mouseX/8+115, 190, 10, 10);
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (-mouseX/8+225, 190, 10, 10);
rect (-mouseX/8+265, 190, 40, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (-mouseX/8+195, 190, 30, 10);
rect (-mouseX/8+235, 190, 30, 10);
//LINE 5, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/4-100, 200, 130, 10);
rect (mouseX/4+40, 200, 10, 10);
rect (mouseX/4+60, 200, 30, 10);
rect (mouseX/4+100, 200, 40, 10);
rect (mouseX/4+250, 200, 150, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (mouseX/4+30, 200, 10, 10);
rect (mouseX/4+50, 200, 10, 10);
rect (mouseX/4+90, 200, 10, 10);
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (mouseX/4+150, 200, 60, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (mouseX/4+140, 200, 10, 10);
rect (mouseX/4+210, 200, 40, 10);
//LINE 6, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/8, 210, 95, 10);
rect (-mouseX/8+145, 210, 20, 10);
rect (-mouseX/8+175, 210, 60, 10);
rect (-mouseX/8+345, 210, 105, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (-mouseX/8+95, 210, 50, 10);
rect (-mouseX/8+165, 210, 10, 10);
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (-mouseX/8+235, 210, 10, 10);
rect (-mouseX/8+265, 210, 30, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (-mouseX/8+245, 210, 20, 10);
rect (-mouseX/8+295, 210, 30, 10);
fill (219, 167, 188, mouseY/1.5+120); //pink peddle
rect (-mouseX/8+325, 210, 20, 10);
//LINE 7, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/5, 220, 120, 10);
rect (-mouseX/5+150, 220, 30, 10);
rect (-mouseX/5+210, 220, 60, 10);
rect (-mouseX/5+400, 220, 100, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (-mouseX/5+120, 220, 30, 10);
rect (-mouseX/5+180, 220, 30, 10);
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (-mouseX/5+280, 220, 40, 10);
rect (-mouseX/5+350, 220, 50, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (-mouseX/5+270, 220, 10, 10);
rect (-mouseX/5+320, 220, 30, 10);
//LINE 8, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/8, 230, 115, 10);
rect (-mouseX/8+125, 230, 40, 10);
rect (-mouseX/8+175, 230, 20, 10);
rect (-mouseX/8+215, 230, 60, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (-mouseX/8+115, 230, 10, 10);
rect (-mouseX/8+165, 230, 10, 10);
rect (-mouseX/8+195, 230, 20, 10);
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (-mouseX/8+275, 230, 40, 10);
rect (-mouseX/8+335, 230, 30, 10);
rect (-mouseX/8+385, 230, 65, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (-mouseX/8+315, 230, 20, 10);
rect (-mouseX/8+365, 230, 20, 10);
//LINE 9, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/4, 240, 200, 10);
rect (-mouseX/4+220, 240, 20, 10);
rect (-mouseX/4+260, 240, 60, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (-mouseX/4+200, 240, 20, 10);
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (-mouseX/4+320, 240, 60, 10);
rect (-mouseX/4+410, 240, 10, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (-mouseX/4+380, 240, 30, 10);
rect (-mouseX/4+420, 240, 80, 10);
fill (219, 167, 188, mouseY/1.5+120); //pink peddle
rect (-mouseX/4+240, 240, 20, 10);
//LINE 10, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/5-80, 250, 210, 10);
rect (mouseX/5+150, 250, 20, 10);
rect (mouseX/5+190, 250, 60, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (mouseX/5+130, 250, 20, 10);
rect (mouseX/5+170, 250, 20, 10);
fill (93, 113, 96, mouseY/1.5+120); //light bridge
rect (mouseX/5+270, 250, 60, 10);
fill (78, 97, 81, mouseY/1.5+120); //dark bridge
rect (mouseX/5+250, 250, 20, 10);
rect (mouseX/5+330, 250, 70, 10);
//LINE 11, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/5, 260, 90, 10);
rect (-mouseX/5+110, 260, 120, 10);
rect (-mouseX/5+250, 260, 20, 10);
rect (-mouseX/5+290, 260, 40, 10);
rect (-mouseX/5+340, 260, 20, 10);
rect (-mouseX/5+380, 260, 100, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (-mouseX/5+230, 260, 20, 10);
rect (-mouseX/5+270, 260, 20, 10);
rect (-mouseX/5+330, 260, 10, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (-mouseX/5+360, 260, 20, 10);
fill (219, 167, 188, mouseY/1.5+120); //pink peddle
rect (-mouseX/5+90, 260, 20, 10);
//LINE 12, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/5-80, 270, 250, 10);
rect (mouseX/5+190, 270, 20, 10);
rect (mouseX/5+230, 270, 20, 10);
rect (mouseX/5+260, 270, 20, 10);
rect (mouseX/5+300, 270, 100, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (mouseX/5+170, 270, 20, 10);
rect (mouseX/5+210, 270, 20, 10);
rect (mouseX/5+250, 270, 10, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (mouseX/5+280, 270, 20, 10);
//LINE 13, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/5-80, 280, 270, 10);
rect (mouseX/5+210, 280, 20, 10);
rect (mouseX/5+260, 280, 20, 10);
rect (mouseX/5+300, 280, 100, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (mouseX/5+190, 280, 20, 10);
rect (mouseX/5+230, 280, 30, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (mouseX/5+280, 280, 20, 10);
//LINE 14, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/8-50, 290, 275, 10);
rect (mouseX/8+245, 290, 20, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (mouseX/8+225, 290, 20, 10);
rect (mouseX/8+265, 290, 135, 10);
//LINE 15, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/4-100, 300, 150, 10);
rect (mouseX/4+70, 300, 150, 10);
rect (mouseX/4+250, 300, 20, 10);
rect (mouseX/4+290, 300, 110, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (mouseX/4+220, 300, 30, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (mouseX/4+270, 300, 20, 10);
fill (219, 167, 188, mouseY/1.5+120); //pink peddle
rect (mouseX/4+50, 300, 20, 10);
//LINE 16, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/5, 310, 330, 10);
fill (148, 107, 90, mouseY/1.5+120); //light red
rect (-mouseX/5+330, 310, 150, 10);
//LINE 17, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/5, 320, 360, 10);
rect (-mouseX/5+380, 320, 100, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (-mouseX/5+360, 320, 20, 10);
//LINE 18, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/2, 330, 420, 10);
rect (-mouseX/2+440, 330, 160, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (-mouseX/2+420, 330, 20, 10);
//LINE 19, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/4-100, 340, 370, 10);
rect (mouseX/4+290, 340, 110, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (mouseX/4+270, 340, 20, 10);
//LINE 20, follows the mouse horizontally (NEGATIVE)
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (-mouseX/2, 350, 100, 10);
rect (-mouseX/2+120, 350, 210, 10);
rect (-mouseX/2+350, 350, 70, 10);
rect (-mouseX/2+460, 350, 140, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (-mouseX/2+420, 350, 20, 10);
fill (219, 167, 188, mouseY/1.5+120); //pink peddle
rect (-mouseX/2+100, 350, 20, 10);
rect (-mouseX/2+330, 350, 20, 10);
rect (-mouseX/2+440, 350, 20, 10);
//LINE 21, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/2-200, 360, 420, 10);
rect (mouseX/2+240, 360, 160, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (mouseX/2+220, 360, 20, 10);
//LINE 22, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/4-100, 370, 370, 10);
rect (mouseX/4+290, 370, 110, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (mouseX/4+270, 370, 20, 10);
//LINE 23, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/5-80, 380, 140, 10);
rect (mouseX/5+80, 380, 200, 10);
rect (mouseX/5+300, 380, 100, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (mouseX/5+280, 380, 20, 10);
fill (219, 167, 188, mouseY/1.5+120); //pink peddle
rect (mouseX/5+60, 380, 20, 10);
//LINE 24, follows the mouse horizontally
fill (112, 161, 117, mouseY/1.5+120); //sky
rect (mouseX/2-200, 390, 420, 10);
rect (mouseX/2+240, 390, 160, 10);
fill (118, 96, 79, mouseY/1.5+120); //dark red
rect (mouseX/2+220, 390, 20, 10);
//LIGHT around the lantern, sin() used to create vibrate effect
fill (237, 227, 164, -mouseY/5+10); // yellow
ellipse(95, 115, sin(mouseY/13.0)*5+215, sin(mouseY/13.0)*5+215);
fill (239, 150, 111, -mouseY/5+17); // orange
ellipse(95, 115, sin(mouseY/13.0)*5+145, sin(mouseY/13.0)*5+145);
fill (243, 132, 120, -mouseY/5+28); // red
ellipse(95, 115, sin(mouseY/13.0)*5+60, sin(mouseY/13.0)*5+60);
//FIREFLIES, sin() used to create vibrate effect
fill (237, 227, 164, -mouseY*2+220); // yellow
rect (sin(mouseX/20.0)*2+100, sin(mouseY/20.0)*2+100, 10, 10);
rect (sin(mouseX/20.0)*5+120, -sin(mouseY/20.0)*5+128, 10, 10);
rect (-sin(mouseX/20.0)*5+65, -sin(mouseY/20.0)*3+70, 10, 10);
rect (-sin(mouseX/20.0)*3.5+130, sin(mouseY/20.0)*4+40, 10, 10);
rect (sin(mouseX/20.0)*2+25, sin(mouseY/20.0)*1.8+180, 10, 10);
rect (sin(mouseX/20.0)*1.8+190, -sin(mouseY/20.0)*1.5+210, 10, 10);
}
void mousePressed () {
//set frame rate to 10 when mouse click
frameRate (10);
//follows the FIREFLIES
fill (239, 150, 111, -mouseY+65);
ellipse (sin(mouseX/20.0)*2+105, sin(mouseY/20.0)*2+105, 35, 35);
ellipse (sin(mouseX/20.0)*5+125, -sin(mouseY/20.0)*5+133, 35, 35);
ellipse (-sin(mouseX/20.0)*5+70, -sin(mouseY/20.0)*3+75, 35, 35);
ellipse (-sin(mouseX/20.0)*3.5+135, sin(mouseY/20.0)*4+45, 35, 35);
ellipse (sin(mouseX/20.0)*2+30, sin(mouseY/20.0)*1.8+185, 35, 35);
ellipse (sin(mouseX/20.0)*1.8+195, -sin(mouseY/20.0)*1.5+215, 35, 35);
}