From a6771d510af83c440ddbd4e49755d8f0d80f9250 Mon Sep 17 00:00:00 2001
From: Oscar Wiberg <oscarwiberg@Oscars-MacBook-Air-4.local>
Date: Sat, 25 Jan 2025 18:16:36 +0100
Subject: [PATCH] =?UTF-8?q?b=C3=A5da=20enemy=20samspelar=20nu?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/states/Antagonist.java  |  4 +-
 src/states/Bomb.java        |  8 +++-
 src/states/Enemy.java       |  6 ++-
 src/states/FlyingEnemy.java | 35 +++++++--------
 src/states/PlayState.java   | 89 ++++++++++++++++++++++---------------
 src/states/Player.java      |  6 +++
 6 files changed, 88 insertions(+), 60 deletions(-)

diff --git a/src/states/Antagonist.java b/src/states/Antagonist.java
index f93d6a7..22bb85f 100644
--- a/src/states/Antagonist.java
+++ b/src/states/Antagonist.java
@@ -49,7 +49,9 @@ public abstract class Antagonist {
 		return x;
 	}
 
-	public abstract double getY();
+	public double getY() {
+		return y;
+	}
 
 	
 	public Image getImage() {
diff --git a/src/states/Bomb.java b/src/states/Bomb.java
index ff06394..29ba82f 100644
--- a/src/states/Bomb.java
+++ b/src/states/Bomb.java
@@ -3,7 +3,10 @@ package states;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 
+import constants.Constants;
+import javafx.geometry.Bounds;
 import javafx.scene.image.Image;
+import javafx.scene.shape.Rectangle;
 
 public class Bomb {
 
@@ -27,7 +30,10 @@ public class Bomb {
 		
 	}
 	
-	
+	public Bounds getBoundingBox() {
+	    return new Rectangle( startX, posY, Constants.bombWidth, Constants.bombHeight).getBoundsInParent();
+	}
+
 	
 	
 	public double getX() {
diff --git a/src/states/Enemy.java b/src/states/Enemy.java
index 2a196bf..0d74bec 100644
--- a/src/states/Enemy.java
+++ b/src/states/Enemy.java
@@ -5,8 +5,10 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 
 import constants.Constants;
+import javafx.geometry.Bounds;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
+import javafx.scene.shape.Rectangle;
 
 public class Enemy extends Antagonist{
 
@@ -45,7 +47,9 @@ public class Enemy extends Antagonist{
 	
 	}  
 
-
+	public Bounds getBoundingBox() {
+	    return new Rectangle(x, y, Constants.enemyWidth, Constants.enemyHeight).getBoundsInParent();
+	}
 	
 
 	@Override
diff --git a/src/states/FlyingEnemy.java b/src/states/FlyingEnemy.java
index b8b12a7..72c21d4 100644
--- a/src/states/FlyingEnemy.java
+++ b/src/states/FlyingEnemy.java
@@ -35,23 +35,23 @@ public class FlyingEnemy extends Antagonist{
 
 
 	public Bomb dropBomb() {
-		
+
 		if (!bombDropped && this.getX() >= bombDropX - 50 && this.getX() <= bombDropX + 50) {
-            Bomb bomb = new Bomb(bombDropX, Constants.bombImg);  // Drop the bomb at bombDropX
-            System.out.println("Bomb dropped at: " + bombDropX);
-            bombDropped = true;  // Mark that the bomb has been dropped
-
-            // Optionally, reset bombDropX to a new random location after dropping the bomb
-            bombDropX = dropNextBombX();
-            return bomb;
-        }
-        
-        return null;
+			Bomb bomb = new Bomb(bombDropX, Constants.bombImg);  // Drop the bomb at bombDropX
+			System.out.println("Bomb dropped at: " + bombDropX);
+			bombDropped = true;  // Mark that the bomb has been dropped
+
+			// Optionally, reset bombDropX to a new random location after dropping the bomb
+			bombDropX = dropNextBombX();
+			return bomb;
+		}
+
+		return null;
+	}
+
+	public void resetBombDrop() {
+		bombDropped = false;
 	}
-	
-	 public void resetBombDrop() {
-	        bombDropped = false;
-	    }
 
 	@Override
 	public boolean playerAntagonistCollision(Player player) {
@@ -60,11 +60,6 @@ public class FlyingEnemy extends Antagonist{
 	}
 
 
-	@Override
-	public double getY() {
-		// TODO Auto-generated method stub
-		return 0;
-	}
 
 
 
diff --git a/src/states/PlayState.java b/src/states/PlayState.java
index 6c2049c..1f2e059 100644
--- a/src/states/PlayState.java
+++ b/src/states/PlayState.java
@@ -61,6 +61,7 @@ public class PlayState extends GameState {
 	private String slidingPlayer;
 	private int movingSpeed = 10;
 	private Bomb bomb;
+	private boolean isFlyingEnemyActive = false;
 
 
 
@@ -95,7 +96,7 @@ public class PlayState extends GameState {
 		slidingPlayer = Constants.slidingPlayerImg;
 		enemy = new Enemy(Constants.enemyImg, 800.00, 270.00);
 		extraLife = new ExtraLifePowerUp(Constants.lifeImg);
-		flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 100.00);
+		flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00);
 		//		flyingEnemy.setAntagonistX(800.00);
 		//		tempy = flyingEnemy.getY();
 		bgColor = Color.ROYALBLUE;
@@ -108,7 +109,7 @@ public class PlayState extends GameState {
 		slidingPlayer = Constants.slidingPlayerImg2;
 		enemy = new Enemy(Constants.enemyImg, 800.00, 250.00);
 		extraLife = new ExtraLifePowerUp(Constants.lifeImg);
-		flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 100.00);
+		flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00);
 		//		flyingEnemy.setAntagonistX(800.00);
 		//		tempy = flyingEnemy.getY();
 		bgColor = Color.BEIGE;
@@ -150,10 +151,10 @@ public class PlayState extends GameState {
 
 
 		//		Detta block används för att rita ut rectanglarna runt spelare och enemy
-		g.setStroke(Color.BLACK); // Set the rectangle's border color
-		g.setLineWidth(2); // Set the border width
-		//		g.strokeRect(flyingEnemy.getX(), tempy, Constants.enemyWidth, Constants.enemyHeight);
-		g.strokeRect(player.getPlayerX(), player.getRect(), Constants.playerWidth, Constants.playerHeight);
+		//		g.setStroke(Color.BLACK); // Set the rectangle's border color
+		//		g.setLineWidth(2); // Set the border width
+		//		//		g.strokeRect(flyingEnemy.getX(), tempy, Constants.enemyWidth, Constants.enemyHeight);
+		//		g.strokeRect(player.getPlayerX(), player.getRect(), Constants.playerWidth, Constants.playerHeight);
 
 
 
@@ -167,39 +168,44 @@ public class PlayState extends GameState {
 	public void drawEnemy(GraphicsContext g) {
 		engen = new Random(); 
 
-		//
-		//		g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight);
-		//		if (enemy.getX() < 0 - Constants.enemyWidth) {
-		//			enemy.setAntagonistX(Constants.screenWidth);
-		//			player.updatePasses(1);
-		//
-		//			if (player.getPasses() % 5 == 0) {
-		//				movingSpeed += 4;
-		//			}
-		//		}
+		if (!isFlyingEnemyActive) {
 
+			g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight);
 
+			if (enemy.getX() < 0 - Constants.enemyWidth) {
+				enemy.setAntagonistX(Constants.screenWidth);
+				player.updatePasses(1);
 
-		 g.drawImage(flyingEnemy.getImage(), flyingEnemy.getX(), flyingEnemy.getY(), Constants.enemyWidth, Constants.enemyHeight);
+				if (engen.nextInt(2) == 1) {  // 50% chance
+					isFlyingEnemyActive = true;
+					flyingEnemy.setAntagonistX(Constants.screenWidth);  // Reset position
+				}
+			}
+
+		} else {
 
-		    if (flyingEnemy.getX() < 0 - Constants.enemyWidth) {
-		        flyingEnemy.setAntagonistX(Constants.screenWidth);  // Reset the enemy's position
-		        player.updatePasses(1);
+			g.drawImage(flyingEnemy.getImage(), flyingEnemy.getX(), flyingEnemy.getY(), Constants.enemyWidth, Constants.enemyHeight);
 
-		        // Reset bomb drop flag to allow the next bomb drop
-		        flyingEnemy.resetBombDrop();
+			if (flyingEnemy.getX() < 0 - Constants.enemyWidth) {
+				isFlyingEnemyActive = false;
+				//				flyingEnemy.setAntagonistX(Constants.screenWidth);  // Reset the enemy's position
+				//				player.updatePasses(1);
 
-		        if (player.getPasses() % 5 == 0) {
-		            movingSpeed += 2;
-		        }
-		    }
+				// Reset bomb drop flag to allow the next bomb drop
+				flyingEnemy.resetBombDrop();
 
-		    // Render the bomb if it exists
-		    if (bomb != null) {
-		        g.drawImage(bomb.getImage(), bomb.getX(), bomb.getY(), Constants.bombWidth, Constants.bombHeight);
-		    }
+				//				if (player.getPasses() % 5 == 0) {
+				//					movingSpeed += 2;
+				//				}
+			}
 		}
 
+		// Render the bomb if it exists
+		if (bomb != null) {
+			g.drawImage(bomb.getImage(), bomb.getX(), bomb.getY(), Constants.bombWidth, Constants.bombHeight);
+		}
+	}
+
 
 
 
@@ -274,19 +280,28 @@ public class PlayState extends GameState {
 		//		Enemy hoppar 10 snäpp till vänster för varje update
 		//		enemy.setAntagonistX(enemy.getX()-10);
 		//		enemy.setAntagonistX(enemy.getX()-movingSpeed);
-		flyingEnemy.setAntagonistX(flyingEnemy.getX() -movingSpeed);
-		
-		Bomb droppedBomb = flyingEnemy.dropBomb();
+		if (isFlyingEnemyActive) {
+
+			flyingEnemy.setAntagonistX(flyingEnemy.getX() -movingSpeed);
+
+			Bomb droppedBomb = flyingEnemy.dropBomb();
 
-		if (droppedBomb != null) {
-			bomb = droppedBomb;
+			if (droppedBomb != null) {
+				bomb = droppedBomb;
+			}
+		} else {
+			enemy.setAntagonistX(enemy.getX() - movingSpeed);
 		}
 
 		if (bomb != null) {
 			bomb.render(movingSpeed);
 
-			// If the bomb goes off-screen, remove it
-			if (bomb.getY() > Constants.screenHeight) {
+			if (bomb.getBoundingBox().intersects(player.getBoundingBox())) {
+				System.out.println("Bomb hit the player!");
+				player.decreaseLives();  // Assume there's a method to decrement player lives
+				bomb = null;  // Destroy the bomb after collision
+
+			}	else if (bomb.getY() > Constants.screenHeight) {
 				bomb = null;  // Destroy the bomb if it goes off-screen
 				System.out.println("Bomb went off-screen and was destroyed");
 			}
diff --git a/src/states/Player.java b/src/states/Player.java
index 017d274..f31fce2 100644
--- a/src/states/Player.java
+++ b/src/states/Player.java
@@ -6,6 +6,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 
 import constants.Constants;
+import javafx.geometry.Bounds;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.input.KeyCode;
@@ -65,6 +66,11 @@ public class Player {
 		currImage = image;
 
 	}
+	
+	
+	public Bounds getBoundingBox() {
+	    return new Rectangle(playerX, playerY, Constants.playerWidth, Constants.playerHeight).getBoundsInParent();
+	}
 
 
 	public double getRect() {
-- 
GitLab