package magic.model.event; import java.util.Arrays; import magic.model.MagicCard; import magic.model.MagicCounterType; import magic.model.MagicGame; import magic.model.MagicLocationType; import magic.model.MagicManaCost; import magic.model.MagicPayedCost; import magic.model.MagicSource; import magic.model.action.ChangeCountersAction; import magic.model.action.ShiftCardAction; public class MagicSuspendActivation extends MagicCardAbilityActivation { final MagicManaCost cost; final int amount; protected MagicSuspendActivation(final int aAmount, final MagicManaCost aCost, final String name) { super( new MagicActivationHints(MagicTiming.Main, true), name ); cost = aCost; amount = aAmount; } public MagicSuspendActivation(final int aAmount, final MagicManaCost aCost) { this(aAmount, aCost, "Suspend"); } @Override boolean usesStack() { return false; } @Override public Iterable<? extends MagicEvent> getCostEvent(final MagicCard source) { return Arrays.asList( new MagicPayManaCostEvent(source, cost) ); } @Override public MagicEvent getCardEvent(final MagicCard card, final MagicPayedCost payedCost) { return new MagicEvent( card, this, "" ); } @Override public MagicEvent getEvent(final MagicSource source) { return new MagicEvent( source, (final MagicGame game, final MagicEvent event) -> { final MagicCard card = event.getCard(); game.doAction(new ShiftCardAction(card, MagicLocationType.OwnersHand, MagicLocationType.Exile)); game.doAction(new ChangeCountersAction(card, MagicCounterType.Time, amount)); }, "PN suspends SN. PN exiles SN, with "+amount+" time counters on it." ); } }