moved some target choices to CardImpl, they should be properly copiable now

This commit is contained in:
Evan Kranzler 2017-09-19 12:43:52 -04:00
parent 96a3f40891
commit e2a1fa50ea
15 changed files with 163 additions and 120 deletions

View file

@ -72,14 +72,14 @@ public class AlexiZephyrMage extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) {
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter();
ability.getTargets().clear(); // ability.getTargets().clear();
ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2)); // ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2));
} // }
} // }
public AlexiZephyrMage(final AlexiZephyrMage card) { public AlexiZephyrMage(final AlexiZephyrMage card) {
super(card); super(card);

View file

@ -65,14 +65,14 @@ public class CandelabraOfTawnos extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) {
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter();
ability.getTargets().clear(); // ability.getTargets().clear();
ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2)); // ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2));
} // }
} // }
public CandelabraOfTawnos(final CandelabraOfTawnos card) { public CandelabraOfTawnos(final CandelabraOfTawnos card) {
super(card); super(card);

View file

@ -37,6 +37,7 @@ import mage.abilities.effects.common.NameACardEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.TargetAdjustment;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterSpell; import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.NamePredicate; import mage.filter.predicate.mageobject.NamePredicate;
@ -49,11 +50,10 @@ import mage.target.TargetSpell;
*/ */
public class DeclarationOfNaught extends CardImpl { public class DeclarationOfNaught extends CardImpl {
private final UUID originalId;
static final private FilterSpell filter = new FilterSpell("spell with the chosen name"); static final private FilterSpell filter = new FilterSpell("spell with the chosen name");
public DeclarationOfNaught(UUID ownerId, CardSetInfo setInfo) { public DeclarationOfNaught(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}{U}");
// As Declaration of Naught enters the battlefield, name a card. // As Declaration of Naught enters the battlefield, name a card.
this.addAbility(new AsEntersBattlefieldAbility(new NameACardEffect(NameACardEffect.TypeOfName.ALL))); this.addAbility(new AsEntersBattlefieldAbility(new NameACardEffect(NameACardEffect.TypeOfName.ALL)));
@ -61,15 +61,15 @@ public class DeclarationOfNaught extends CardImpl {
//TODO: Make ability properly copiable //TODO: Make ability properly copiable
// {U}: Counter target spell with the chosen name. // {U}: Counter target spell with the chosen name.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterTargetEffect(), new ManaCostsImpl("{U}")); SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterTargetEffect(), new ManaCostsImpl("{U}"));
ability.setTargetAdjustment(TargetAdjustment.CHOSEN_NAME);
ability.addTarget(new TargetSpell(filter)); ability.addTarget(new TargetSpell(filter));
originalId = ability.getOriginalId();
this.addAbility(ability); this.addAbility(ability);
} }
@Override @Override
public void adjustTargets(Ability ability, Game game) { public void adjustTargets(Ability ability, Game game) {
if (ability.getOriginalId().equals(originalId)) { if (ability.getTargetAdjustment() == TargetAdjustment.CHOSEN_NAME) {
ability.getTargets().clear(); ability.getTargets().clear();
FilterSpell filter2 = new FilterSpell("spell with the chosen name"); FilterSpell filter2 = new FilterSpell("spell with the chosen name");
filter2.add(new NamePredicate((String) game.getState().getValue(ability.getSourceId().toString() + NameACardEffect.INFO_KEY))); filter2.add(new NamePredicate((String) game.getState().getValue(ability.getSourceId().toString() + NameACardEffect.INFO_KEY)));
@ -80,7 +80,6 @@ public class DeclarationOfNaught extends CardImpl {
public DeclarationOfNaught(final DeclarationOfNaught card) { public DeclarationOfNaught(final DeclarationOfNaught card) {
super(card); super(card);
this.originalId = card.originalId;
} }
@Override @Override

View file

@ -74,16 +74,16 @@ public class DeepfireElemental extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) {
int xValue = ability.getManaCostsToPay().getX(); // int xValue = ability.getManaCostsToPay().getX();
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter().copy(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter().copy();
filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue)); // filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue));
ability.getTargets().clear(); // ability.getTargets().clear();
ability.getTargets().add(new TargetPermanent(filter2)); // ability.getTargets().add(new TargetPermanent(filter2));
} // }
} // }
public DeepfireElemental(final DeepfireElemental card) { public DeepfireElemental(final DeepfireElemental card) {
super(card); super(card);

View file

@ -63,14 +63,14 @@ public class FloodwaterDam extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) {
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter();
ability.getTargets().clear(); // ability.getTargets().clear();
ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2)); // ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2));
} // }
} // }
public FloodwaterDam(final FloodwaterDam card) { public FloodwaterDam(final FloodwaterDam card) {
super(card); super(card);

View file

@ -75,19 +75,19 @@ public class GorillaShaman extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) {
int xValue = ability.getManaCostsToPay().getX(); // int xValue = ability.getManaCostsToPay().getX();
TargetPermanent oldTarget = (TargetPermanent) ability.getTargets().get(0); // TargetPermanent oldTarget = (TargetPermanent) ability.getTargets().get(0);
int minTargets = oldTarget.getMinNumberOfTargets(); // int minTargets = oldTarget.getMinNumberOfTargets();
int maxTargets = oldTarget.getMaxNumberOfTargets(); // int maxTargets = oldTarget.getMaxNumberOfTargets();
FilterPermanent filter2 = oldTarget.getFilter().copy(); // FilterPermanent filter2 = oldTarget.getFilter().copy();
filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue)); // filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue));
ability.getTargets().clear(); // ability.getTargets().clear();
ability.getTargets().add(new TargetPermanent(minTargets, maxTargets, filter2, false)); // ability.getTargets().add(new TargetPermanent(minTargets, maxTargets, filter2, false));
} // }
} // }
public GorillaShaman(final GorillaShaman card) { public GorillaShaman(final GorillaShaman card) {
super(card); super(card);

View file

@ -74,16 +74,16 @@ public class HearthKami extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) {
int xValue = ability.getManaCostsToPay().getX(); // int xValue = ability.getManaCostsToPay().getX();
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter().copy(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter().copy();
filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue)); // filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue));
ability.getTargets().clear(); // ability.getTargets().clear();
ability.getTargets().add(new TargetPermanent(filter2)); // ability.getTargets().add(new TargetPermanent(filter2));
} // }
} // }
public HearthKami(final HearthKami card) { public HearthKami(final HearthKami card) {
super(card); super(card);

View file

@ -97,16 +97,16 @@ public class LinessaZephyrMage extends CardImpl {
super(card); super(card);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) {
int xValue = ability.getManaCostsToPay().getX(); // int xValue = ability.getManaCostsToPay().getX();
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter().copy(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter().copy();
filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue)); // filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue));
ability.getTargets().clear(); // ability.getTargets().clear();
ability.getTargets().add(new TargetPermanent(filter2)); // ability.getTargets().add(new TargetPermanent(filter2));
} // }
} // }
@Override @Override
public LinessaZephyrMage copy() { public LinessaZephyrMage copy() {

View file

@ -71,14 +71,14 @@ public class MagusOfTheCandelabra extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) {
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter();
ability.getTargets().clear(); // ability.getTargets().clear();
ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2)); // ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2));
} // }
} // }
public MagusOfTheCandelabra(final MagusOfTheCandelabra card) { public MagusOfTheCandelabra(final MagusOfTheCandelabra card) {
super(card); super(card);

View file

@ -79,19 +79,19 @@ public class MinamoSightbender extends CardImpl {
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_POWER_LEQ) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_POWER_LEQ) {
int xValue = ability.getManaCostsToPay().getX(); // int xValue = ability.getManaCostsToPay().getX();
TargetPermanent oldTarget = (TargetPermanent) ability.getTargets().get(0); // TargetPermanent oldTarget = (TargetPermanent) ability.getTargets().get(0);
int minTargets = oldTarget.getMinNumberOfTargets(); // int minTargets = oldTarget.getMinNumberOfTargets();
int maxTargets = oldTarget.getMaxNumberOfTargets(); // int maxTargets = oldTarget.getMaxNumberOfTargets();
FilterPermanent filter2 = oldTarget.getFilter().copy(); // FilterPermanent filter2 = oldTarget.getFilter().copy();
filter2.add(new PowerPredicate(ComparisonType.FEWER_THAN, xValue + 1)); // filter2.add(new PowerPredicate(ComparisonType.FEWER_THAN, xValue + 1));
ability.getTargets().clear(); // ability.getTargets().clear();
ability.getTargets().add(new TargetPermanent(minTargets, maxTargets, filter2, false)); // ability.getTargets().add(new TargetPermanent(minTargets, maxTargets, filter2, false));
} // }
} // }
public MinamoSightbender(final MinamoSightbender card) { public MinamoSightbender(final MinamoSightbender card) {
super(card); super(card);

View file

@ -63,14 +63,14 @@ public class MishrasHelix extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) {
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter();
ability.getTargets().clear(); // ability.getTargets().clear();
ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2)); // ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2));
} // }
} // }
public MishrasHelix(final MishrasHelix card) { public MishrasHelix(final MishrasHelix card) {
super(card); super(card);

View file

@ -76,16 +76,16 @@ public class Plaguebearer extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_CMC_EQUAL_PERM) {
int xValue = ability.getManaCostsToPay().getX(); // int xValue = ability.getManaCostsToPay().getX();
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter().copy(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter().copy();
filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue)); // filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue));
ability.getTargets().clear(); // ability.getTargets().clear();
ability.getTargets().add(new TargetPermanent(filter2)); // ability.getTargets().add(new TargetPermanent(filter2));
} // }
} // }
public Plaguebearer(final Plaguebearer card) { public Plaguebearer(final Plaguebearer card) {
super(card); super(card);

View file

@ -88,14 +88,14 @@ public class SynodArtificer extends CardImpl {
this.addAbility(untapAbility); this.addAbility(untapAbility);
} }
@Override // @Override
public void adjustTargets(Ability ability, Game game) { // public void adjustTargets(Ability ability, Game game) {
if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) { // if (ability.getTargetAdjustment() == TargetAdjustment.X_TARGETS) {
FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter(); // FilterPermanent filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter();
ability.getTargets().clear(); // ability.getTargets().clear();
ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2)); // ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter2));
} // }
} // }
public SynodArtificer(final SynodArtificer card) { public SynodArtificer(final SynodArtificer card) {
super(card); super(card);

View file

@ -42,12 +42,16 @@ import mage.cards.repository.PluginClassloaderRegistery;
import mage.constants.*; import mage.constants.*;
import mage.counters.Counter; import mage.counters.Counter;
import mage.counters.Counters; import mage.counters.Counters;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.ConvertedManaCostPredicate;
import mage.filter.predicate.mageobject.PowerPredicate;
import mage.game.*; import mage.game.*;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent; import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.stack.Spell; import mage.game.stack.Spell;
import mage.game.stack.StackObject; import mage.game.stack.StackObject;
import mage.target.TargetPermanent;
import mage.util.GameLog; import mage.util.GameLog;
import mage.util.SubTypeList; import mage.util.SubTypeList;
import mage.watchers.Watcher; import mage.watchers.Watcher;
@ -317,6 +321,46 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
return spellAbility; return spellAbility;
} }
// @Override
// public void adjustCosts(Ability ability, Game game) {
// }
@Override
public void adjustTargets(Ability ability, Game game) {
int xValue;
TargetPermanent oldTargetPermanent;
int minTargets;
int maxTargets;
switch (ability.getTargetAdjustment()) {
case NONE:
break;
case X_CMC_EQUAL_PERM:
xValue = ability.getManaCostsToPay().getX();
oldTargetPermanent = (TargetPermanent) ability.getTargets().get(0);
minTargets = oldTargetPermanent.getMinNumberOfTargets();
maxTargets = oldTargetPermanent.getMaxNumberOfTargets();
FilterPermanent filter2 = oldTargetPermanent.getFilter().copy();
filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue));
ability.getTargets().clear();
ability.getTargets().add(new TargetPermanent(minTargets, maxTargets, filter2, false));
break;
case X_POWER_LEQ:
xValue = ability.getManaCostsToPay().getX();
oldTargetPermanent = (TargetPermanent) ability.getTargets().get(0);
minTargets = oldTargetPermanent.getMinNumberOfTargets();
maxTargets = oldTargetPermanent.getMaxNumberOfTargets();
filter2 = oldTargetPermanent.getFilter().copy();
filter2.add(new PowerPredicate(ComparisonType.FEWER_THAN, xValue + 1));
ability.getTargets().clear();
ability.getTargets().add(new TargetPermanent(minTargets, maxTargets, filter2, false));
break;
case X_TARGETS:
xValue = ability.getManaCostsToPay().getX();
filter2 = ((TargetPermanent) ability.getTargets().get(0)).getFilter();
ability.getTargets().clear();
ability.addTarget(new TargetPermanent(xValue, filter2));
}
}
@Override @Override
public void setOwnerId(UUID ownerId) { public void setOwnerId(UUID ownerId) {
this.ownerId = ownerId; this.ownerId = ownerId;

View file

@ -6,5 +6,5 @@ package mage.constants;
*/ */
public enum TargetAdjustment { public enum TargetAdjustment {
NONE, X_TARGETS, X_CMC_EQUAL_PERM, GETH, DEFENDING_PLAYER, X_POWER_LEQ, NONE, X_TARGETS, X_CMC_EQUAL_PERM, GETH, DEFENDING_PLAYER, X_POWER_LEQ, CHOSEN_NAME
} }