/* Star Creator
Interactive drawing by Paul Williams
Move mouse and click to interact.
*/
//Do these actions in start function once when the program starts.
void setup(){
//set size of canvas
size(400,400);
}
//Do these actions in draw function repeatedly until program is exited.
void draw(){
//set frame rate to 60.
frameRate(60);
//colour the background black until mouse is passed point 320 on the X axis, and then colour it a dark red.
background(120*sin(mouseX/320),0,0);
/* Objects that are behind the Earth - background */
//Stars
//Colour the stars white.
stroke(255);
//size of stars dependant on speed the mouse is moving.
strokeWeight(abs(mouseX-pmouseX)+2);
//Create lines that will act as stars using the varying stroke weights and line lengths to create a flickering effect when moved. Move them based on X coordinate of mouse.
line(mouseX*1.7-100, 20,pmouseX*1.7 + (mouseX-pmouseX)*4 - 100,20);
line(mouseX*2 + 50,30, pmouseX*2 +(mouseX-pmouseX)*4 + 50,30);
line(mouseX*2.5 - 240,40, pmouseX*2.5 + (mouseX-pmouseX)*2 -240,40);
line(mouseX*3 + 80,120, pmouseX*3+ (mouseX-pmouseX)*4+ 80, 120);
line(mouseX*2 -200,350, pmouseX*2 + (mouseX-pmouseX)*4 - 200,350);
line(mouseX*3 -400,250, pmouseX*3+ (mouseX-pmouseX)*4- 400,250);
line(mouseX + 200, 300, pmouseX + (mouseX-pmouseX)*2 + 200, 300);
line(mouseX + 250, 75, pmouseX + (mouseX-pmouseX)*2 + 250, 75);
line(mouseX + 300, 375, pmouseX + (mouseX-pmouseX)*2 + 300, 375);
//removing strokes as we no longer need them.
noStroke();
//Moon
//Colour the moon Grey.
fill(150);
//Create circle to act as moon and move it based on X coordinate of mouse.
ellipse(-mouseX*2+400, 200, 100,100);
//darker grey for dark spots on moon
fill(80);
//making dark spots for moon to give the idea of rotation and for something to look at.
ellipse(-mouseX*1.85+390, 180, 30,30);
ellipse(-mouseX*1.85+380, 200, 20,20);
ellipse(-mouseX*1.86+ 360, 220, 10,10);
ellipse(-mouseX*1.86+ 390, 220, 10,10);
//Sun
//Change the colour of the sun from Yellow to White by using a sine wave.
fill(255,255,sin(mouseX*0.04) + 300);
//Create center of sun to move at the correct speed and come on screen at the correct time.
ellipse(-mouseX*3.2+1345, 200, 275,275);
//Yellow colour for sun rays. Change opacity by using a sin wave change by mouse x.
//Multiplying sin by 150 gives the maximum opacity. Making it negative inverts when the wave will be at max.
//Multiplying mouseX by 0.04 slows down the time it takes for a full wave.
fill(255,255,0,-150*sin(mouseX*0.04));
//create the outer areas of the sun at same location as center.
ellipse(-mouseX*3.2+1345, 200, 300,300);
//overlaping opacities makes the smaller circle more bright but not as solid as center.
ellipse(-mouseX*3.2+1345, 200, 325,325);
/*Earth - Middle Ground*/
//colour it blue.
fill(0,50,150);
//draw it in center of screen.
ellipse(200,200,200,200);
//colour green for land
fill(0,150,0);
//creating a simple north america.
ellipse(175,125,60,40);
triangle(150,135,210,180,180,125);
//creating a simple south america.
triangle(200,270,258,210,220,180);
ellipse(230,200,60,50);
//white colour for clouds
fill(255,180);
//creating multiple clouds that move with mouseX
ellipse(mouseX/10 +200,150, 90,10);
ellipse(mouseX/20 +150,200,100,15);
ellipse(mouseX/10 +175, 275, 80,8);
ellipse(mouseX/15 + 220, 245, 80,20);
ellipse(mouseX/25 +190, 110, 70, 10);
/* objects infront of Earth - Foreground*/
//sun
//fill yellow.
fill(255,255,0);
// center of sun
ellipse(mouseX*3-150,200,300,300);
//yellow with lower opacity
fill(255,255,0,150);
//outer areas of sun
ellipse(mouseX*3-150,200,350,350);
ellipse(mouseX*3-150,200,400,400);
//moon
//change colour of moon to black using sine wave.
fill(-150*sin(mouseX*0.04) + 50);
//create moon
ellipse(mouseX*3.5-1050, 200, 150, 150);
}
//Do actions in the mousepressed function once when left mouse button is clicked.
void mousePressed() {
//Set frame rate to 10
frameRate(10);
//Set fill to a pseudorandom colour with values > 100.
fill(255*sin(mouseX)+100,255*sin(mouseY)+100,255*sin(2*mouseX)+100);
//Create a diamond shape at a pseudorandom location using sine waves.
quad(200*sin(mouseX*100)+190, 200*sin(mouseY*100)+200,200*sin(mouseX*100)+200, 200*sin(mouseY*100)+210,200*sin(mouseX*100)+210, 200*sin(mouseY*100)+200,200*sin(mouseX*100)+200, 200*sin(mouseY*100)+190);
//Set fill to same colour as quad shape but with an opacity of 100.
fill(255*sin(mouseX)+100,255*sin(mouseY)+100,255*sin(2*mouseX)+100, 100);
//Create a circle large circle at the same location as the quad shape.
ellipse(200*sin(mouseX*100)+200,200*sin(mouseY*100)+200, 150,150);
//Increase stroke size to 20.
strokeWeight(20);
//set colour to same as quad shape. Set opacity to 0 when mouse X is < 320 and to max when >= 320.
stroke(255*sin(mouseX)+100,255*sin(mouseY)+100,255*sin(2*mouseX)+100,255*sin(mouseX/320));
//draw a line that originates from the center of the moon (or pupil). set the end of the line to the same location as the quad shape.
line(mouseX*3.5-1050,200,200*sin(mouseX*100)+200,200*sin(mouseY*100)+200);
}