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