diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 0c7d54e604b..1102c123e46 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -1056,7 +1056,8 @@ public class GameAction { public void checkGameOverCondition() { // award loses as SBE List losers = null; - for (Player p : this.game.getPlayers()) { + List allPlayers = this.game.getPlayers(); + for (Player p : allPlayers) { if (p.checkLoseCondition()) { // this will set appropriate outcomes // Run triggers if (losers == null) { @@ -1100,13 +1101,24 @@ public class GameAction { } if (reason == null) { - int cntNotLost = Iterables.size(Iterables.filter(game.getPlayers(), Player.Predicates.NOT_LOST)); + List notLost = new ArrayList(); + Set teams = new HashSet(); + for (Player p : allPlayers) { + if (p.getOutcome() == null || p.getOutcome().hasWon()) { + notLost.add(p); + teams.add(p.getTeam()); + } + } + int cntNotLost = notLost.size(); if (cntNotLost == 1) { reason = GameEndReason.AllOpponentsLost; } else if (cntNotLost == 0) { reason = GameEndReason.Draw; } + else if (teams.size() == 1) { + reason = GameEndReason.AllOpposingTeamsLost; + } else { return; } diff --git a/forge-game/src/main/java/forge/game/GameEndReason.java b/forge-game/src/main/java/forge/game/GameEndReason.java index 73b61002a13..e328efeb623 100644 --- a/forge-game/src/main/java/forge/game/GameEndReason.java +++ b/forge-game/src/main/java/forge/game/GameEndReason.java @@ -35,4 +35,7 @@ public enum GameEndReason { /** Used to end multiplayer games where the all humans have lost or conceded while AIs cannot end match by themselves.*/ AllHumansLost, + + /** Team win. */ + AllOpposingTeamsLost, } diff --git a/forge-gui/src/main/java/forge/gui/match/ViewWinLose.java b/forge-gui/src/main/java/forge/gui/match/ViewWinLose.java index 854d2130795..521fd137f50 100644 --- a/forge-gui/src/main/java/forge/gui/match/ViewWinLose.java +++ b/forge-gui/src/main/java/forge/gui/match/ViewWinLose.java @@ -174,6 +174,8 @@ public class ViewWinLose { Player winner = outcome.getWinningPlayer(); if (winner == null) { return "It's a draw!"; + } else if (winningTeam != -1) { + return "Team " + winner.getTeam() + " Won!"; } else { return winner.getName() + " Won!"; }