//Dogfighter, Sasha Ayagh, Interactive Toy //To engage with the interactivity, press the mouse button to shoot the enemy //This will create a very basic explosion effect over the foe //It is presented in a first person view within a fighter jet cockpit //Player can move around a crosshair with their mouse, press mous to interact //Includes random speed for the plane and a looping cloud //I used PAL's and Daniel Shiffmans videos as a reference to understand some problems //The original intent was to have the plane be temporarily destroyed by placing.. //crosshair over the enemy plan and pressing mouse to have it dissapear //however due to difficultys this idea was scraped for a simpler version of it //variables for objects float circleX; float circletwoX; float wingoneX; float wingtwoX; float exhuastX; float exhuasttwoX; float finX; float fintwoX; float cockpitX; float explosionX; //variables for looping cloud float dynamiccloudsX; //variables for hitbox float hitL, hitR, hitT, hitB; //logic variables for speed //random speed for enemy plane so speed is diffirent every time float xspeed = random(50); //set up and x,y positioning for moving shapes to start at void setup() { size(400, 400); circleX = 0; circletwoX = 32; wingoneX = 48; wingtwoX =-80; exhuastX = 0; exhuasttwoX = 32; finX = 0; fintwoX = 32; cockpitX = 15; dynamiccloudsX = 0; } //basic setup for drawing void draw() { background(0, 253, 255); noCursor(); //functions for objects drawClouds(); drawPlayerHUD(); drawHostileaircraft(); drawCrosshair(); //create "explosion" effect everytime the player fires at the enemy if (mousePressed) { drawExplosionfromshooting(); println("ENGAGING ENEMY"); } //set speed for objects circleX = circleX + xspeed; circletwoX = circletwoX + xspeed; wingoneX = wingoneX + xspeed; wingtwoX = wingtwoX + xspeed; exhuastX = exhuastX + xspeed; exhuasttwoX = exhuasttwoX + xspeed; finX = finX + xspeed; fintwoX = fintwoX + xspeed; cockpitX = cockpitX + xspeed; explosionX = explosionX + xspeed; //loop cloud while(dynamiccloudsX < width) { dynamiccloudsX = dynamiccloudsX + 10; fill(255); noStroke(); ellipse(dynamiccloudsX, height/5, 60, 30); } //getting the enemy plane to go back and forth if (circleX > width) { xspeed = -3; } if (circleX < 0) { xspeed = 10; } } //code for functions void drawClouds() { //draw the static clouds noStroke(); fill(255); ellipse(200, 50, 60, 30); ellipse(50, 200, 60, 30); ellipse(400, 150, 60, 30); ellipse(170, 50, 60, 30); ellipse(0, 50, 60, 30); ellipse(350, 200, 60, 30); } void drawPlayerHUD() { //draw player cockpit/HUD fill(0); stroke(0); rect(0, 375, 1000, 30); rect(132, 250, 5, 800); rect(260, 250, 5, 800); //cockpit HUD fill(155); rect(132, 350, 132, 200); strokeWeight(2.5); fill(0, 1, 0, 0); rect(132, 250, 132, 80); strokeWeight(1.5); stroke(26, 154, 43, 155); fill(34, 255, 0, 155); rect(142, 260, 112, 1); rect(152, 280, 95, 1); rect(162, 300, 75, 1); rect(142, 380, 110, 80); } void drawCrosshair() { //defining hitboxes for crosshair float hitx = mouseX; float hity = mouseY; float hitw = 1; float hith = 15; //crosshair strokeWeight(3); stroke(255, 0, 0); fill(1, 0, 0, 0); //hitbox for crosshair rect(hitx, hity, hitw, hith); rect(hitx, hity-15, hitw, hith); rect(hitx, hity, hitw+14, hith-14); rect(hitx-15, hity, hitw+14, hith-14); ellipse(hitx, hity, hitw+24, hith+10); //positioning for crosshair hitL=hitx-hitw/2; hitR=hitx+hitw/2; hitT=hity-hith/2; hitB=hity+hith/2; } //enemy aircraft function void drawHostileaircraft() { //enemy aircraft //enemy cockpit fill(0, 0, 255); stroke(100); strokeWeight(2.5); ellipse(cockpitX, height/2.1, 32, 32); //fins fill(196, 183, 61); stroke(0); strokeWeight(1); rect(finX, height/2.5, 5, 32); rect(fintwoX, height/2.5, 5, 32); //engines fill(155); stroke(0); ellipse(circleX, height/2, 32, 32); ellipse(circletwoX, height/2, 32, 32); //main body shapes fill(196, 183, 61); stroke(0); rect(wingoneX, height/2, 64, 5); rect(wingtwoX, height/2, 64, 5); //exhuast of jet fill(219, 253, 0); strokeWeight(3); stroke(253, 147, 7); ellipse(exhuastX, height/2, 16, 16); ellipse(exhuasttwoX, height/2, 16, 16); } //explosion void drawExplosionfromshooting() { fill(255, 0, 0); noStroke(); ellipse(explosionX, height/2, 270, 80); } //fin