/*
Title: Final Mission
By: Zhe Yue
Vertical mouse movement controls the UFO's movement vertically while the UFO's antenna stays in place, horizontal mouse
movement controls the spaceship's movement horizontally . Stars in the background brightens and dims when the mouse moves
around. When the mouse is pressed, the UFO's antenna glows and shoots a beam at the mouse. Text appears when the drawing is
launched and when the mouse is pressed.
*/
void setup() {
size(400, 400); //set screen size
smooth(); //enable anti-aliasing
rectMode(CORNERS);
ellipseMode(CORNERS); //set rect and ellipse modes
frameRate(30); //set framerate
println ("Final Mission"); //prints text when drawing launches
}
void draw() {
//background color
background(0, 8, 24); //dark blue
//dim stars (round)
noStroke(); //disable lines
fill(220-mouseY/2, 220-mouseY/2, 200-mouseY/2); //vertical mouse movement changes brightness
ellipse(50, 160, 60, 170);
ellipse(105, 190, 110, 195);
ellipse(20, 340, 25, 345);
ellipse(50, 320, 60, 330);
ellipse(135, 380, 140, 385);
ellipse(285, 250, 290, 255);
ellipse(300, 110, 305, 115);
ellipse(320, 220, 330, 230);
ellipse(340, 360, 345, 365);
ellipse(350, 370, 360, 380);
//bright stars (pointed)
fill(220-mouseX/3, 220-mouseX/3, 200-mouseX/3); //horizontal mouse movement changes brightness, doesn't become as dim as round stars
triangle(70, 120, 67, 140, 73, 140);
triangle(70, 160, 67, 140, 73, 140);
triangle(50, 140, 70, 137, 70, 143);
triangle(90, 140, 70, 137, 70, 143);
triangle(130, 240, 128, 250, 132, 250);
triangle(130, 260, 128, 250, 132, 250);
triangle(120, 250, 130, 248, 130, 252);
triangle(140, 250, 130, 248, 130, 252);
triangle(360, 150, 357, 170, 363, 170);
triangle(360, 190, 357, 170, 363, 170);
triangle(340, 170, 360, 167, 360, 173);
triangle(380, 170, 360, 167, 360, 173);
triangle(380, 130, 378, 140, 382, 140);
triangle(380, 150, 378, 140, 382, 140);
triangle(370, 140, 380, 138, 380, 142);
triangle(390, 140, 380, 138, 380, 142);
triangle(310, 300, 308, 310, 312, 310);
triangle(310, 320, 308, 310, 312, 310);
triangle(300, 310, 310, 308, 310, 312);
triangle(320, 310, 310, 308, 310, 312);
//UFO (top and bottom moves up when mouse moves down)
//antenna (stationary)
fill(130, 130, 115); //grey
triangle(180, 60, 220, 60, 200, 165);
ellipse(185, 135, 215, 165);
//UFO top
rect(80, 0-mouseY/15, 320, 90-mouseY/15);
rect(0, 0-mouseY/15, 80, 60-mouseY/15);
rect(320, 0-mouseY/15, 400, 60-mouseY/15);
triangle(0, 60-mouseY/15, 80, 60-mouseY/15, 80, 90-mouseY/15);
triangle(320, 60-mouseY/15, 400, 60-mouseY/15, 320, 90-mouseY/15);
stroke(50, 50, 40); //enable lines, dark grey
strokeWeight(2); //thicker lines
line(0, 20-mouseY/15, 100, 80-mouseY/15);
line(110, 0-mouseY/15, 145, 80-mouseY/15);
line(200, 0-mouseY/15, 200, 80-mouseY/15);
line(290, 0-mouseY/15, 255, 80-mouseY/15);
line(400, 20-mouseY/15, 300, 80-mouseY/15);
noStroke(); //disable lines
fill(100, 100, 90); //slightly darker grey
ellipse(80, 70-mouseY/15, 320, 105-mouseY/15);
//UFO bottom
fill(80, 80, 66); //dark grey
ellipse(130, 80-mouseY/15, 270, 100-mouseY/15);
triangle(130, 90-mouseY/15, 150, 90-mouseY/15, 150, 120-mouseY/15);
triangle(270, 90-mouseY/15, 250, 90-mouseY/15, 250, 120-mouseY/15);
rect(150, 90-mouseY/15, 250, 120-mouseY/15);
//ship (moves horizontally with mouse)
fill(250, 75, 0); //orange
triangle(mouseX, 380, mouseX-10, 365, mouseX+10, 365); //exhaust flame
fill(80, 80, 66); //grey
triangle(mouseX, 350, mouseX-15, 370, mouseX+15, 370); //exhaust
fill(160, 20, 0); //red
triangle(mouseX-15, 330, mouseX-15, 360, mouseX-35, 360); //left fin
triangle(mouseX+15, 330, mouseX+15, 360, mouseX+35, 360); //right fin
fill(200, 195, 190); //white
triangle(mouseX-15, 320, mouseX-15, 360, mouseX-25, 320); //ship bottom left
triangle(mouseX+15, 320, mouseX+15, 360, mouseX+25, 320); //ship bottom right
rect(mouseX-15, 320, mouseX+15, 360); //ship bottom middle
ellipse(mouseX-27, 270, mouseX+27, 345); //ship middle
triangle(mouseX-26, 295, mouseX+26, 295, mouseX, 250); //ship top
fill(160, 20, 0); //red
triangle(mouseX-18, 280, mouseX+18, 280, mouseX, 250); //ship cap
fill(80, 80, 66); //grey
ellipse(mouseX-15, 285, mouseX+15, 315); //window frame
fill(145, 155, 155); //light blue
ellipse(mouseX-12, 289, mouseX+12, 311); //window
fill(160, 20, 0); //red
rect(mouseX-2, 330, mouseX+2, 360); //middle fin
}
void mousePressed() {
//when mouse is pressed, antenna glows and shoots a triangular beam at mouse
//antenna glow
fill(125, 175, 220); //blue
ellipse(170, 120, 230, 180); //glow
//beam
fill(165, 230, 250); //lighter blue
triangle(185, 150, 215, 150, mouseX, mouseY); //beam
//redraw antenna
fill(130, 130, 115); //grey
triangle(180, 60, 220, 60, 200, 165);
ellipse(185, 135, 215, 165);
//redraw UFO
//UFO top
rect(80, 0-mouseY/15, 320, 90-mouseY/15);
rect(0, 0-mouseY/15, 80, 60-mouseY/15);
rect(320, 0-mouseY/15, 400, 60-mouseY/15);
triangle(0, 60-mouseY/15, 80, 60-mouseY/15, 80, 90-mouseY/15);
triangle(320, 60-mouseY/15, 400, 60-mouseY/15, 320, 90-mouseY/15);
stroke(50, 50, 40); //enable lines, dark grey
strokeWeight(2); //thicker lines
line(0, 20-mouseY/15, 100, 80-mouseY/15);
line(110, 0-mouseY/15, 145, 80-mouseY/15);
line(200, 0-mouseY/15, 200, 80-mouseY/15);
line(290, 0-mouseY/15, 255, 80-mouseY/15);
line(400, 20-mouseY/15, 300, 80-mouseY/15);
noStroke(); //disable lines
fill(100, 100, 90); //slightly darker grey
ellipse(80, 70-mouseY/15, 320, 105-mouseY/15);
//UFO bottom
fill(80, 80, 66); //dark grey
ellipse(130, 80-mouseY/15, 270, 100-mouseY/15);
triangle(130, 90-mouseY/15, 150, 90-mouseY/15, 150, 120-mouseY/15);
triangle(270, 90-mouseY/15, 250, 90-mouseY/15, 250, 120-mouseY/15);
rect(150, 90-mouseY/15, 250, 120-mouseY/15);
println("Zap!"); //prints text when mouse is pressed
}