From 0fd4e65309896e1f28bac43d7e12d3e2c8b5ef10 Mon Sep 17 00:00:00 2001
From: Oscar Wiberg <oscarwiberg@Oscars-MacBook-Air-4.local>
Date: Sun, 26 Jan 2025 12:16:12 +0100
Subject: [PATCH] fortsatt omstrukturering

---
 src/constants/Constants.java |  4 +-
 src/states/Bomb.java         |  2 +-
 src/states/Enemy.java        | 41 +++------------
 src/states/FlyingEnemy.java  | 13 +++--
 src/states/Object.java       | 95 +++++++++++++++++++++++++++++++++++
 src/states/PlayState.java    | 97 ++++++++++++++++++++----------------
 src/states/PowerUp.java      | 54 --------------------
 7 files changed, 168 insertions(+), 138 deletions(-)
 create mode 100644 src/states/Object.java
 delete mode 100644 src/states/PowerUp.java

diff --git a/src/constants/Constants.java b/src/constants/Constants.java
index f766208..1c9fddc 100644
--- a/src/constants/Constants.java
+++ b/src/constants/Constants.java
@@ -45,8 +45,8 @@ public interface Constants {
 	double enemyHeight = 80;
 	
 //	powerups
-	String lifeImg = "src/Images1/heart2.png";
-	String powerImg = "src/Images1/blixt.png";
+	String lifeImg = "src/Images1/apple.png";
+	String powerImg = "src/Images1/zap.png";
 	
 	String bombImg = "src/Images1/bomb.png";
 	double bombWidth = 50;
diff --git a/src/states/Bomb.java b/src/states/Bomb.java
index 29ba82f..05a92ea 100644
--- a/src/states/Bomb.java
+++ b/src/states/Bomb.java
@@ -31,7 +31,7 @@ public class Bomb {
 	}
 	
 	public Bounds getBoundingBox() {
-	    return new Rectangle( startX, posY, Constants.bombWidth, Constants.bombHeight).getBoundsInParent();
+	    return new Rectangle(startX, posY, Constants.bombWidth, Constants.bombHeight).getBoundsInParent();
 	}
 
 	
diff --git a/src/states/Enemy.java b/src/states/Enemy.java
index 0d74bec..5a3795f 100644
--- a/src/states/Enemy.java
+++ b/src/states/Enemy.java
@@ -10,51 +10,24 @@ import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.shape.Rectangle;
 
-public class Enemy extends Antagonist{
+public class Enemy extends Object{
 
 	
 
-	public Enemy(String enemyImg, double x, double y) {
-		super(enemyImg, x, y);
+	public Enemy(String enemyImg, double x, double y, double h, double w) {
+		super(enemyImg, x, y, h, w);
 
 	}
 
-	//	if (collided && enemy.getEnemyX() < player.getPlayerX()) {
-	//		collided = false;
-	//	}
-
-	@Override
-	public boolean playerAntagonistCollision(Player player) {
-//		boolean hit = false;
-
-		boolean collisionX = player.getPlayerX() < (x + 60.00) && (player.getPlayerX() + 60.00) > x;
-
-		// Check for collision on the y-axis
-		boolean collisionY = player.getPlayerY() < (y + 45.00) && (player.getPlayerY() + 60.00) > y;
-
-		if (collisionY && collisionX && !collisionDetected) {
-			player.decreaseLives();
-
-			 collisionDetected = true;
-		        return true;
-		    }
-		    
-		    if (!collisionX) {
-	            collisionDetected = false;
-	        }
-		
-		return false;
 	
-	}  
+	
 
-	public Bounds getBoundingBox() {
-	    return new Rectangle(x, y, Constants.enemyWidth, Constants.enemyHeight).getBoundsInParent();
-	}
 	
 
 	@Override
-	public double getY() {
-		return y;
+	public void use(Player player) {
+		// TODO Auto-generated method stub
+		
 	}
 
 
diff --git a/src/states/FlyingEnemy.java b/src/states/FlyingEnemy.java
index 72c21d4..2b1425e 100644
--- a/src/states/FlyingEnemy.java
+++ b/src/states/FlyingEnemy.java
@@ -6,7 +6,7 @@ import java.util.Random;
 
 import javafx.scene.image.Image;
 
-public class FlyingEnemy extends Antagonist{
+public class FlyingEnemy extends Object{
 
 
 	private Random drop;
@@ -16,8 +16,8 @@ public class FlyingEnemy extends Antagonist{
 	private boolean bombDropped = false;
 
 
-	public FlyingEnemy(String enemyImg, double x, double y) {
-		super(enemyImg, x, y);	
+	public FlyingEnemy(String enemyImg, double x, double y, double h, double w) {
+		super(enemyImg, x, y, h, w);	
 
 		this.drop = new Random();
 		this.bombDropX = dropNextBombX();
@@ -53,12 +53,15 @@ public class FlyingEnemy extends Antagonist{
 		bombDropped = false;
 	}
 
+
+
 	@Override
-	public boolean playerAntagonistCollision(Player player) {
+	public void use(Player player) {
 		// TODO Auto-generated method stub
-		return false;
+		
 	}
 
+	
 
 
 
diff --git a/src/states/Object.java b/src/states/Object.java
new file mode 100644
index 0000000..a0a96a1
--- /dev/null
+++ b/src/states/Object.java
@@ -0,0 +1,95 @@
+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 abstract class Object {
+	
+	private double posX;
+	private double posY; 
+	private double height;
+	private double width;
+	private Image img;
+
+	public Object(String image, double x, double y, double h, double w) {
+		
+		posY = y;
+		posX = x;
+		width = w;
+		height = h;
+	
+		try {
+			img = new Image(new FileInputStream(image));
+			
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	public double getX() {
+		return posX;
+	}
+
+	public double getY() {
+		return posY;
+	}
+
+	public Image getImage() {
+		return img;
+	}
+	
+	
+	public void setX(double posX) {
+		this.posX = posX;
+	}
+
+	public void setY(double posY) {
+		this.posY = posY;
+	}
+
+	public double getH() {
+		return height;
+	}
+
+	public double getW() {
+		return width;
+	}
+
+	public boolean playerObjectCollision(Player player) {
+		boolean hit = false;
+		
+		double playerX = player.getPlayerX();
+		double playerY = player.getPlayerY();
+
+		// Define new smaller width and height
+		double smallerWidth = Constants.playerWidth - 50;  // Example: reduced by 20 pixels
+		double smallerHeight = Constants.playerHeight - 50; // Example: reduced by 20 pixels
+
+		// Calculate new X and Y to center the smaller rectangle around the player's position
+		double centeredX = playerX + (Constants.playerWidth - smallerWidth) / 2;
+		double centeredY = playerY + (Constants.playerHeight - smallerHeight) / 2;
+
+		
+		Bounds playerRect = new Rectangle(centeredX, centeredY, smallerWidth, smallerHeight).getBoundsInParent();
+
+
+		Bounds objectRect = new Rectangle(this.getX(), this.getY(), this.getW(), this.getH()).getBoundsInParent();
+
+		if (playerRect.intersects(objectRect)) {
+			hit = true;
+		}
+		
+		return hit;
+	}
+	
+	public abstract void use(Player player);
+	
+//	här kommer de två olika powerupsen avgöra vad som händer när ma ta den, denna klass kallar på kollisionen
+	
+}
diff --git a/src/states/PlayState.java b/src/states/PlayState.java
index 1f2e059..97e6886 100644
--- a/src/states/PlayState.java
+++ b/src/states/PlayState.java
@@ -62,6 +62,8 @@ public class PlayState extends GameState {
 	private int movingSpeed = 10;
 	private Bomb bomb;
 	private boolean isFlyingEnemyActive = false;
+	private String currScore;
+	private double collisionX = -1.00;
 
 
 
@@ -94,9 +96,9 @@ public class PlayState extends GameState {
 	public void mode1() {
 		player = new Player(Constants.playerImg);
 		slidingPlayer = Constants.slidingPlayerImg;
-		enemy = new Enemy(Constants.enemyImg, 800.00, 270.00);
-		extraLife = new ExtraLifePowerUp(Constants.lifeImg);
-		flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00);
+		enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth);
+		//		extraLife = new ExtraLifePowerUp(Constants.lifeImg);
+		flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth);
 		//		flyingEnemy.setAntagonistX(800.00);
 		//		tempy = flyingEnemy.getY();
 		bgColor = Color.ROYALBLUE;
@@ -107,9 +109,9 @@ public class PlayState extends GameState {
 	public void mode2() {
 		player = new Player(Constants.playerImg2);
 		slidingPlayer = Constants.slidingPlayerImg2;
-		enemy = new Enemy(Constants.enemyImg, 800.00, 250.00);
-		extraLife = new ExtraLifePowerUp(Constants.lifeImg);
-		flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00);
+		enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth);
+		//		extraLife = new ExtraLifePowerUp(Constants.lifeImg);
+		flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth);
 		//		flyingEnemy.setAntagonistX(800.00);
 		//		tempy = flyingEnemy.getY();
 		bgColor = Color.BEIGE;
@@ -123,6 +125,8 @@ public class PlayState extends GameState {
 	 */
 	@Override
 	public void draw(GraphicsContext g) {
+		currScore = "Currently: " + Integer.toString(player.getPasses());
+
 		drawBg(g, bgColor);
 
 		g.setFill(fontColor);
@@ -133,6 +137,7 @@ public class PlayState extends GameState {
 			g.fillText(livesleft+player.getLives(), 0, 30);
 			g.fillText(informationText, Constants.screenWidth - 300, 30);
 			g.fillText(scoreText, 0, 60);
+			g.fillText(currScore, 0, 90);
 		} else {
 			g.fillText(gameOverText, Constants.screenWidth/2, 200);
 			score.saveScore(player.getPasses());
@@ -150,12 +155,6 @@ 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);
-
 
 
 		drawEnemy(g);
@@ -168,17 +167,22 @@ public class PlayState extends GameState {
 	public void drawEnemy(GraphicsContext g) {
 		engen = new Random(); 
 
+
+
+
 		if (!isFlyingEnemyActive) {
 
 			g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight);
 
 			if (enemy.getX() < 0 - Constants.enemyWidth) {
-				enemy.setAntagonistX(Constants.screenWidth);
+				enemy.setX(Constants.screenWidth);
+				collided = false;
+				collisionX = -1.00;
 				player.updatePasses(1);
 
-				if (engen.nextInt(2) == 1) {  // 50% chance
+				if (engen.nextInt(2) == 1 && player.getPasses() > 2) {  // 50% chance after player hase passed 
 					isFlyingEnemyActive = true;
-					flyingEnemy.setAntagonistX(Constants.screenWidth);  // Reset position
+					flyingEnemy.setX(Constants.screenWidth);  // Reset position
 				}
 			}
 
@@ -188,8 +192,8 @@ public class PlayState extends GameState {
 
 			if (flyingEnemy.getX() < 0 - Constants.enemyWidth) {
 				isFlyingEnemyActive = false;
-				//				flyingEnemy.setAntagonistX(Constants.screenWidth);  // Reset the enemy's position
-				//				player.updatePasses(1);
+				player.updatePasses(1);
+
 
 				// Reset bomb drop flag to allow the next bomb drop
 				flyingEnemy.resetBombDrop();
@@ -275,14 +279,11 @@ public class PlayState extends GameState {
 
 	@Override
 	public void update() {
-		//om enemy position är mindre än player och collide är true kollar den inte collision
 
-		//		Enemy hoppar 10 snäpp till vänster för varje update
-		//		enemy.setAntagonistX(enemy.getX()-10);
-		//		enemy.setAntagonistX(enemy.getX()-movingSpeed);
+
 		if (isFlyingEnemyActive) {
 
-			flyingEnemy.setAntagonistX(flyingEnemy.getX() -movingSpeed);
+			flyingEnemy.setX(flyingEnemy.getX() -movingSpeed);
 
 			Bomb droppedBomb = flyingEnemy.dropBomb();
 
@@ -290,7 +291,10 @@ public class PlayState extends GameState {
 				bomb = droppedBomb;
 			}
 		} else {
-			enemy.setAntagonistX(enemy.getX() - movingSpeed);
+			enemy.setX(enemy.getX() - movingSpeed);
+
+
+
 		}
 
 		if (bomb != null) {
@@ -311,39 +315,46 @@ public class PlayState extends GameState {
 		//		Om 
 		if (!gameOver) {
 
-			if (!collided) {
-				//				collided = enemy.playerAntagonistCollision(player);
-				collided = enemy.playerAntagonistCollision(player);
+			if (!collided && enemy.playerObjectCollision(player)) {
 
+				collided = true;
 
-				if (Integer.valueOf(player.getLives()) == 0) {
-					gameOver = true;
-				} 
-			}
+				if (collisionX == -1.00) {
+					collisionX = enemy.getX();
+					System.out.println("Player-Enemy Collision X Coordinate: " + collisionX);
+				}
+
+				player.decreaseLives();
 
-			//återställer boolean när enemy passerat
-			if (collided && enemy.getX() < player.getPlayerX()) {
-				collided = false;
 			}
 
+			if (Integer.valueOf(player.getLives()) == 0) {
+				gameOver = true;
+			} 
 
 
 
+//			if (collided && enemy.getX() < collisionX) {
+//				collided = false;
+//			}
+		}
 
-			if (up) {
 
-				player.jump(movingSpeed);
-			}
 
-			if (player.getPlayerY() == 265) {
-				up = false;
-			}
 
-			if (down) {
 
-				player.slide(slidingPlayer);
+		if (up) {
 
-			}
+			player.jump(movingSpeed);
+		}
+
+		if (player.getPlayerY() == 265) {
+			up = false;
+		}
+
+		if (down) {
+
+			player.slide(slidingPlayer);
 
 		}
 
@@ -351,6 +362,8 @@ public class PlayState extends GameState {
 
 
 
+
+
 	// Here one would probably instead move the player and any
 	// enemies / moving obstacles currently active.
 
diff --git a/src/states/PowerUp.java b/src/states/PowerUp.java
deleted file mode 100644
index 0b5901d..0000000
--- a/src/states/PowerUp.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package states;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-
-import constants.Constants;
-import javafx.scene.image.Image;
-
-public abstract class PowerUp {
-	
-	private double powerUpX = (Constants.screenWidth - Constants.playerWidth) / 2;
-	private double powerUpY = 265.00;
-	private Image powerUpImage;
-
-	PowerUp(String image) {
-
-		try {
-			powerUpImage = new Image(new FileInputStream(image));
-			
-		} catch (FileNotFoundException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-	
-	public double getPowerUpX() {
-		return powerUpX;
-	}
-
-	public void setPowerUpX(double powerUpX) {
-		this.powerUpX = powerUpX;
-	}
-
-	public double getPowerUpY() {
-		return powerUpY;
-	}
-
-	public Image getImage() {
-		return powerUpImage;
-	}
-	
-	public boolean powerUpPlayerCollision(Player player) {
-		boolean hit = false;
-
-//		här ska det finnas kod för att kolla kollisioner mellan spelare och powerup
-
-		return hit;
-	}
-	
-	public abstract void use(Player player);
-	
-//	här kommer de två olika powerupsen avgöra vad som händer när ma ta den, denna klass kallar på kollisionen
-	
-}
-- 
GitLab