/* INTERACTIVE ART DESIGN: LIGHTHOUSE Author: Heather Cleveland Date Last Edited: */ void setup() { //background size size(400, 400); } //mouse press to change colour of clouds void mousePressed(){ fill( 255, 255, 255); ellipse( 40, 112, 40, 20); ellipse( 50, 82, 60, 20); ellipse( 80, 122, 15, 10); ellipse( 100, 92, 40, 20); ellipse( 120, 42, 120, 60); ellipse( 120, 122, 10, 5); ellipse( 140, 132, 20, 10); ellipse( 170, 122, 30, 15); ellipse( 180, 92, 80, 20); ellipse( 200, 62, 60, 20); ellipse( 220, 22, 80, 40); ellipse( 230, 112, 60, 20); ellipse( 240, 82, 60, 20); ellipse( 300, 42, 80, 40); ellipse( 360, 102, 60, 20); ellipse( 380, 42, 120, 60); ellipse( 40, 22, 160, 60); ellipse( 90, 2, 160, 60); } void draw() { /* MOVEMENT CONTROL each drawing cordinate includes +mouseX and +mouseY divided by a number, this will make the drawing move with the user's mouse, and the higher the number divided, the slower the movement, allowing for a parallax effect to occur */ //background colour slate grey background(25); //ellispes to center mode, rect to corners rectMode(CORNERS); ellipseMode(CENTER); noStroke(); //LIGHT PART OF CLOUDS // light colour fill(60); ellipse( 40, 112, 40, 20); ellipse( 50, 82, 60, 20); ellipse( 80, 122, 15, 10); ellipse( 100, 92, 40, 20); ellipse( 120, 42, 120, 60); ellipse( 120, 122, 10, 5); ellipse(140, 132, 20, 10); ellipse( 170, 122, 30, 15); ellipse( 180, 92, 80, 20); ellipse( 200, 62, 60, 20); ellipse( 220, 22, 80, 40); ellipse( 230, 112, 60, 20); ellipse( 240, 82, 60, 20); ellipse( 300, 42, 80, 40); ellipse( 360, 102, 60, 20); ellipse( 380, 42, 120, 60); //DARK PART OF CLOUDS //just brighter than background fill(30); //clouds back to front, left to right ellipse( 40, 110, 40, 20); ellipse( 50, 80, 60, 20); ellipse( 80, 120, 15, 10); ellipse( 100, 90, 40, 20); ellipse( 120, 40, 120, 60); //for special overlapping in clouds fill(60); ellipse( 40, 22, 160, 60); fill(30); ellipse( 40, 20, 160, 60); ellipse( 120, 120, 10, 5); ellipse(140, 130, 20, 10); ellipse( 170, 120, 30, 15); ellipse( 180, 90, 80, 20); ellipse( 200, 60, 60, 20); ellipse( 220, 20, 80, 40); ellipse( 230, 110, 60, 20); ellipse( 240, 80, 60, 20); ellipse( 300, 40, 80, 40); ellipse( 360, 100, 60, 20); ellipse( 380, 40, 120, 60); //special overlapping in clouds fill(60); ellipse( 90, 2, 160, 60); fill(30); ellipse( 90, 0, 160, 60); //WATER //water base colour fill(28, 42, 55); //water base rect(-40+mouseX/150, 160+mouseY/150, 430+mouseX/150, 430+mouseY/150); //water details, alternating +/-mouseX for dynamic look //colour for -mouseX alpha fill( 57, 88, 109, 200-mouseX); //waves for -mouseX alpha rect( -20+mouseX/20, 280+mouseY/80, 50+mouseX/20, 290+mouseY/80); rect( 20+mouseX/20, 240+mouseY/80, 40+mouseX/20, 245+mouseY/80); rect( -60+mouseX/20, 200+mouseY/80, 20+mouseX/20, 205+mouseY/80); rect( 65+mouseX/20, 175+mouseY/80, 115+mouseX/20, 180+mouseY/80); rect( 220+mouseX/20, 175+mouseY/80, 265+mouseX/20, 180+mouseY/80); rect( 100+mouseX/20, 235+mouseY/80, 140+mouseX/20, 240+mouseY/80); rect( 330+mouseX/20, 165+mouseY/80, 360+mouseX/20, 170+mouseY/80); rect( 340+mouseX/20, 205+mouseY/80, 380+mouseX/20, 210+mouseY/80); //colour for +mouseX fill( 41, 84, 84, -150+mouseX); //waves for +mouseX alpha rect( 20+mouseX/20, 260+mouseY/80, 80+mouseX/20, 270+mouseY/80); rect( 40+mouseX/20, 220+mouseY/80, 70+mouseX/20, 225+mouseY/80); rect( 25+mouseX/20, 185+mouseY/80, 55+mouseX/20, 190+mouseY/80); rect( 180+mouseX/20, 170+mouseY/80, 205+mouseX/20, 175+mouseY/80); rect( 210+mouseX/20, 215+mouseY/80,260+mouseX/20, 220+mouseY/80); rect( 340+mouseX/20, 175+mouseY/80, 395+mouseX/20, 180+mouseY/80); //BACKGROUND ROCK FORMATION //from left to right, bottom up //darken colour fill( 12, 5, 22); //rocks ellipse(170-mouseX/100, 260-mouseY/100, 100, 40); ellipse( 170-mouseX/100, 230-mouseY/100, 80, 20); ellipse( 160-mouseX/100, 190-mouseY/100, 20, 40); ellipse( 220-mouseX/100, 220-mouseY/100, 40, 20); ellipse( 240-mouseX/100, 220-mouseY/100, 20, 20); ellipse( 250-mouseX/100, 210-mouseY/100, 40, 10); ellipse( 360-mouseX/100, 220-mouseY/100, 80, 20); ellipse( 390-mouseX/100, 240-mouseY/100, 60, 20); ellipse( 140-mouseX/100, 280-mouseY/100, 80, 60); //rectangles in back to block water rect( 170-mouseX/100, 230-mouseY/100, 420-mouseX/100, 350-mouseY/100); rect( 210-mouseX/100, 220-mouseY/100, 410-mouseX/100, 240-mouseY/100); //rectangle to mask rock fill(28, 42, 55); rect( 120-mouseX/100, 190-mouseY/100, 170-mouseX/100, 210-mouseY/100); //LIGHT HOUSE //Glowing light behind fill( 255, 250, 196, 20); ellipse( 310+mouseX/40, 100+mouseY/40, 120, 120); //light house white fill( 166, 166, 166); // light house base triangle( 240+mouseX/40, 320+mouseY/40, 370+mouseX/40, 320+mouseY/40, 310+mouseX/40, 30+mouseY/40); //red circle fill( 82, 28, 22); ellipse( 310+mouseX/40, 80+mouseY/40, 55, 55); //back of light house fill(158, 141, 111); rect(280+mouseX/40, 120+mouseY/40, 340+mouseX/40, 80+mouseY/40); //light yellow fill(219, 196, 18); ellipse( 310+mouseX/40, 115+mouseY/40, 25, 25); //light house white fill( 166, 166, 166); //base triangle( 310+mouseX/40, 150+mouseY/40, 280+mouseX/40, 120+mouseY/40, 340+mouseX/40, 120+mouseY/40); //red fill( 82, 28, 22); //lower beam rect( 275+mouseX/40, 120+mouseY/40, 345+mouseX/40, 115+mouseY/40); //left beam rect( 280+mouseX/40, 115+mouseY/40, 283+mouseX/40, 80+mouseY/40); //middle beam rect( 308+mouseX/40, 115+mouseY/40, 311+mouseX/40, 80+mouseY/40); //right beam rect( 337+mouseX/40, 115+mouseY/40, 340+mouseX/40, 80+mouseY/40); // top beam rect( 275+mouseX/40, 80+mouseY/40, 345+mouseX/40, 75+mouseY/40); //stripe down side rect( 308+mouseX/40, 290+mouseY/40, 311+mouseX/40, 140+mouseY/40); //windows fill( 25); rect( 325+mouseX/40, 200+mouseY/40, 330+mouseX/40, 180+mouseY/40); rect( 325+mouseX/40, 280+mouseY/40, 330+mouseX/40, 260+mouseY/40); rect( 285+mouseX/40, 240+mouseY/40, 290+mouseX/40, 220+mouseY/40); //LIGHT //lighthosue lightwill follow the mouse fill( 255, 250, 196, 20); ellipse( mouseX, mouseY, 160, 160); //SEAGULLS //drawn with lines //stroke and strokeWeight to make seagulls more visible stroke(0); strokeWeight(2); //seagull 1 line(210-mouseX/60, 100-mouseY/60, 210-mouseX/60, 90-mouseY/60); line(210-mouseX/60, 90-mouseY/60, 220-mouseX/60, 100-mouseY/60); line( 220-mouseX/60, 100-mouseY/60, 220-mouseX/60, 90-mouseY/60); line( 220-mouseX/60, 90-mouseY/60, 230-mouseX/60, 100-mouseY/60); //seagull 2 line( 220-mouseX/60, 70-mouseY/60, 230-mouseX/60, 80-mouseY/60); line( 230-mouseX/60, 80-mouseY/60, 230-mouseX/60, 70-mouseY/60); line(230-mouseX/60, 70-mouseY/60, 240-mouseX/60, 70-mouseY/60); line( 240-mouseX/60, 70-mouseY/60, 240-mouseX/60, 60-mouseY/60); //seagull 3 line( 240-mouseX/60, 100-mouseY/60, 240-mouseX/60, 90-mouseY/60); line(240-mouseX/60, 90-mouseY/60, 250-mouseX/60, 90-mouseY/60); line( 250-mouseX/60, 90-mouseY/60, 250-mouseX/60, 80-mouseY/60); line( 250-mouseX/60, 80-mouseY/60, 260-mouseX/60, 80-mouseY/60); //end stroke noStroke(); // FRONT ROCKS //dark rocks fill( 30, 27, 34); //triangles moving from left to right rect(-40+mouseX/15, 320+mouseY/15, 420+mouseX/15, 420+mouseY/15); triangle(20+mouseX/15, 320+mouseY/15, 20+mouseX/15, 300+mouseY/15, 40+mouseX/15, 300+mouseY/15); triangle( 40+mouseX/15, 300+mouseY/15, 40+mouseX/15, 280+mouseY/15, 80+mouseX/15, 260+mouseY/15); triangle( 20+mouseX/15, 320+mouseY/15, 80+mouseX/15, 320+mouseY/15, 80+mouseX/15, 260+mouseY/15); triangle( 80+mouseX/15, 200+mouseY/15, 80+mouseX/15, 320+mouseY/15, 190+mouseX/15, 320+mouseY/15); triangle(100+mouseX/15, 260+mouseY/15, 190+mouseX/15, 260+mouseY/15, 190+mouseX/15, 320+mouseY/15); triangle(160+mouseX/15, 320+mouseY/15, 250+mouseX/15, 320+mouseY/15, 230+mouseX/15, 250+mouseY/15); triangle( 180+mouseX/15, 320+mouseY/15, 280+mouseX/15, 320+mouseY/15, 280+mouseX/15, 260+mouseY/15); triangle(250+mouseX/15, 320+mouseY/15, 320+mouseX/15, 320+mouseY/15, 300+mouseX/15, 290+mouseY/15); triangle( 280+mouseX/15, 320+mouseY/15, 360+mouseX/15, 320+mouseY/15, 330+mouseX/15, 290+mouseY/15); triangle( 280+mouseX/15, 320+mouseY/15, 340+mouseX/15, 300+mouseY/15, 400+mouseX/15, 320+mouseY/15); //front rock details //highlight colour fill( 50, 43, 58); //details triangle( 80+mouseX/15, 200+mouseY/15, 100+mouseX/15, 270+mouseY/15, 170+mouseX/15, 300+mouseY/15); triangle( 170+mouseX/15, 290+mouseY/15, 190+mouseX/15, 260+mouseY/15, 190+mouseX/15, 300+mouseY/15); triangle( 220+mouseX/15, 280+mouseY/15, 230+mouseX/15, 250+mouseY/15, 240+mouseX/15, 290+mouseY/15); triangle( 260+mouseX/15, 290+mouseY/15, 280+mouseX/15, 260+mouseY/15, 280+mouseX/15, 300+mouseY/15); triangle( 360+mouseX/15, 310+mouseY/15, 380+mouseX/15, 340+mouseY/15, 400+mouseX/15, 320+mouseY/15); }