//Wesley Cox
//Star Destroyer
//Credit goes to Khan-ali Ibrahim's paralax interactive drawing for essentially the whole concept and a large mass of code used on mainly the walls and ship
void setup()
{
//creates window size
size(400, 400);
//removes cursor
noCursor();
}
//Declaring all necessary variables
int counter;
float tunnelX = 150;
float tunnelY = 150;
float tunnelLength = 100;
float tunnelWidth = 100;
float laserX;
float laserY;
float laserWidth;
float laserHeight;
float position;
float randomStarX = 200;
float randomStarY = 200;
float starWidth = 0;
float starHeight = 0;
float RNG = 0;
boolean laser = false;
boolean star = false;
void draw()
{
frameRate(120);
background(0);
if (star == false)
{
starStasis();
}
if (star == true)
{
starAttack();
}
if (laser == true)
{
laserShoot();
}
//Creating the graphics for the background and ship
if (mouseX<width/2) {
fill(random(200), 0, 0, 100*sin(frameCount*0.05));
}
if (mouseX>width/2) {
fill(0, random(200), 0, 100*sin(frameCount*0.05));
}
if (mouseY<width/2) {
fill(0, 0, random(200), 100*sin(frameCount*0.05));
}
///Walls and Tunnel
stroke(100, 100, 255);
quad(0, 0, 0, 400, 100 - (mouseX - width/2) * 3, 300 - (mouseY - width/2) * 3, 100 - (mouseX - width/2) * 3, 100 - (mouseY - width/2) * 3); //Left Wall
quad(0, 400, 400, 400, 300 - (mouseX - width/2) * 3, 300 - (mouseY - width/2) * 3, 100 - (mouseX - width/2) * 3, 300 - (mouseY - width/2) * 3); //Lower Wall
quad(400, 400, 400, 0, 300 - (mouseX - width/2) * 3, 100 - (mouseY - width/2) * 3, 300 - (mouseX - width/2) * 3, 300 - (mouseY - width/2) * 3); //Right Wall
quad(400, 0, 0, 0, 100 - (mouseX - width/2) * 3, 100 - (mouseY - width/2) * 3, 300 - (mouseX - width/2) * 3, 100 - (mouseY - width/2) * 3); //Upper Wall;
quad(100-(mouseX-width/2)*3, 100-(mouseY-width/2)*3, 100-(mouseX-width/2)*3, 300-(mouseY-width/2)*3, 300-(mouseX-width/2)*3, 300-(mouseY-width/2)*3, 300-(mouseX-width/2)*3, 100-(mouseY-width/2)*3); //Center Tunnel
//Body of the ship
quad(180 + (mouseX - width/2) * 2.5, 180 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2.5, 180 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2, 180 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2);
quad(180 + (mouseX - width/2) * 2.5, 220 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2.5, 220 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2, 180 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2);
line(180 + (mouseX - width/2) * 2.5, 180 + (mouseY - width/2) * 2.5, 180 + (mouseX - width/2) * 2.5, 220 + (mouseY - width/2) * 2.5);
line(220 + (mouseX - width/2) * 2.5, 180 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2.5, 220 + (mouseY - width/2) * 2.5);
//Wings of the ship
triangle(180 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2, 180 + (mouseX - width/2) * 2.5, 200 + (mouseY - width/2) * 2.5, 120 + (mouseX - width/2) * 2.5, 200 + (mouseY - width/2) * 2.5);
triangle(220 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2, 220 + (mouseX - width/2) * 2.5, 200 + (mouseY - width/2) * 2.5, 280 + (mouseX - width/2) * 2.5, 200 + (mouseY - width/2) * 2.5);
//Outline of the ship
strokeWeight(2);
noFill();
quad(180 + (mouseX - width/2) * 2.5, 180 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2.5, 180 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2, 180 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2);
quad(180 + (mouseX - width/2) * 2.5, 220 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2.5, 220 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2, 180 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2);
line(180 + (mouseX - width/2) * 2.5, 180 + (mouseY - width/2) * 2.5, 180 + (mouseX - width/2) * 2.5, 220 + (mouseY - width/2) * 2.5);
line(220 + (mouseX - width/2) * 2.5, 180 + (mouseY - width/2) * 2.5, 220 + (mouseX - width/2) * 2.5, 220 + (mouseY - width/2) * 2.5);
triangle(180 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2, 180 + (mouseX - width/2) * 2.5, 200 + (mouseY - width/2) * 2.5, 120 + (mouseX - width/2) * 2.5, 200 + (mouseY - width/2) * 2.5);
triangle(220 + (mouseX - width/2) * 2, 200 + (mouseY - width/2) * 2, 220 + (mouseX - width/2) * 2.5, 200 + (mouseY - width/2) * 2.5, 280 + (mouseX - width/2) * 2.5, 200 + (mouseY - width/2) * 2.5);
}
//Functions
// Calling functions to enable mouse pressing
void mousePressed()
{
if (mousePressed)
{
laserX = mouseX;
laserY = mouseY;
laserWidth = 20;
laserHeight = 20;
laser = true;
}
}
//Creates the stars and their movement
void starAttack()
{
stroke(255, 100, 0);
fill(255, 255, 100);
rect(randomStarX, randomStarY, starWidth, starHeight);
starWidth = starWidth+0.2;
starHeight = starHeight+0.2;
strokeWeight(2);
if (randomStarY >= 350)
{
newStar();
}
}
//Sets a respawn function for the stars
void newStar ()
{
star = false;
randomStarX = 100;
randomStarY = 100;
starWidth = 0;
starHeight = 0;
counter = 0;
}
//Determines initial spawn for stars while also adding a delay before stars begin to spawn
void starStasis()
{
if (randomStarX >= 0)
{
RNG = random(50, 351);
counter = millis();
}
if (randomStarY >= 0)
{
RNG = random(50, 351);
counter = millis();
}
if (counter >= 2000)
{
randomStarX = RNG;
star = true;
}
}
//Creates a laser for the player to shoot at the incoming stars
void laserShoot ()
{
if (laserWidth<=0)
{
laser=false;
}
if ((int)laserY <= (int)randomStarY || (int)laserX <= (int)randomStarX)
{
if (laserX <= (randomStarX+(starWidth/2)) && laserX >= (randomStarX-(starWidth/2)) && laserY <=(randomStarY+(starHeight/2)) && laserY >= (randomStarY-(starHeight/2)))
{
newStar();
laser = false;
}
}
strokeWeight(6);
stroke(255);
fill(0, 255, 0);
rect(laserX, laserY-2, laserWidth-0.5, laserHeight-0.5);
laserY=laserY-2;
laserWidth=laserWidth-0.4;
laserHeight=laserHeight-0.4;
strokeWeight(2);
}