package magic.model.trigger;
import magic.model.MagicCard;
import magic.model.MagicGame;
import magic.model.MagicLocationType;
import magic.model.MagicManaCost;
import magic.model.MagicPermanent;
import magic.model.action.CastCardAction;
import magic.model.action.MoveCardAction;
import magic.model.action.ShiftCardAction;
import magic.model.choice.MagicMayChoice;
import magic.model.choice.MagicPayManaCostChoice;
import magic.model.event.MagicEvent;
public class MadnessTrigger extends ThisPutIntoGraveyardTrigger {
private final MagicManaCost cost;
public MadnessTrigger(final MagicManaCost aCost) {
super(MagicTrigger.REPLACEMENT);
cost = aCost;
}
@Override
public boolean usesStack() {
return true;
}
@Override
public boolean accept(final MagicPermanent permanent, final MoveCardAction act) {
return super.accept(permanent, act) && act.from(MagicLocationType.OwnersHand);
}
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MoveCardAction act) {
// activate discard triggers
game.executeTrigger(MagicTriggerType.WhenOtherPutIntoGraveyard, act);
// change discard location to Exile
act.setToLocation(MagicLocationType.Exile);
final MagicManaCost modCost = game.modCost(act.card, cost);
return new MagicEvent(
act.card,
new MagicMayChoice(
"Cast " + act.card + " by paying " + modCost + "? (Madness)",
new MagicPayManaCostChoice(modCost)
),
this,
"PN may$ cast SN for its madness cost. If PN doesn't, put SN into into his or her graveyard."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCard card = event.getCard();
if (card.isInExile()) {
if (event.isYes()) {
game.doAction(CastCardAction.WithoutManaCost(
event.getPlayer(),
card,
MagicLocationType.Exile,
MagicLocationType.Graveyard
));
} else {
game.doAction(new ShiftCardAction(card,MagicLocationType.Exile,MagicLocationType.Graveyard));
}
}
}
}