- Changed getDefendingPlayerRelatedTo to return a list instead of a single player (which brings it closer to the rules).

- Added Yare.
This commit is contained in:
Sloth
2013-03-13 23:25:06 +00:00
parent 945d5a5f56
commit f705d35823
6 changed files with 31 additions and 15 deletions

View File

@@ -6358,12 +6358,10 @@ public class Card extends GameEntity implements Comparable<Card> {
return false;
}
} else if (property.startsWith("DefenderCtrl")) {
Combat combat = Singletons.getModel().getGame().getCombat();
if (!Singletons.getModel().getGame().getPhaseHandler().inCombat()) {
return false;
}
Player defender = combat.getDefendingPlayerRelatedTo(source);
if (!this.getController().equals(defender)) {
if (!Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(source).contains(this.getController())) {
return false;
}
} else if (property.startsWith("EnchantedPlayerCtrl")) {

View File

@@ -855,10 +855,7 @@ public class AbilityUtils {
players.add(p);
}
} else if (defined.equals("DefendingPlayer")) {
final Player p = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(card);
if (!players.contains(p)) {
players.add(p);
}
players.addAll(Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(card));
} else if (defined.equals("ChosenPlayer")) {
final Player p = card.getChosenPlayer();
if (!players.contains(p)) {

View File

@@ -546,7 +546,8 @@ public class Combat {
* a {@link forge.Card} object.
* @return a {@link forge.Player} object.
*/
public Player getDefendingPlayerRelatedTo(final Card source) {
public List<Player> getDefendingPlayerRelatedTo(final Card source) {
List<Player> players = new ArrayList<Player>();
Card attacker = source;
if (source.isAura()) {
attacker = source.getEnchantingCard();
@@ -554,13 +555,21 @@ public class Combat {
attacker = source.getEquippingCard();
}
// return the corresponding defender
Player defender = getDefenderPlayerByAttacker(attacker);
if (null == defender) { // too bad, have to choose now
// don't have ui, cannot choose - have to getOpponent
// that's inaccurate. That opponent may be not even a defender
defender = source.getController().getOpponent();
if (null != defender) {
players.add(defender);
return players;
}
return defender;
// return all defenders
List<GameEntity> defenders = this.getDefenders();
for (GameEntity ge : defenders) {
if (ge instanceof Player) {
players.add((Player) ge);
}
}
return players;
}
/**

View File

@@ -278,7 +278,10 @@ public class CombatUtil {
}
String valid = StringUtils.join(walkTypes, ",");
final Player defendingPlayer = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(attacker);
Player defendingPlayer = attacker.getController().getOpponent();
if (attacker.isAttacking()) {
defendingPlayer = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(attacker).get(0);
}
List<Card> defendingLands = defendingPlayer.getCardsIn(ZoneType.Battlefield);
for (Card c : defendingLands) {
if (c.isValid(valid.split(","), defendingPlayer, attacker)) {
@@ -1225,7 +1228,7 @@ public class CombatUtil {
@Override
public void resolve() {
this.api = ApiType.Sacrifice;
final Player opponent = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(c);
final Player opponent = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(c).get(0);
//List<Card> list = AbilityUtils.filterListByType(opponent.getCardsIn(ZoneType.Battlefield), "Permanent", this);
final List<Card> list = opponent.getCardsIn(ZoneType.Battlefield);
List<Card> toSac = opponent.getController().choosePermanentsToSacrifice(list, a, this, false, false);