From c46683e92d00e9c9849bda7c6f93181ec551f40a Mon Sep 17 00:00:00 2001 From: Hanmac Date: Sat, 7 Jan 2017 04:19:33 +0000 Subject: [PATCH] AbilityUtils: add RegisteredOpponents for PlayerCount PlayerPredicates: add isOpponentOf Predicator Player: make getBloodthirstAmount use of new function --- .../main/java/forge/game/ability/AbilityUtils.java | 12 +++++++++--- .../src/main/java/forge/game/player/Player.java | 9 ++------- .../java/forge/game/player/PlayerPredicates.java | 9 +++++++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index e653d0ce1aa..37207f75953 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -18,6 +18,7 @@ import forge.game.card.*; import forge.game.cost.Cost; import forge.game.mana.ManaCostBeingPaid; import forge.game.player.Player; +import forge.game.player.PlayerPredicates; import forge.game.spellability.*; import forge.game.zone.ZoneType; import forge.util.Expressions; @@ -343,7 +344,8 @@ public class AbilityUtils { public static int calculateAmount(final Card card, String amount, final CardTraitBase ability) { // return empty strings and constants if (StringUtils.isBlank(amount)) { return 0; } - final Game game = card.getController().getGame(); + final Player player = card.getController(); + final Game game = player.getGame(); // Strip and save sign for calculations final boolean startsWithPlus = amount.charAt(0) == '+'; @@ -423,11 +425,15 @@ public class AbilityUtils { return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; } else if (hType.equals("Opponents")) { - players.addAll(card.getController().getOpponents()); + players.addAll(player.getOpponents()); + return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; + } + else if (hType.equals("RegisteredOpponents")) { + players.addAll(Iterables.filter(game.getRegisteredPlayers(),PlayerPredicates.isOpponentOf(player))); return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; } else if (hType.equals("Other")) { - players.addAll(card.getController().getAllOtherPlayers()); + players.addAll(player.getAllOtherPlayers()); return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; } else if (hType.equals("Remembered")) { diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 67cb9c7b41f..bf51315f995 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -1953,13 +1953,8 @@ public class Player extends GameEntity implements Comparable { } public final int getBloodthirstAmount() { - int blood = 0; - for (Player p : game.getRegisteredPlayers()) { - if (p.isOpponentOf(this)) { - blood += p.getAssignedDamage(); - } - } - return blood; + return Aggregates.sum(Iterables.filter( + game.getRegisteredPlayers(), PlayerPredicates.isOpponentOf(this)), Accessors.FN_GET_ASSIGNED_DAMAGE); } public final boolean hasSurge() { diff --git a/forge-game/src/main/java/forge/game/player/PlayerPredicates.java b/forge-game/src/main/java/forge/game/player/PlayerPredicates.java index f034f3f65ff..80b2d7e0a82 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerPredicates.java +++ b/forge-game/src/main/java/forge/game/player/PlayerPredicates.java @@ -21,6 +21,15 @@ public final class PlayerPredicates { }; } + public static final Predicate isOpponentOf(final Player player) { + return new Predicate() { + @Override + public boolean apply(final Player p) { + return p.isOpponentOf(player); + } + }; + } + public static final Predicate isCardInPlay(final String cardName) { return new Predicate() { @Override