From 79d4c07d20f5b64cf9e1b7f081dc256b469ba7a1 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sat, 14 Oct 2017 08:42:13 -0400 Subject: [PATCH] updated how Withering Wisps and limited use activated abilities are implemented --- .../src/mage/cards/w/WitheringWisps.java | 54 ++++--------------- .../mage/abilities/ActivatedAbilityImpl.java | 16 ++++-- 2 files changed, 21 insertions(+), 49 deletions(-) diff --git a/Mage.Sets/src/mage/cards/w/WitheringWisps.java b/Mage.Sets/src/mage/cards/w/WitheringWisps.java index e59ec2c7a0..016f2091e0 100644 --- a/Mage.Sets/src/mage/cards/w/WitheringWisps.java +++ b/Mage.Sets/src/mage/cards/w/WitheringWisps.java @@ -31,7 +31,6 @@ import java.util.UUID; import mage.abilities.ActivatedAbilityImpl; import mage.abilities.TriggeredAbility; import mage.abilities.common.OnEventTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.common.CreatureCountCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalTriggeredAbility; @@ -50,7 +49,6 @@ import mage.filter.FilterPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.mageobject.SupertypePredicate; import mage.filter.predicate.permanent.ControllerPredicate; -import mage.util.CardUtil; /** * @@ -61,7 +59,7 @@ public class WitheringWisps extends CardImpl { private static final String ruleText = "At the beginning of the end step, if no creatures are on the battlefield, sacrifice {this}."; public WitheringWisps(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{B}"); // At the beginning of the end step, if no creatures are on the battlefield, sacrifice Withering Wisps. TriggeredAbility triggered = new OnEventTriggeredAbility(GameEvent.EventType.END_TURN_STEP_PRE, "beginning of the end step", true, new SacrificeSourceEffect()); @@ -83,63 +81,31 @@ public class WitheringWisps extends CardImpl { class WitheringWispsActivatedAbility extends ActivatedAbilityImpl { - static class ActivationInfo { + private static final FilterPermanent filter = new FilterPermanent("snow Swamps you control"); - public int turnNum; - public int activationCounter; - - public ActivationInfo(int turnNum, int activationCounter) { - this.turnNum = turnNum; - this.activationCounter = activationCounter; - } - } - - private static final FilterPermanent filter = new FilterPermanent("snow lands you control"); - { + static { filter.add(new SupertypePredicate(SuperType.SNOW)); filter.add(new SubtypePredicate(SubType.SWAMP)); filter.add(new ControllerPredicate(TargetController.YOU)); } - - private int maxActivationsPerTurn(Game game) { + + @Override + public int getMaxActivationsPerTurn(Game game) { return game.getBattlefield().getAllActivePermanents(filter, game).size(); } - + public WitheringWispsActivatedAbility() { super(Zone.BATTLEFIELD, new DamageEverythingEffect(1), new ManaCostsImpl("{B}")); - + } public WitheringWispsActivatedAbility(final WitheringWispsActivatedAbility ability) { super(ability); } - - protected boolean hasMoreActivationsThisTurn(Game game) { - if (this.maxActivationsPerTurn(game) > 0) { - ActivationInfo activationInfo = getActivationInfo(game); - return activationInfo == null || activationInfo.turnNum != game.getTurnNum() || activationInfo.activationCounter < this.maxActivationsPerTurn(game); - } - return false; - } - - private ActivationInfo getActivationInfo(Game game) { - Integer turnNum = (Integer) game.getState().getValue(CardUtil.getCardZoneString("activationsTurn" + originalId, sourceId, game)); - Integer activationCount = (Integer) game.getState().getValue(CardUtil.getCardZoneString("activationsCount" + originalId, sourceId, game)); - if (turnNum == null || activationCount == null) { - return null; - } - return new ActivationInfo(turnNum, activationCount); - } - - @Override - public boolean resolve(Game game) { - return super.resolve(game); - } - + @Override public String getRule() { - StringBuilder sb = new StringBuilder(super.getRule()).append(" Activate this ability no more times each turn than the number of snow Swamps you control."); - return sb.toString(); + return super.getRule() + " Activate this ability no more times each turn than the number of snow Swamps you control."; } @Override diff --git a/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java b/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java index cb8d83d483..0c63d4595b 100644 --- a/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java @@ -54,7 +54,7 @@ import mage.util.CardUtil; */ public abstract class ActivatedAbilityImpl extends AbilityImpl implements ActivatedAbility { - static class ActivationInfo { + protected static class ActivationInfo { public int turnNum; public int activationCounter; @@ -276,11 +276,13 @@ public abstract class ActivatedAbilityImpl extends AbilityImpl implements Activa } protected boolean hasMoreActivationsThisTurn(Game game) { - if (maxActivationsPerTurn == Integer.MAX_VALUE) { + if (getMaxActivationsPerTurn(game) == Integer.MAX_VALUE) { return true; } ActivationInfo activationInfo = getActivationInfo(game); - return activationInfo == null || activationInfo.turnNum != game.getTurnNum() || activationInfo.activationCounter < maxActivationsPerTurn; + return activationInfo == null + || activationInfo.turnNum != game.getTurnNum() + || activationInfo.activationCounter < getMaxActivationsPerTurn(game); } @Override @@ -307,7 +309,11 @@ public abstract class ActivatedAbilityImpl extends AbilityImpl implements Activa this.maxActivationsPerTurn = maxActivationsPerTurn; } - private ActivationInfo getActivationInfo(Game game) { + public int getMaxActivationsPerTurn(Game game) { + return maxActivationsPerTurn; + } + + protected ActivationInfo getActivationInfo(Game game) { Integer turnNum = (Integer) game.getState().getValue(CardUtil.getCardZoneString("activationsTurn" + originalId, sourceId, game)); Integer activationCount = (Integer) game.getState().getValue(CardUtil.getCardZoneString("activationsCount" + originalId, sourceId, game)); if (turnNum == null || activationCount == null) { @@ -316,7 +322,7 @@ public abstract class ActivatedAbilityImpl extends AbilityImpl implements Activa return new ActivationInfo(turnNum, activationCount); } - private void setActivationInfo(ActivationInfo activationInfo, Game game) { + protected void setActivationInfo(ActivationInfo activationInfo, Game game) { game.getState().setValue(CardUtil.getCardZoneString("activationsTurn" + originalId, sourceId, game), activationInfo.turnNum); game.getState().setValue(CardUtil.getCardZoneString("activationsCount" + originalId, sourceId, game), activationInfo.activationCounter); }