package mage.abilities.dynamicvalue.common; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.Effect; import mage.constants.CardType; import mage.game.Game; import mage.game.permanent.Permanent; /** * @author Loki */ public class DomainValue implements DynamicValue { private int amount; private boolean countTargetPlayer; private UUID playerId; public DomainValue() { this(1); } public DomainValue(boolean countTargetPlayer) { this(1, countTargetPlayer); } public DomainValue(int amount) { this(amount, false); } public DomainValue(int amount, boolean countTargetPlayer) { this.amount = amount; this.countTargetPlayer = countTargetPlayer; } public DomainValue(int amount, UUID playerId) { this(amount, false); this.playerId = playerId; } public DomainValue(final DomainValue dynamicValue) { this.amount = dynamicValue.amount; this.countTargetPlayer = dynamicValue.countTargetPlayer; this.playerId = dynamicValue.playerId; } @Override public int calculate(Game game, Ability sourceAbility, Effect effect) { int havePlains = 0; int haveIslands = 0; int haveMountains = 0; int haveSwamps = 0; int haveForests = 0; UUID targetPlayer; if (playerId != null) { targetPlayer = playerId; } else if (countTargetPlayer) { targetPlayer = effect.getTargetPointer().getFirst(game, sourceAbility); } else { targetPlayer = sourceAbility.getControllerId(); } for (Permanent p : game.getBattlefield().getAllActivePermanents(targetPlayer)) { if (p.isLand()) { if (havePlains == 0 && p.getSubtype(game).contains("Plains")) { havePlains = 1; } if (haveIslands == 0 && p.getSubtype(game).contains("Island")) { haveIslands = 1; } if (haveMountains == 0 && p.getSubtype(game).contains("Mountain")) { haveMountains = 1; } if (haveSwamps == 0 && p.getSubtype(game).contains("Swamp")) { haveSwamps = 1; } if (haveForests == 0 && p.getSubtype(game).contains("Forest")) { haveForests = 1; } } } return amount * (haveForests + haveIslands + haveMountains + havePlains + haveSwamps); } @Override public DomainValue copy() { return new DomainValue(this); } @Override public String toString() { return String.valueOf(amount); } public int getAmount() { return amount; } @Override public String getMessage() { return "basic land type among lands " + (countTargetPlayer ? "he or she controls" : "you control"); } }