- Redirected some targeting checks to the new function.

This commit is contained in:
Sloth
2011-11-10 16:46:36 +00:00
parent 79b4a2ee59
commit 35b75c4256
25 changed files with 424 additions and 466 deletions

2
.gitattributes vendored
View File

@@ -10455,7 +10455,7 @@ src/main/java/forge/card/abilityfactory/AbilityFactory.java svneol=native#text/p
src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryChangeState.java -text svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryChangeState.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryCharm.java -text svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java svneol=native#text/plain

View File

@@ -901,7 +901,7 @@ public class MagicStack extends MyObservable {
if (!zone.is(Constant.Zone.Battlefield) || !c.isCreature()) {
return;
}
if (CardFactoryUtil.canTarget(source, c)) {
if (c.canTarget(haunterDiesWork)) {
haunterDiesWork.setTargetCard(c);
MagicStack.this.add(haunterDiesWork);
this.stop();

View File

@@ -2543,7 +2543,7 @@ public class Upkeep implements java.io.Serializable {
@Override
public void selectCard(final Card selectedCard, final PlayerZone z) {
if (z.is(Constant.Zone.Battlefield) && selectedCard.isCreature()
&& CardFactoryUtil.canTarget(c, selectedCard)) {
&& selectedCard.canTarget(switchTargets)) {
newTarget[0] = selectedCard;
final StringBuilder sb = new StringBuilder();
sb.append(c.getCloneOrigin()).append(

View File

@@ -10,7 +10,6 @@ import forge.Card;
import forge.CardList;
import forge.Constant.Zone;
import forge.Player;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilityActivated;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
@@ -190,7 +189,7 @@ public class AbilityFactoryChangeState {
for (final Card tgt : tgtCards) {
if (abilityFactory.getAbTgt() != null) {
if (!CardFactoryUtil.canTarget(abilityFactory.getHostCard(), tgt)) {
if (!tgt.canTarget(sa)) {
continue;
}
}

View File

@@ -1745,7 +1745,7 @@ public final class AbilityFactoryChangeZone {
if ((tgt != null) && origin.equals(Zone.Battlefield)) {
// check targeting
if (!CardFactoryUtil.canTarget(sa.getSourceCard(), tgtC)) {
if (!tgtC.canTarget(sa)) {
continue;
}
}

View File

@@ -712,7 +712,7 @@ public final class AbilityFactoryCombat {
}
for (final Card c : tgtCards) {
if ((tgt == null) || CardFactoryUtil.canTarget(sa, c)) {
if ((tgt == null) || c.canTarget(sa)) {
AllZone.getCombat().removeFromCombat(c);
}
}
@@ -997,7 +997,7 @@ public final class AbilityFactoryCombat {
}
for (final Card c : tgtCards) {
if ((tgt == null) || CardFactoryUtil.canTarget(sa, c)) {
if ((tgt == null) || c.canTarget(sa)) {
final Card attacker = cards.get(0);
c.addMustBlockCard(attacker);
System.out.println(c + " is adding " + attacker + " to mustBlockCards: " + c.getMustBlockCards());

View File

@@ -342,7 +342,7 @@ public final class AbilityFactoryCopy {
hostCard.clearClones();
for (final Card c : tgtCards) {
if ((tgt == null) || CardFactoryUtil.canTarget(hostCard, c)) {
if ((tgt == null) || c.canTarget(sa)) {
boolean wasInAlt = false;
if (c.isInAlternateState()) {
@@ -729,7 +729,7 @@ public final class AbilityFactoryCopy {
}
chosenSA.setActivatingPlayer(sa.getActivatingPlayer());
if ((tgt == null) || CardFactoryUtil.canTarget(card, chosenSA.getSourceCard())) {
if ((tgt == null)) {
for (int i = 0; i < amount; i++) {
AllZone.getCardFactory().copySpellontoStack(card, chosenSA.getSourceCard(), chosenSA, true);
}

View File

@@ -255,7 +255,7 @@ public class AbilityFactoryCounters {
list = list.filter(new CardListFilter() {
@Override
public boolean addCard(final Card c) {
return CardFactoryUtil.canTarget(source, c)
return c.canTarget(sa)
&& !c.hasKeyword("CARDNAME can't have counters placed on it.")
&& !(c.hasKeyword("CARDNAME can't have -1/-1 counters placed on it.") && type.equals("M1M1"));
}
@@ -408,7 +408,7 @@ public class AbilityFactoryCounters {
list = list.filter(new CardListFilter() {
@Override
public boolean addCard(final Card c) {
return CardFactoryUtil.canTarget(source, c);
return c.canTarget(sa);
}
});
@@ -673,7 +673,7 @@ public class AbilityFactoryCounters {
}
for (final Card tgtCard : tgtCards) {
if ((tgt == null) || CardFactoryUtil.canTarget(card, tgtCard)) {
if ((tgt == null) || tgtCard.canTarget(sa)) {
if (max != -1) {
counterAmount = max - tgtCard.getCounters(Counters.valueOf(type));
}
@@ -1045,7 +1045,7 @@ public class AbilityFactoryCounters {
}
for (final Card tgtCard : tgtCards) {
if ((tgt == null) || CardFactoryUtil.canTarget(card, tgtCard)) {
if ((tgt == null) || tgtCard.canTarget(sa)) {
final PlayerZone zone = AllZone.getZoneOf(tgtCard);
if (zone.is(Constant.Zone.Battlefield) || zone.is(Constant.Zone.Exile)) {

View File

@@ -773,7 +773,7 @@ public class AbilityFactoryDealDamage {
for (final Object o : tgts) {
if (o instanceof Card) {
final Card c = (Card) o;
if (AllZoneUtil.isCardInPlay(c) && (!targeted || CardFactoryUtil.canTarget(this.abilityFactory.getHostCard(), c))) {
if (AllZoneUtil.isCardInPlay(c) && (!targeted || c.canTarget(saMe))) {
if (noPrevention) {
c.addDamageWithoutPrevention(dmg, source);
} else {
@@ -1434,7 +1434,7 @@ public class AbilityFactoryDealDamage {
//System.out.println(source+" deals "+dmg+" damage to "+o.toString());
if (o instanceof Card) {
final Card c = (Card) o;
if (AllZoneUtil.isCardInPlay(c) && (!targeted || CardFactoryUtil.canTarget(this.abilityFactory.getHostCard(), c))) {
if (AllZoneUtil.isCardInPlay(c) && (!targeted || c.canTarget(sa))) {
c.addDamage(dmg, source);
}

View File

@@ -552,7 +552,7 @@ public final class AbilityFactoryDebuff {
for (final Card tgtC : tgtCards) {
final ArrayList<String> hadIntrinsic = new ArrayList<String>();
if (AllZoneUtil.isCardInPlay(tgtC) && CardFactoryUtil.canTarget(host, tgtC)) {
if (AllZoneUtil.isCardInPlay(tgtC) && tgtC.canTarget(sa)) {
for (final String kw : kws) {
if (tgtC.getIntrinsicKeyword().contains(kw)) {
hadIntrinsic.add(kw);
@@ -772,7 +772,7 @@ public final class AbilityFactoryDebuff {
for (final Card tgtC : list) {
final ArrayList<String> hadIntrinsic = new ArrayList<String>();
if (AllZoneUtil.isCardInPlay(tgtC) && CardFactoryUtil.canTarget(hostCard, tgtC)) {
if (AllZoneUtil.isCardInPlay(tgtC) && tgtC.canTarget(sa)) {
for (final String kw : kws) {
if (tgtC.getIntrinsicKeyword().contains(kw)) {
hadIntrinsic.add(kw);

View File

@@ -500,7 +500,7 @@ public class AbilityFactoryDestroy {
}
for (final Card tgtC : tgtCards) {
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || CardFactoryUtil.canTarget(card, tgtC))) {
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || tgtC.canTarget(sa))) {
if (sac) {
AllZone.getGameAction().sacrifice(tgtC);
} else if (noRegen) {

View File

@@ -285,7 +285,7 @@ public class AbilityFactoryGainControl {
public boolean addCard(final Card c) {
final Map<String, String> vars = c.getSVars();
return !vars.containsKey("RemAIDeck")
&& CardFactoryUtil.canTarget(AbilityFactoryGainControl.this.hostCard, c);
&& c.canTarget(sa);
}
});
@@ -388,7 +388,7 @@ public class AbilityFactoryGainControl {
this.hostCard.addGainControlTarget(tgtC);
}
if (AllZoneUtil.isCardInPlay(tgtC) && CardFactoryUtil.canTarget(this.hostCard, tgtC)) {
if (AllZoneUtil.isCardInPlay(tgtC) && tgtC.canTarget(sa)) {
if (this.params.containsKey("NewController")) {
tgtC.addController(newController.get(0));

View File

@@ -550,7 +550,7 @@ public class AbilityFactoryPermanentState {
for (final Card tgtC : tgtCards) {
if (AllZoneUtil.isCardInPlay(tgtC)
&& ((tgt == null) || CardFactoryUtil.canTarget(af.getHostCard(), tgtC))) {
&& ((tgt == null) || tgtC.canTarget(sa))) {
tgtC.untap();
}
}
@@ -1115,7 +1115,7 @@ public class AbilityFactoryPermanentState {
}
for (final Card tgtC : tgtCards) {
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || CardFactoryUtil.canTarget(af.getHostCard(), tgtC))) {
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || tgtC.canTarget(sa))) {
tgtC.tap();
}
}
@@ -2010,7 +2010,7 @@ public class AbilityFactoryPermanentState {
}
for (final Card tgtC : tgtCards) {
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || CardFactoryUtil.canTarget(af.getHostCard(), tgtC))) {
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || tgtC.canTarget(sa))) {
if (sa.getActivatingPlayer().isHuman()) {
final String[] tapOrUntap = new String[] { "Tap", "Untap" };
final Object z = GuiUtils.getChoiceOptional("Tap or Untap " + tgtC + "?", tapOrUntap);

View File

@@ -486,7 +486,7 @@ public class AbilityFactoryPreventDamage {
for (final Object o : tgts) {
if (o instanceof Card) {
final Card c = (Card) o;
if (AllZoneUtil.isCardInPlay(c) && (!targeted || CardFactoryUtil.canTarget(af.getHostCard(), c))) {
if (AllZoneUtil.isCardInPlay(c) && (!targeted || c.canTarget(sa))) {
c.addPreventNextDamage(numDam);
}

View File

@@ -204,7 +204,7 @@ public final class AbilityFactoryProtection {
list = list.filter(new CardListFilter() {
@Override
public boolean addCard(final Card c) {
if (!CardFactoryUtil.canTarget(hostCard, c)) {
if (!c.canTarget(sa)) {
return false;
}
@@ -719,7 +719,7 @@ public final class AbilityFactoryProtection {
}
// if this is a target, make sure we can still target now
if ((tgt != null) && !CardFactoryUtil.canTarget(host, tgtC)) {
if ((tgt != null) && !tgtC.canTarget(sa)) {
continue;
}

View File

@@ -228,7 +228,7 @@ public class AbilityFactoryPump {
* a int.
* @return a {@link forge.CardList} object.
*/
private CardList getPumpCreatures(final int defense, final int attack) {
private CardList getPumpCreatures(final int defense, final int attack, final SpellAbility sa) {
final boolean kHaste = this.keywords.contains("Haste");
final boolean evasive = (this.keywords.contains("Flying") || this.keywords.contains("Horsemanship")
@@ -245,7 +245,7 @@ public class AbilityFactoryPump {
list = list.filter(new CardListFilter() {
@Override
public boolean addCard(final Card c) {
if (!CardFactoryUtil.canTarget(AbilityFactoryPump.this.hostCard, c)) {
if (!c.canTarget(sa)) {
return false;
}
@@ -541,7 +541,7 @@ public class AbilityFactoryPump {
if (this.abilityFactory.isCurse()) {
list = this.getCurseCreatures(sa, defense, attack);
} else {
list = this.getPumpCreatures(defense, attack);
list = this.getPumpCreatures(defense, attack, sa);
}
list = list.getValidCards(tgt.getValidTgts(), sa.getActivatingPlayer(), sa.getSourceCard());
@@ -893,7 +893,7 @@ public class AbilityFactoryPump {
}
// if pump is a target, make sure we can still target now
if ((tgt != null) && !CardFactoryUtil.canTarget(this.abilityFactory.getHostCard(), tgtC)) {
if ((tgt != null) && !tgtC.canTarget(sa)) {
continue;
}

View File

@@ -460,7 +460,7 @@ public class AbilityFactoryRegenerate {
}
};
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || CardFactoryUtil.canTarget(hostCard, tgtC))) {
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || tgtC.canTarget(sa))) {
tgtC.addShield();
AllZone.getEndOfTurn().addUntil(untilEOT);
}

View File

@@ -999,7 +999,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
if (this.getTargetCard() != null) {
if (AllZoneUtil.isCardInPlay(this.getTargetCard())
&& CardFactoryUtil.canTarget(card, this.getTargetCard())) {
&& this.getTargetCard().canTarget(this)) {
this.getTargetCard().addDamage(damage, card);
}
} else {
@@ -1210,7 +1210,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
@Override
public void resolve() {
final Card target = this.getTargetCard();
if (AllZoneUtil.isCardInPlay(target) && CardFactoryUtil.canTarget(card, target)) {
if (AllZoneUtil.isCardInPlay(target) && target.canTarget(this)) {
target.addExtrinsicKeyword("This card doesn't untap during your next untap step.");
} // is card in play?
} // resolve()
@@ -1622,7 +1622,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
final Card myc = this.getParent().getTargetCard();
final Card oppc = this.getTargetCard();
if (AllZoneUtil.isCardInPlay(myc) && AllZoneUtil.isCardInPlay(oppc)) {
if (CardFactoryUtil.canTarget(card, myc) && CardFactoryUtil.canTarget(card, oppc)) {
if (myc.canTarget(this) && oppc.canTarget(this)) {
final int myPower = myc.getNetAttack();
final int oppPower = oppc.getNetAttack();
myc.addDamage(oppPower, oppc);

View File

@@ -133,7 +133,7 @@ class CardFactoryAuras {
final Card c = this.getTargetCard();
if (AllZoneUtil.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) {
if (AllZoneUtil.isCardInPlay(c) && c.canTarget(this)) {
card.enchantEntity(c);
}
@@ -289,7 +289,7 @@ class CardFactoryAuras {
CardListUtil.sortAttack(list);
for (int i = 0; i < list.size(); i++) {
if (CardFactoryUtil.canTarget(card, list.get(i))) {
if (list.get(i).canTarget(this)) {
this.setTargetCard(list.get(i));
return super.canPlayAI();
}
@@ -303,7 +303,7 @@ class CardFactoryAuras {
final Card c = this.getTargetCard();
if (AllZoneUtil.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) {
if (AllZoneUtil.isCardInPlay(c) && c.canTarget(this)) {
card.enchantEntity(c);
Log.debug("Enchanted: " + this.getTargetCard());
}
@@ -392,7 +392,7 @@ class CardFactoryAuras {
CardListUtil.sortFlying(list);
for (int i = 0; i < list.size(); i++) {
if (CardFactoryUtil.canTarget(card, list.get(i))
if (list.get(i).canTarget(this)
&& (list.get(i).getNetAttack() >= list.get(i).getNetDefense())
&& (list.get(i).getNetAttack() >= 3)) {
this.setTargetCard(list.get(i));
@@ -410,7 +410,7 @@ class CardFactoryAuras {
final Card c = this.getTargetCard();
if (AllZoneUtil.isCardInPlay(c) && CardFactoryUtil.canTarget(aura, c)) {
if (AllZoneUtil.isCardInPlay(c) && c.canTarget(this)) {
aura.enchantEntity(c);
}
} // resolve()

View File

@@ -201,7 +201,7 @@ public class CardFactoryCreatures {
if (c.sumAllCounters() == 0) {
return;
} else if (AllZoneUtil.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) {
} else if (AllZoneUtil.isCardInPlay(c) && c.canTarget(this)) {
// zerker clean up:
for (final Counters c1 : Counters.values()) {
if (c.getCounters(c1) > 0) {
@@ -723,7 +723,7 @@ public class CardFactoryCreatures {
return;
}
if (c.isLand() && zone.is(Constant.Zone.Battlefield) && CardFactoryUtil.canTarget(card, c)) {
if (c.isLand() && zone.is(Constant.Zone.Battlefield) && c.canTarget(ability)) {
// System.out.println("c is: " +c);
target[index[0]] = c;
index[0]++;

View File

@@ -395,7 +395,7 @@ public class CardFactoryInstants {
@Override
public void selectCard(final Card card, final PlayerZone zone) {
if (!card.isLand() && zone.is(Constant.Zone.Battlefield) && CardFactoryUtil.canTarget(spell, card)) {
if (!card.isLand() && zone.is(Constant.Zone.Battlefield) && card.canTarget(spell)) {
spell.setTargetCard(card);
if (this.isFree()) {
this.setFree(false);

View File

@@ -718,7 +718,7 @@ public class CardFactorySorceries {
@Override
public void resolve() {
if (AllZoneUtil.isCardInPlay(this.getTargetCard())
&& CardFactoryUtil.canTarget(card, this.getTargetCard())) {
&& this.getTargetCard().canTarget(this)) {
AllZone.getGameAction().destroy(this.getTargetCard());

View File

@@ -333,31 +333,6 @@ public class CardFactoryUtil {
return biggest;
}
/**
* <p>
* AI_getHumanArtifact.
* </p>
*
* @param spell
* a {@link forge.Card} object.
* @param targeted
* a boolean.
* @return a {@link forge.CardList} object.
*/
public static CardList getHumanArtifactAI(final Card spell, final boolean targeted) {
CardList artifact = AllZone.getHumanPlayer().getCardsIn(Zone.Battlefield);
artifact = artifact.getType("Artifact");
if (targeted) {
artifact = artifact.filter(new CardListFilter() {
@Override
public boolean addCard(final Card c) {
return CardFactoryUtil.canTarget(spell, c);
}
});
}
return artifact;
}
/**
* <p>
* AI_doesCreatureAttack.
@@ -1415,7 +1390,7 @@ public class CardFactoryUtil {
@Override
public void resolve() {
final Card targetCard = this.getTargetCard();
if (AllZoneUtil.isCardInPlay(targetCard) && CardFactoryUtil.canTarget(sourceCard, targetCard)) {
if (AllZoneUtil.isCardInPlay(targetCard) && targetCard.canTarget(this)) {
if (sourceCard.isEquipping()) {
final Card crd = sourceCard.getEquipping().get(0);
@@ -1852,7 +1827,7 @@ public class CardFactoryUtil {
@Override
public void selectCard(final Card card, final PlayerZone zone) {
if (targeted && !CardFactoryUtil.canTarget(spell, card)) {
if (targeted && !card.canTarget(spell)) {
AllZone.getDisplay().showMessage("Cannot target this card (Shroud? Protection?).");
} else if (choices.contains(card)) {
spell.setTargetCard(card);
@@ -2092,7 +2067,7 @@ public class CardFactoryUtil {
@Override
public void selectCard(final Card card2, final PlayerZone zone) {
if (card2.isCreature() && card2.isArtifact() && zone.is(Constant.Zone.Battlefield)
&& CardFactoryUtil.canTarget(ability, card)) {
&& card.canTarget(ability)) {
ability.setTargetCard(card2);
ability.setStackDescription("Put " + card.getCounters(Counters.P1P1) + " +1/+1 counter/s from "
+ card + " on " + card2);
@@ -2392,7 +2367,7 @@ public class CardFactoryUtil {
}
// Make sure it's still targetable as well
return CardFactoryUtil.canTarget(source, target);
return target.canTarget(ability);
}
/**
@@ -2406,9 +2381,9 @@ public class CardFactoryUtil {
* a {@link forge.Card} object.
* @return a boolean.
*/
public static boolean canTarget(final SpellAbility ability, final Card target) {
return CardFactoryUtil.canTarget(ability.getSourceCard(), target);
}
/*public static boolean canTarget(final SpellAbility ability, final Card target) {
return target.canTarget(ability);
}*/
/**
* <p>

View File

@@ -13,7 +13,6 @@ import forge.Constant;
import forge.Constant.Zone;
import forge.Player;
import forge.PlayerZone;
import forge.card.cardfactory.CardFactoryUtil;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
@@ -337,7 +336,7 @@ public class TargetSelection {
public void selectCard(final Card card, final PlayerZone zone) {
// leave this in temporarily, there some seriously wrong things
// going on here
if (targeted && !CardFactoryUtil.canTarget(sa, card)) {
if (targeted && !card.canTarget(sa)) {
AllZone.getDisplay().showMessage("Cannot target this card (Shroud? Protection? Restrictions?).");
} else if (choices.contains(card)) {
tgt.addTarget(card);

View File

@@ -11,21 +11,6 @@ import forge.card.spellability.SpellAbility;
*/
public class StaticAbilityCantTarget {
/**
* TODO Write javadoc for this method.
*
* @param stAb
* a StaticAbility
* @param source
* the source
* @param target
* the target
* @param damage
* the damage
* @param isCombat
* the is combat
* @return the int
*/
public static boolean applyCantTargetAbility(final StaticAbility stAb, final Card card, SpellAbility sa) {
final HashMap<String, String> params = stAb.getMapParams();
final Card hostCard = stAb.getHostCard();