From 2f76811f418a1bff9f55f8e057a85f8f69203d89 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Fri, 17 May 2019 17:30:26 +0300 Subject: [PATCH] Do not fill banzai tiles if a foreign locked tile exists --- .../games/battlebanzai/BattleBanzaiGame.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/games/battlebanzai/BattleBanzaiGame.java b/src/main/java/com/eu/habbo/habbohotel/games/battlebanzai/BattleBanzaiGame.java index f4bafa2d..a3733c23 100644 --- a/src/main/java/com/eu/habbo/habbohotel/games/battlebanzai/BattleBanzaiGame.java +++ b/src/main/java/com/eu/habbo/habbohotel/games/battlebanzai/BattleBanzaiGame.java @@ -295,10 +295,10 @@ public class BattleBanzaiGame extends Game int y = item.getY(); List> filledAreas = new ArrayList<>(); - filledAreas.add(this.floodFill(x, y - 1, this.lockedTiles.get(teamColor), new ArrayList<>())); - filledAreas.add(this.floodFill(x, y + 1, this.lockedTiles.get(teamColor), new ArrayList<>())); - filledAreas.add(this.floodFill(x - 1, y, this.lockedTiles.get(teamColor), new ArrayList<>())); - filledAreas.add(this.floodFill(x + 1, y, this.lockedTiles.get(teamColor), new ArrayList<>())); + filledAreas.add(this.floodFill(x, y - 1, this.lockedTiles.get(teamColor), new ArrayList<>(), teamColor)); + filledAreas.add(this.floodFill(x, y + 1, this.lockedTiles.get(teamColor), new ArrayList<>(), teamColor)); + filledAreas.add(this.floodFill(x - 1, y, this.lockedTiles.get(teamColor), new ArrayList<>(), teamColor)); + filledAreas.add(this.floodFill(x + 1, y, this.lockedTiles.get(teamColor), new ArrayList<>(), teamColor)); Optional> largestAreaOfAll = filledAreas.stream().filter(Objects::nonNull).max(Comparator.comparing(List::size)); @@ -324,9 +324,9 @@ public class BattleBanzaiGame extends Game } } - private List floodFill(int x, int y, THashSet lockedTiles, List stack) + private List floodFill(int x, int y, THashSet lockedTiles, List stack, GameTeamColors color) { - if (this.isOutOfBounds(x, y)) return null; + if (this.isOutOfBounds(x, y) || this.isForeignLockedTile(x, y, color)) return null; RoomTile tile = this.room.getLayout().getTile((short)x, (short)y); @@ -335,10 +335,10 @@ public class BattleBanzaiGame extends Game stack.add(tile); List> result = new ArrayList<>(); - result.add(this.floodFill(x, y - 1, lockedTiles, stack)); - result.add(this.floodFill(x, y + 1, lockedTiles, stack)); - result.add(this.floodFill(x - 1, y, lockedTiles, stack)); - result.add(this.floodFill(x + 1, y, lockedTiles, stack)); + result.add(this.floodFill(x, y - 1, lockedTiles, stack, color)); + result.add(this.floodFill(x, y + 1, lockedTiles, stack, color)); + result.add(this.floodFill(x - 1, y, lockedTiles, stack, color)); + result.add(this.floodFill(x + 1, y, lockedTiles, stack, color)); if (result.contains(null)) return null; @@ -368,6 +368,19 @@ public class BattleBanzaiGame extends Game return true; } + private boolean isForeignLockedTile(int x, int y, GameTeamColors color) + { + for (HashMap.Entry> lockedTilesForColor : this.lockedTiles.entrySet()) { + if (lockedTilesForColor.getKey() == color) continue; + + for (HabboItem item : lockedTilesForColor.getValue()) { + if (item.getX() == x && item.getY() == y) return true; + } + } + + return false; + } + public void refreshCounters() { for(GameTeam team : this.teams.values())