From d22c8c2f15eefcbc3936e269d3b0ba2cf3f4413f Mon Sep 17 00:00:00 2001
From: yschl <ys037@hdm-stuttgart.de>
Date: Wed, 17 Jan 2024 00:00:22 +0100
Subject: [PATCH] Player can now place bombs that have a explosion radius that
 dont go through the wall. Player: Added placeBomb Method and
 checkFileNon_Destructible to let the player place bombs and explosions
 TileManager.java: Fixed: png path of middlexplosion NetworkPlayerTwo.java &
 IEntity.java: Add: placeBomb Method InputHandler.java Fix: isBomb Method for
 Clean Code GameSceneController.java: Fix: checkHealTile Method from
 renderContent in updateContent Method Add: placeBomb Method in updateContent
 Method

---
 .../Controller/GameSceneController.java       | 11 +++--
 .../battlearena/Model/Entity/IEntity.java     |  4 +-
 .../Model/Entity/NetworkPlayerTwo.java        |  5 ++
 .../battlearena/Model/Entity/Player.java      | 49 +++++++++++++++++--
 .../Model/Inputs/InputHandler.java            |  8 ++-
 .../battlearena/Model/Map/TileManager.java    |  2 +-
 6 files changed, 66 insertions(+), 13 deletions(-)

diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
index f0e697c0..79fd84cb 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
@@ -64,10 +64,10 @@ public class GameSceneController implements Initializable {
                         "4 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 3 " +
                         "4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 2 3 " +
                         "4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 2 3 " +
-                        "4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3";
+                        "4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ";
     int horizontalTileCount = 18;
     int verticalTileCount = 18;
-    int diffTileCount = 8;
+    int diffTileCount = 10;
     int scaledTileSize = 48;
 
 
@@ -107,14 +107,17 @@ public class GameSceneController implements Initializable {
         enemy.updateEntityMovement(this);
         player.attack(enemy, graphicsContext2D);
         enemy.attack(player, graphicsContext2D);
+        player.checkHealTile(player, graphicsContext2D);
+        enemy.checkHealTile(enemy, graphicsContext2D);
+        player.placeBomb(player, graphicsContext2D);
+        enemy.placeBomb(enemy, graphicsContext2D);
     }
 
     private void renderContent(GraphicsContext graphicsContext) {
         tileManager.renderMap();
         player.renderEntity(graphicsContext);
         enemy.renderEntity(graphicsContext);
-        player.checkHealTile(player, graphicsContext2D);
-        enemy.checkHealTile(enemy, graphicsContext2D);
+
     }
 
     public IEntity getEnemy() {
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java
index f98ddeb7..97e4a532 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java
@@ -14,7 +14,9 @@ public interface IEntity {
 
    void checkHealTile(IEntity entity, GraphicsContext graphicsContext);
 
-   void attack(IEntity entity, GraphicsContext graphicsContext);
+    void placeBomb(IEntity entity, GraphicsContext graphicsContext);
+
+    void attack(IEntity entity, GraphicsContext graphicsContext);
 
    void updateEntityWalkAnimation();
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/NetworkPlayerTwo.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/NetworkPlayerTwo.java
index d045a108..36fa8143 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/NetworkPlayerTwo.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/NetworkPlayerTwo.java
@@ -41,6 +41,11 @@ class NetworkPlayerTwo implements IEntity{
 
     }
 
+    @Override
+    public void placeBomb(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
     @Override
     public void attack(IEntity entity, GraphicsContext graphicsContext) {
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
index f358c976..49430df1 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
@@ -291,19 +291,58 @@ class Player implements IEntity {
         }
     }
 
-
+    @Override
     public void placeBomb(IEntity entity, GraphicsContext graphicsContext){
+        boolean isDestructible;
         int xTile = entity.getMapPosX() / gameSceneController.getScaledTileSize();
         int yTile = entity.getMapPosY() / gameSceneController.getScaledTileSize();
-        if(inputHandler.isBomb() || inputHandler.isSdBomb()){
-            TileManager.tileMap[yTile][xTile] = 7;
+        if(inputHandler.isBomb() &&  PLAYER_MODE == PlayerMode.PLAYER_ONE ||
+                inputHandler.isSdBomb() && PLAYER_MODE == PlayerMode.PLAYER_TWO) {
+            isDestructible = checkTileNon_Destructible(yTile, xTile);
+            if(isDestructible){
+                TileManager.tileMap[yTile][xTile] = 7;
+                for (int i=0;i<3; i++){
+                    isDestructible = checkTileNon_Destructible(yTile +1 +i, xTile);
+                    if(isDestructible && (yTile < 18 && xTile <18)){
+                       TileManager.tileMap[yTile +1 + i][xTile] = 8;
+                    }
+                    isDestructible = checkTileNon_Destructible(yTile -1 -i, xTile);
+                    if(isDestructible && (yTile < 18 && xTile <18)){
+                        TileManager.tileMap[yTile -1 -i][xTile] = 8;
+                    }
+                    isDestructible = checkTileNon_Destructible(yTile , xTile +1 +i);
+                    if(isDestructible && (yTile < 18 && xTile <18)){
+                        TileManager.tileMap[yTile][xTile +1 +i] = 8;
+                    }
+                    isDestructible = checkTileNon_Destructible(yTile, xTile -1 -i);
+                    if(isDestructible && (yTile < 18 && xTile <18)){
+                        TileManager.tileMap[yTile][xTile -1 -i] = 8;
+                    }
+                }
+            }
+
+            /*isDestructible = checkTileNon_Destructible(yTile, xTile);   //for loop
+            if(isDestructible){
+                TileManager.tileMap[yTile][xTile] = 7;
+                 isDestructible = checkTileNon_Destructible(yTile-1, xTile);   //for loop
+            }else if(isDestructible)
             TileManager.tileMap[yTile-1][xTile] = 8;
-            TileManager.tileMap[yTile-2][xTile] = 8;
+            TileManager.tileMap[yTile-2][xTile] = 8;        //Change it with a DestructionHandler like CollisionHandler
+            TileManager.tileMap[yTile+1][xTile] = 8;
+            TileManager.tileMap[yTile+2][xTile] = 8;        //Why doesnt it work like in CollisionHandler with tileSet
             TileManager.tileMap[yTile][xTile+1] = 8;
             TileManager.tileMap[yTile][xTile+2] = 8;
+            TileManager.tileMap[yTile][xTile-1] = 8;
+            TileManager.tileMap[yTile][xTile-2] = 8;*/
         }
     }
-
+    public boolean checkTileNon_Destructible(int y, int x){     //Change it with a DestructionHandler like CollisionHandler
+        //tileSet[xTile].getDestruction();
+        if(TileManager.tileMap[y][x] != 4 && TileManager.tileMap[y][x] != 3){
+            return true;
+        }
+        return false;
+    }
 
     @Override
     public void attack(IEntity entity, GraphicsContext graphicsContext) {
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Inputs/InputHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Inputs/InputHandler.java
index 934bdce8..e307c389 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Inputs/InputHandler.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Inputs/InputHandler.java
@@ -154,7 +154,11 @@ public class InputHandler {
     public boolean isSdAttack() {
         return sdAttack;
     }
-    public boolean isBomb(){return bomb;}
-    public boolean isSdBomb(){return sdbomb;}
+    public boolean isBomb(){
+        return bomb;
+    }
+    public boolean isSdBomb(){
+        return sdbomb;
+    }
 
 }
\ No newline at end of file
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileManager.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileManager.java
index 8c66d48b..29c09eef 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileManager.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileManager.java
@@ -51,7 +51,7 @@ public class TileManager {
             tileSet[7] = TileFactory.createTile(TileType.NON_WALKABLE,TileType.NON_DESTRUCTIBLE,
                     new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/bigbomba.png"))));
             tileSet[8] = TileFactory.createTile(TileType.WALKABLE,TileType.NON_DESTRUCTIBLE,
-                    new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/middleexplosion.png"))));
+                    new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/map/middlexplosion.png"))));
         } catch (Exception e) {
             log.error(e);
         }
-- 
GitLab