From f3d5faf1992578259174486b5d3919f3c72c9dd5 Mon Sep 17 00:00:00 2001 From: Steven Knipe Date: Thu, 16 Nov 2023 14:37:38 -0800 Subject: [PATCH] Convert AlternativeSourceCostsImpl keywords to using the costs tag system --- .../condition/common/DashedCondition.java | 8 +----- .../condition/common/EvokedCondition.java | 10 ++----- .../common/ProwlCostWasPaidCondition.java | 14 ++-------- .../costs/AlternativeSourceCostsImpl.java | 27 +++++++------------ .../mage/abilities/keyword/DashAbility.java | 3 +++ .../mage/abilities/keyword/EvokeAbility.java | 4 +++ .../mage/abilities/keyword/ProwlAbility.java | 4 +++ 7 files changed, 26 insertions(+), 44 deletions(-) diff --git a/Mage/src/main/java/mage/abilities/condition/common/DashedCondition.java b/Mage/src/main/java/mage/abilities/condition/common/DashedCondition.java index 553aef07dd4..9f6567e3631 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/DashedCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/DashedCondition.java @@ -3,7 +3,6 @@ package mage.abilities.condition.common; import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.abilities.keyword.DashAbility; -import mage.cards.Card; import mage.game.Game; import mage.util.CardUtil; @@ -15,11 +14,6 @@ public enum DashedCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - Card card = game.getCard(source.getSourceId()); - return card != null - && CardUtil.castStream(card - .getAbilities(game) - .stream(), DashAbility.class) - .anyMatch(ability -> ability.isActivated(source, game)); + return CardUtil.checkSourceCostsTagExists(game, source, DashAbility.getActivationKey()); } } diff --git a/Mage/src/main/java/mage/abilities/condition/common/EvokedCondition.java b/Mage/src/main/java/mage/abilities/condition/common/EvokedCondition.java index 99fa5c3eaab..fda6bed36b4 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/EvokedCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/EvokedCondition.java @@ -5,8 +5,8 @@ package mage.abilities.condition.common; import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.abilities.keyword.EvokeAbility; -import mage.cards.Card; import mage.game.Game; +import mage.util.CardUtil; /** * Checks if a the spell was cast with the alternate evoke costs @@ -20,12 +20,6 @@ public enum EvokedCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - Card card = game.getCard(source.getSourceId()); - if (card != null) { - return card.getAbilities(game).stream() - .filter(EvokeAbility.class::isInstance) - .anyMatch(evoke -> ((EvokeAbility) evoke).isActivated(source, game)); - } - return false; + return CardUtil.checkSourceCostsTagExists(game, source, EvokeAbility.getActivationKey()); } } diff --git a/Mage/src/main/java/mage/abilities/condition/common/ProwlCostWasPaidCondition.java b/Mage/src/main/java/mage/abilities/condition/common/ProwlCostWasPaidCondition.java index 9060d681514..640daa6d727 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/ProwlCostWasPaidCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/ProwlCostWasPaidCondition.java @@ -3,8 +3,8 @@ package mage.abilities.condition.common; import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.abilities.keyword.ProwlAbility; -import mage.cards.Card; import mage.game.Game; +import mage.util.CardUtil; /** * Checks if a the spell was cast with the alternate prowl costs @@ -17,17 +17,7 @@ public enum ProwlCostWasPaidCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - Card card = game.getCard(source.getSourceId()); - if (card != null) { - for (Ability ability : card.getAbilities(game)) { - if (ability instanceof ProwlAbility) { - if (((ProwlAbility) ability).isActivated(source, game)) { - return true; - } - } - } - } - return false; + return CardUtil.checkSourceCostsTagExists(game, source, ProwlAbility.getActivationKey()); } @Override diff --git a/Mage/src/main/java/mage/abilities/costs/AlternativeSourceCostsImpl.java b/Mage/src/main/java/mage/abilities/costs/AlternativeSourceCostsImpl.java index 10db860b8f7..13c06b8720e 100644 --- a/Mage/src/main/java/mage/abilities/costs/AlternativeSourceCostsImpl.java +++ b/Mage/src/main/java/mage/abilities/costs/AlternativeSourceCostsImpl.java @@ -5,11 +5,11 @@ import mage.abilities.SpellAbility; import mage.abilities.StaticAbility; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.cards.Card; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.players.Player; +import mage.util.CardUtil; import java.util.Iterator; @@ -20,7 +20,10 @@ public abstract class AlternativeSourceCostsImpl extends StaticAbility implement protected final AlternativeCost alternativeCost; protected final String reminderText; - private int zoneChangeCounter = 0; + protected final String activationKey; + protected static String getActivationKey(String name){ + return name+"ActivationKey"; + } protected AlternativeSourceCostsImpl(String name, String reminderText, String manaString) { this(name, reminderText, new ManaCostsImpl<>(manaString)); @@ -31,13 +34,14 @@ public abstract class AlternativeSourceCostsImpl extends StaticAbility implement this.name = name; this.reminderText = reminderText; this.alternativeCost = new AlternativeCostImpl<>(name, reminderText, cost); + this.activationKey = getActivationKey(name); } protected AlternativeSourceCostsImpl(final AlternativeSourceCostsImpl ability) { super(ability); this.alternativeCost = ability.alternativeCost.copy(); this.reminderText = ability.reminderText; - this.zoneChangeCounter = ability.zoneChangeCounter; + this.activationKey = ability.activationKey; } @Override @@ -58,15 +62,9 @@ public abstract class AlternativeSourceCostsImpl extends StaticAbility implement || !player.chooseUse(Outcome.Benefit, "Cast this for its " + this.name + " cost? (" + alternativeCost.getText(true) + ')', ability, game)) { return false; } + ability.setCostsTag(activationKey, null); alternativeCost.activate(); - if (zoneChangeCounter == 0) { - Card card = game.getCard(getSourceId()); - if (card != null) { - zoneChangeCounter = card.getZoneChangeCounter(game); - } else { - throw new IllegalArgumentException("source card not found"); - } - } + ability.clearManaCostsToPay(); ability.clearCosts(); for (Iterator it = ((Costs) alternativeCost).iterator(); it.hasNext(); ) { @@ -82,11 +80,7 @@ public abstract class AlternativeSourceCostsImpl extends StaticAbility implement @Override public boolean isActivated(Ability ability, Game game) { - Card card = game.getCard(sourceId); - if (card != null && card.getZoneChangeCounter(game) <= zoneChangeCounter + 1) { - return alternativeCost.isActivated(game); - } - return false; + return CardUtil.checkSourceCostsTagExists(game, ability, activationKey); } @Override @@ -102,7 +96,6 @@ public abstract class AlternativeSourceCostsImpl extends StaticAbility implement @Override public void resetCost() { alternativeCost.reset(); - this.zoneChangeCounter = 0; } @Override diff --git a/Mage/src/main/java/mage/abilities/keyword/DashAbility.java b/Mage/src/main/java/mage/abilities/keyword/DashAbility.java index a7527cf57e3..b325aab6244 100644 --- a/Mage/src/main/java/mage/abilities/keyword/DashAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/DashAbility.java @@ -41,6 +41,9 @@ public class DashAbility extends AlternativeSourceCostsImpl { public DashAbility copy() { return new DashAbility(this); } + public static String getActivationKey(){ + return getActivationKey(KEYWORD); + } } class DashAddDelayedTriggeredAbilityEffect extends OneShotEffect { diff --git a/Mage/src/main/java/mage/abilities/keyword/EvokeAbility.java b/Mage/src/main/java/mage/abilities/keyword/EvokeAbility.java index 805cd1e950a..be32bb39a97 100644 --- a/Mage/src/main/java/mage/abilities/keyword/EvokeAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/EvokeAbility.java @@ -39,4 +39,8 @@ public class EvokeAbility extends AlternativeSourceCostsImpl { public EvokeAbility copy() { return new EvokeAbility(this); } + + public static String getActivationKey(){ + return getActivationKey(EVOKE_KEYWORD); + } } diff --git a/Mage/src/main/java/mage/abilities/keyword/ProwlAbility.java b/Mage/src/main/java/mage/abilities/keyword/ProwlAbility.java index 7973850eeea..6f07461b717 100644 --- a/Mage/src/main/java/mage/abilities/keyword/ProwlAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/ProwlAbility.java @@ -46,4 +46,8 @@ public class ProwlAbility extends AlternativeSourceCostsImpl { public boolean isAvailable(Ability source, Game game) { return ProwlCondition.instance.apply(game, source); } + + public static String getActivationKey(){ + return getActivationKey(PROWL_KEYWORD); + } }