diff --git a/Mage.Sets/src/mage/cards/s/SimicManipulator.java b/Mage.Sets/src/mage/cards/s/SimicManipulator.java index decbf8fc60e..40675ce879e 100644 --- a/Mage.Sets/src/mage/cards/s/SimicManipulator.java +++ b/Mage.Sets/src/mage/cards/s/SimicManipulator.java @@ -30,26 +30,20 @@ package mage.cards.s; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.Mode; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.Cost; import mage.abilities.costs.common.RemoveVariableCountersSourceCost; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.abilities.keyword.EvolveAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; +import mage.constants.TargetAdjustment; import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; import mage.target.common.TargetCreaturePermanent; /** @@ -69,7 +63,7 @@ public class SimicManipulator extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power less than or equal to the number of +1/+1 counters removed this way"); public SimicManipulator(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); this.subtype.add(SubType.MUTANT); this.subtype.add(SubType.WIZARD); @@ -80,11 +74,10 @@ public class SimicManipulator extends CardImpl { this.addAbility(new EvolveAbility()); // {T}, Remove one or more +1/+1 counters from Simic Manipulator: Gain control of target creature with power less than or equal to the number of +1/+1 counters removed this way. - // TODO: Improve targeting, that only valid targets (power <= removed counters) can be choosen - // Disadvantage now is, that a creature can be targeted that couldn't be targeted by rules. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SimicManipulatorGainControlTargetEffect(Duration.Custom), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainControlTargetEffect(Duration.Custom, true), new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent(filter)); ability.addCost(new RemoveVariableCountersSourceCost(CounterType.P1P1.createInstance(), 1, "Remove one or more +1/+1 counters from {this}")); + ability.setTargetAdjustment(TargetAdjustment.SIMIC_MANIPULATOR); this.addAbility(ability); } @@ -97,53 +90,3 @@ public class SimicManipulator extends CardImpl { return new SimicManipulator(this); } } - -class SimicManipulatorGainControlTargetEffect extends ContinuousEffectImpl { - - private boolean valid; - - public SimicManipulatorGainControlTargetEffect(Duration duration) { - super(duration, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); - } - - public SimicManipulatorGainControlTargetEffect(final SimicManipulatorGainControlTargetEffect effect) { - super(effect); - this.valid = effect.valid; - } - - @Override - public void init(Ability source, Game game) { - Permanent permanent = game.getPermanent(source.getFirstTarget()); - if (permanent != null) { - int maxPower = 0; - for (Cost cost : source.getCosts()) { - if (cost instanceof RemoveVariableCountersSourceCost) { - maxPower = ((RemoveVariableCountersSourceCost) cost).getAmount(); - break; - } - } - if (permanent.getPower().getValue() <= maxPower) { - valid = true; - } - } - } - - @Override - public SimicManipulatorGainControlTargetEffect copy() { - return new SimicManipulatorGainControlTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getFirstTarget()); - if (permanent != null && valid) { - return permanent.changeControllerId(source.getControllerId(), game); - } - return false; - } - - @Override - public String getText(Mode mode) { - return "Gain control of target " + mode.getTargets().get(0).getTargetName() + ' ' + duration.toString(); - } -} diff --git a/Mage/src/main/java/mage/cards/CardImpl.java b/Mage/src/main/java/mage/cards/CardImpl.java index 0e045b21538..22361e38d8d 100644 --- a/Mage/src/main/java/mage/cards/CardImpl.java +++ b/Mage/src/main/java/mage/cards/CardImpl.java @@ -37,6 +37,8 @@ import mage.MageObjectImpl; import mage.Mana; import mage.ObjectColor; import mage.abilities.*; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.RemoveVariableCountersTargetCost; import mage.abilities.effects.common.NameACardEffect; import mage.abilities.mana.ActivatedManaAbilityImpl; import mage.cards.repository.PluginClassloaderRegistery; @@ -417,6 +419,19 @@ public abstract class CardImpl extends MageObjectImpl implements Card { ability.getTargets().add(new TargetCreaturePermanent(filter2)); } break; + case SIMIC_MANIPULATOR: //Simic Manipulator only + xValue = 0; + for (Cost cost : ability.getCosts()) { + if (cost instanceof RemoveVariableCountersTargetCost) { + xValue = ((RemoveVariableCountersTargetCost) cost).getAmount(); + break; + } + } + ability.getTargets().clear(); + FilterCreaturePermanent newFilter = new FilterCreaturePermanent("creature with power less than or equal to " + xValue); + newFilter.add(new PowerPredicate(ComparisonType.FEWER_THAN, xValue + 1)); + ability.addTarget(new TargetCreaturePermanent(newFilter)); + break; } } diff --git a/Mage/src/main/java/mage/constants/TargetAdjustment.java b/Mage/src/main/java/mage/constants/TargetAdjustment.java index 0eb07153af5..d6f3ab0469d 100644 --- a/Mage/src/main/java/mage/constants/TargetAdjustment.java +++ b/Mage/src/main/java/mage/constants/TargetAdjustment.java @@ -12,5 +12,6 @@ public enum TargetAdjustment { X_POWER_LEQ, CHOSEN_NAME, CHOSEN_COLOR, VERSE_COUNTER_TARGETS, - TREASURE_COUNTER_POWER + TREASURE_COUNTER_POWER, + SIMIC_MANIPULATOR }