package magic.model.event;
import magic.model.MagicCounterType;
import magic.model.MagicPermanent;
import magic.model.MagicPayedCost;
import magic.model.condition.MagicCondition;
import magic.model.ARG;
import java.util.Arrays;
public abstract class MagicPlaneswalkerActivation extends MagicPermanentActivation {
final int cost;
public MagicPlaneswalkerActivation(final int cost) {
this(cost, (cost > 0 ? "+" : "") + cost);
}
public MagicPlaneswalkerActivation(final int aCost, final String description) {
super(
new MagicCondition[] {
MagicCondition.SORCERY_CONDITION
},
new MagicActivationHints(MagicTiming.Main),
description
);
cost = aCost;
}
@Override
public Iterable<? extends MagicEvent> getCostEvent(final MagicPermanent source) {
return Arrays.asList(
cost >= 0 ?
MagicPutCounterEvent.Self(
source,
MagicCounterType.Loyalty,
cost
):
new MagicRemoveCounterEvent(
source,
MagicCounterType.Loyalty,
-cost
),
new MagicPlayAbilityEvent(source)
);
}
public static final MagicPlaneswalkerActivation create(final String act) {
final String[] part = act.split(ARG.COLON, 2);
// build the actual costs
final int cost = Integer.parseInt(part[0].replace('−', '-'));
// parse the effect
final String rule = part[1];
final MagicSourceEvent sourceEvent = MagicRuleEventAction.create(rule);
return new MagicPlaneswalkerActivation(cost, part[0]) {
@Override
public MagicEvent getPermanentEvent(final MagicPermanent source, final MagicPayedCost payedCost) {
return sourceEvent.getEvent(source, payedCost);
}
};
}
}