//castle floats as mouse moves, x&y axis
//clouds move from left to right
//diamonds flash white on click also illuminate on mouse move
//moon adjusts from full to cresent with mouse move
//moon also casts light with mouse move
//water constantly rises and falls
void setup() {
//background size
size(500, 500);
smooth();
frameRate(30);
}
void draw() {
background(40, 0, 0);
noStroke();
//I dont like lines
//light from the moon, dims and brightens with vertical (y) axis
ellipseMode(CENTER);
fill(50, 0, 10, mouseY-30);
ellipse(80, 80,mouseX+500,mouseY+500);
fill(80, 10, 20, mouseY-30);
ellipse(80, 80, mouseX+300,mouseY+300);
fill(110, 20, 30, mouseY-30);
ellipse(80, 80, mouseX+200,mouseY+200);
fill(140, 30, 40, mouseY-30);
ellipse(80, 80, mouseX+100, mouseY+100);
fill(170, 40, 50, mouseY-30);
ellipse(80, 80, mouseX, mouseY);
//layer matching moon covering
//the moon
fill(240, 145, 58);
ellipse(80, 80, 70, 70);
//ellipse covering the moon
fill(170, 40, 50, mouseY-30);
//has to match lighting from the moon
ellipse(90, 70, 60, 60);
ellipseMode(CENTER);
//water below the floating castle, rises up and down
fill(20,0,20,100);
rect(0,(float)(400+Math.sin(frameCount*.03-.8)*6),500,500);
fill(10,0,10,100);
rect(0,(float)(410+Math.sin(frameCount*.03-.8)*6),500,500);
fill(0,0,0,100);
rect(0,(float)(430+Math.sin(frameCount*.03-.8)*6),500,500);
//clouds all move from left to right using X-axis on X-coordinates
//cloud in top right
fill(0, 0, 0, 100);
triangle(230+mouseX/10, 80, 310+mouseX/30, 50, 380+mouseX/30, 80);
ellipse(260+mouseX/10, 70, 30+mouseX/30, 20);
ellipse(280+mouseX/10, 50, 40+mouseX/30, 40);
ellipse(310+mouseX/10, 60, 30+mouseX/30, 30);
//clone of top right cloud to make shadows
fill(0, 0, 0, 200);
triangle(250+mouseX/10, 80, 310+mouseX/30, 50, 380+mouseX/30, 80);
ellipse(280+mouseX/10, 70, 30+mouseX/30, 20);
ellipse(300+mouseX/10, 50, 40+mouseX/30, 40);
ellipse(330+mouseX/10, 60, 30+mouseX/30, 30);
//bottom right cloud
fill(0, 0, 0, 100);
triangle(210+mouseX/10, 300, 350+mouseX/30, 260, 350+mouseX/30, 300);
triangle(280+mouseX/10, 320, 350+mouseX/30, 260, 500+mouseX/30, 300);
ellipse(350+mouseX/10, 260, 70+mouseX/30, 50);
ellipse(305+mouseX/10, 270, 30+mouseX/30, 30);
ellipse(400+mouseX/10, 250, 50+mouseX/30, 50);
ellipse(380+mouseX/10, 270, 60+mouseX/30, 30);
//clone of bottom right cloud to make shadows
fill(0, 0, 0, 200);
triangle(190+mouseX/10, 300, 350+mouseX/30, 260, 350+mouseX/30, 300);
triangle(260+mouseX/10, 320, 350+mouseX/30, 260, 500+mouseX/30, 300);
ellipse(330+mouseX/10, 260, 70+mouseX/30, 50);
ellipse(285+mouseX/10, 270, 30+mouseX/30, 30);
ellipse(380+mouseX/10, 250, 50+mouseX/30, 50);
ellipse(360+mouseX/10, 270, 60+mouseX/30, 30);
//clone of bottom left cloud to make shadows
fill(0, 0, 0, 100);
triangle(-40 +mouseX/15, 380, 40+mouseX/15, 340, 210, 380);
ellipse(20+mouseX/15, 340, 50+mouseX/15, 50);
ellipse(50+mouseX/15, 360, 150+mouseX/15, 40);
ellipse(65+mouseX/15, 330, 60+mouseX/15, 70);
//bottom left cloud
fill(0, 0, 0, 200);
triangle(-20 +mouseX/15, 380, 40+mouseX/15, 340, 210, 380);
ellipse(40+mouseX/15, 340, 50+mouseX/15, 50);
ellipse(70+mouseX/15, 360, 150+mouseX/15, 40);
ellipse(85+mouseX/15, 330, 60+mouseX/15, 70);
//castle gets lines so it is the focus (:
stroke(10);
//floating castle base
//I'm making the castle float damn it the code looks crazy
fill(46, 17, 45, 220);
triangle(110+mouseX/150, 180+mouseY/150, 200+mouseX/150, 180+mouseY/150, 200+mouseX/150, 300+mouseY/150);
triangle(170+mouseX/150, 200+mouseY/150, 210+mouseX/150, 280+mouseY/150, 290+mouseX/150, 200+mouseY/150);
triangle(230+mouseX/150, 240+mouseY/150, 230+mouseX/150, 270+mouseY/150, 260+mouseX/150, 240+mouseY/150);
triangle(110+mouseX/150, 180+mouseY/150, 160+mouseX/150, 260+mouseY/150, 200+mouseX/150, 180+mouseY/150);
triangle(140+mouseX/150, 180+mouseY/150, 280+mouseX/150, 170+mouseY/150, 240+mouseX/150, 220+mouseY/150);
triangle(110+mouseX/150, 210+mouseY/150, 140+mouseX/150, 190+mouseY/150, 140+mouseX/150, 220+mouseY/150);
//towers and upper section of castle
triangle(130+mouseX/150, 140+mouseY/150, 120+mouseX/150, 180+mouseY/150, 150+mouseX/150, 180+mouseY/150);
rect(140+mouseX/150, 120+mouseY/150, 20+mouseX/150, 60+mouseY/150);
rect(170+mouseX/150, 90+mouseY/150, 30+mouseX/150, 90+mouseY/150);
triangle(170+mouseX/150, 140+mouseY/150, 150+mouseX/150, 180+mouseY/150, 170+mouseX/150, 180+mouseY/150);
rect(210+mouseX/150, 110+mouseY/150, 10+mouseX/150, 40+mouseY/150);
rect(230+mouseX/150, 100+mouseY/150, 10+mouseX/150, 60+mouseY/150);
rect(240+mouseX/150, 130+mouseY/150, 10+mouseX/150, 40+mouseY/150);
triangle(180+mouseX/150, 180+mouseY/150, 220+mouseX/150, 140+mouseY/150, 260+mouseX/150, 180+mouseY/150);
//tower tops...listed left to right
triangle(130+mouseX/150, 120+mouseY/150, 150+mouseX/150, 130+mouseY/150, 160+mouseX/150, 120+mouseY/150);
triangle(130+mouseX/150, 120+mouseY/150, 140+mouseX/150, 90+mouseY/150, 160+mouseX/150, 120+mouseY/150);
triangle(160+mouseX/150, 80+mouseY/150, 180+mouseX/150, 100+mouseY/150, 210+mouseX/150, 90+mouseY/150);
triangle(160+mouseX/150, 80+mouseY/150, 180+mouseX/150, 40+mouseY/150, 210+mouseX/150, 90+mouseY/150);
triangle(220+mouseX/150, 90+mouseY/150, 230+mouseX/150, 100+mouseY/150, 250+mouseX/150, 90+mouseY/150);
triangle(220+mouseX/150, 90+mouseY/150, 220+mouseX/150, 70+mouseY/150, 250+mouseX/150, 90+mouseY/150);
//floating diamonds
//actions for floating diamonds, colour change
fill(255, 0, 0, mouseX-5);
quad(120, 240, 125, 235, 130, 240, 125, 245);
quad(75, 195, 80, 190, 85, 195, 80, 200);
quad(85, 200, 95, 190, 100, 200, 90, 210);
quad(110, 140, 115, 135, 120, 140, 115, 145);
quad(195, 10, 200, 5, 205, 10, 200, 15);
quad(200, 40, 210, 20, 220, 40, 210, 60);
quad(220, 60, 230, 50, 240, 60, 230, 70);
quad(260, 120, 270, 110, 280, 120, 270, 130);
quad(280, 130, 290, 120, 300, 130, 290, 150);
quad(280, 100, 285, 95, 290, 100, 285, 105);
quad(290, 155, 295, 150, 300, 155, 295, 160);
quad(310, 130, 315, 125, 320, 130, 315, 135);
//center diamond its special and needs detail
quad(170, 180, 190, 160, 210, 180, 190, 220);
noStroke();
fill(200, 0, 0, mouseX-5);
triangle(190, 160, 210, 180, 190, 180);
triangle(190, 180, 170, 180, 190, 220);
}
void mousePressed() {
frameRate(20);
//needs to be slowed down to better see effect, but too slow causes leg ):
fill(200);
quad(120, 240, 125, 235, 130, 240, 125, 245);
quad(75, 195, 80, 190, 85, 195, 80, 200);
quad(85, 200, 95, 190, 100, 200, 90, 210);
quad(110, 140, 115, 135, 120, 140, 115, 145);
quad(195, 10, 200, 5, 205, 10, 200, 15);
quad(200, 40, 210, 20, 220, 40, 210, 60);
quad(220, 60, 230, 50, 240, 60, 230, 70);
quad(260, 120, 270, 110, 280, 120, 270, 130);
quad(280, 130, 290, 120, 300, 130, 290, 150);
quad(280, 100, 285, 95, 290, 100, 285, 105);
quad(290, 155, 295, 150, 300, 155, 295, 160);
quad(310, 130, 315, 125, 320, 130, 315, 135);
//center diamond its special and needs detail
quad(170, 180, 190, 160, 210, 180, 190, 220);
noStroke();
fill(255);
triangle(190, 160, 210, 180, 190, 180);
triangle(190, 180, 170, 180, 190, 220);
}