reworked Heart-Piercer Manticore's reflexive triggered ability

This commit is contained in:
Evan Kranzler 2018-07-16 11:10:24 -04:00
parent 765ccf63a6
commit 57a5ee8f4e

View file

@ -1,27 +1,24 @@
package mage.cards.h;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.InfoEffect;
import mage.abilities.effects.common.SendOptionUsedEventEffect;
import mage.abilities.keyword.EmbalmAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.Target;
@ -41,13 +38,11 @@ public final class HeartPiercerManticore extends CardImpl {
this.power = new MageInt(4);
this.toughness = new MageInt(3);
// When Heart-Piercer Manticore enters the battlefield, you may sacrifice another creature.
Ability firstAbility = new EntersBattlefieldTriggeredAbility(new HeartPiercerManticoreSacrificeEffect(), true);
this.addAbility(firstAbility);
// When you do, Heart-Piercer Manticore deals damage equal to that creature's power to any target.
Ability secondAbility = new HeartPiercerManticoreSacrificeTriggeredAbility(firstAbility.getOriginalId());
secondAbility.addTarget(new TargetAnyTarget());
this.addAbility(secondAbility);
// When Heart-Piercer Manticore enters the battlefield, you may sacrifice another creature. When you do, Heart-Piercer Manticore deals damage equal to that creature's power to any target.
this.addAbility(new EntersBattlefieldTriggeredAbility(
new HeartPiercerManticoreSacrificeEffect(), true
));
// Embalm {5}{R}
this.addAbility(new EmbalmAbility(new ManaCostsImpl("{5}{R}"), this));
@ -67,7 +62,8 @@ class HeartPiercerManticoreSacrificeEffect extends OneShotEffect {
public HeartPiercerManticoreSacrificeEffect() {
super(Outcome.Damage);
this.staticText = "you may sacrifice another creature";
this.staticText = "sacrifice another creature. When you do, "
+ "{this} deals damage equal to that creature's power to any target";
}
public HeartPiercerManticoreSacrificeEffect(final HeartPiercerManticoreSacrificeEffect effect) {
@ -87,8 +83,11 @@ class HeartPiercerManticoreSacrificeEffect extends OneShotEffect {
if (controller.choose(outcome, target, source.getSourceId(), game)) {
Permanent toSacrifice = game.getPermanent(target.getFirstTarget());
if (toSacrifice != null) {
toSacrifice.sacrifice(source.getSourceId(), game);
return new SendOptionUsedEventEffect(toSacrifice.getPower().getValue()).apply(game, source);
DelayedTriggeredAbility trigger = new HeartPiercerManticoreReflexiveTriggeredAbility(toSacrifice.getPower().getValue());
if (toSacrifice.sacrifice(source.getSourceId(), game)) {
game.addDelayedTriggeredAbility(trigger, source);
return new SendOptionUsedEventEffect().apply(game, source);
}
}
}
return true;
@ -97,44 +96,36 @@ class HeartPiercerManticoreSacrificeEffect extends OneShotEffect {
}
}
class HeartPiercerManticoreSacrificeTriggeredAbility extends TriggeredAbilityImpl {
class HeartPiercerManticoreReflexiveTriggeredAbility extends DelayedTriggeredAbility {
private final UUID relatedTriggerdAbilityOriginalId;
public HeartPiercerManticoreSacrificeTriggeredAbility(UUID relatedTriggerdAbilityOriginalId) {
super(Zone.BATTLEFIELD, new InfoEffect("{this} deals damage equal to that creature's power to any target"));
this.relatedTriggerdAbilityOriginalId = relatedTriggerdAbilityOriginalId;
public HeartPiercerManticoreReflexiveTriggeredAbility(int damage) {
super(new DamageTargetEffect(damage), Duration.OneUse, true);
this.addTarget(new TargetAnyTarget());
}
public HeartPiercerManticoreSacrificeTriggeredAbility(final HeartPiercerManticoreSacrificeTriggeredAbility ability) {
public HeartPiercerManticoreReflexiveTriggeredAbility(final HeartPiercerManticoreReflexiveTriggeredAbility ability) {
super(ability);
this.relatedTriggerdAbilityOriginalId = ability.relatedTriggerdAbilityOriginalId;
}
@Override
public HeartPiercerManticoreSacrificeTriggeredAbility copy() {
return new HeartPiercerManticoreSacrificeTriggeredAbility(this);
public HeartPiercerManticoreReflexiveTriggeredAbility copy() {
return new HeartPiercerManticoreReflexiveTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == EventType.OPTION_USED;
return event.getType() == GameEvent.EventType.OPTION_USED;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (event.getPlayerId().equals(this.getControllerId())
&& event.getTargetId().equals(relatedTriggerdAbilityOriginalId)
&& event.getSourceId().equals(getSourceId())) {
getEffects().clear();
getEffects().add(new DamageTargetEffect(event.getAmount()));
return true;
}
return false;
return event.getPlayerId().equals(this.getControllerId())
&& event.getSourceId().equals(this.getSourceId());
}
@Override
public String getRule() {
return "When you do, {this} deals damage equal to that creature's power to any target.";
return "When you sacrifice a creature to {this}'s ability, "
+ "{this} deals damage equal to that creature's power to any target";
}
}