AbilityUtils: add RegisteredOpponents for PlayerCount

PlayerPredicates: add isOpponentOf Predicator
Player: make getBloodthirstAmount use of new function
This commit is contained in:
Hanmac
2017-01-07 04:19:33 +00:00
parent bd6c729317
commit c46683e92d
3 changed files with 20 additions and 10 deletions

View File

@@ -18,6 +18,7 @@ import forge.game.card.*;
import forge.game.cost.Cost; import forge.game.cost.Cost;
import forge.game.mana.ManaCostBeingPaid; import forge.game.mana.ManaCostBeingPaid;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerPredicates;
import forge.game.spellability.*; import forge.game.spellability.*;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.Expressions; import forge.util.Expressions;
@@ -343,7 +344,8 @@ public class AbilityUtils {
public static int calculateAmount(final Card card, String amount, final CardTraitBase ability) { public static int calculateAmount(final Card card, String amount, final CardTraitBase ability) {
// return empty strings and constants // return empty strings and constants
if (StringUtils.isBlank(amount)) { return 0; } 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 // Strip and save sign for calculations
final boolean startsWithPlus = amount.charAt(0) == '+'; final boolean startsWithPlus = amount.charAt(0) == '+';
@@ -423,11 +425,15 @@ public class AbilityUtils {
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} }
else if (hType.equals("Opponents")) { 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; return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} }
else if (hType.equals("Other")) { else if (hType.equals("Other")) {
players.addAll(card.getController().getAllOtherPlayers()); players.addAll(player.getAllOtherPlayers());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} }
else if (hType.equals("Remembered")) { else if (hType.equals("Remembered")) {

View File

@@ -1953,13 +1953,8 @@ public class Player extends GameEntity implements Comparable<Player> {
} }
public final int getBloodthirstAmount() { public final int getBloodthirstAmount() {
int blood = 0; return Aggregates.sum(Iterables.filter(
for (Player p : game.getRegisteredPlayers()) { game.getRegisteredPlayers(), PlayerPredicates.isOpponentOf(this)), Accessors.FN_GET_ASSIGNED_DAMAGE);
if (p.isOpponentOf(this)) {
blood += p.getAssignedDamage();
}
}
return blood;
} }
public final boolean hasSurge() { public final boolean hasSurge() {

View File

@@ -21,6 +21,15 @@ public final class PlayerPredicates {
}; };
} }
public static final Predicate<Player> isOpponentOf(final Player player) {
return new Predicate<Player>() {
@Override
public boolean apply(final Player p) {
return p.isOpponentOf(player);
}
};
}
public static final Predicate<Player> isCardInPlay(final String cardName) { public static final Predicate<Player> isCardInPlay(final String cardName) {
return new Predicate<Player>() { return new Predicate<Player>() {
@Override @Override