implement casting restriction as additional costs instead of custom card activation

master
melvinzhang 2015-05-23 09:52:37 +08:00
parent 4c6c82e54f
commit 4e7a7296d1
3 changed files with 15 additions and 12 deletions

View File

@ -577,9 +577,9 @@ public enum MagicAbility {
},
CastRestriction("Cast SN " + ARG.ANY, 0) {
protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) {
final MagicCondition[] conds = MagicConditionParser.buildCast(ARG.any(arg));
final MagicCardDefinition cardDef = (MagicCardDefinition)card;
card.add(MagicCardActivation.castOnly(cardDef, conds));
for (final MagicMatchedCostEvent mce : MagicConditionParser.buildCost(ARG.any(arg))) {
card.add(MagicAdditionalCost.create(mce));
}
}
},
AdditionalCost("As an additional cost to cast SN, " + ARG.COST, 10) {

View File

@ -4,9 +4,12 @@ import magic.model.ARG;
import magic.model.MagicCounterType;
import magic.model.MagicAbility;
import magic.model.target.MagicTargetFilterFactory;
import magic.model.event.MagicMatchedCostEvent;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.List;
import java.util.LinkedList;
public enum MagicConditionParser {
@ -497,4 +500,13 @@ public enum MagicConditionParser {
}
return conds;
}
public static List<MagicMatchedCostEvent> buildCost(final String costs) {
final String[] splitCosts = costs.split(" and ");
final List<MagicMatchedCostEvent> matched = new LinkedList<MagicMatchedCostEvent>();
for (String cost : splitCosts) {
matched.add(build(cost));
}
return matched;
}
}

View File

@ -132,15 +132,6 @@ public class MagicCardActivation extends MagicActivation<MagicCard> implements M
};
}
public static final MagicCardActivation castOnly(final MagicCardDefinition cardDef, final MagicCondition[] conditions) {
return new MagicCardActivation(conditions, cardDef.getActivationHints(), "Cast") {
@Override
public void change(final MagicCardDefinition cdef) {
cdef.setCardAct(this);
}
};
}
public static final MagicCardActivation affinity(final MagicCardDefinition cardDef, final MagicTargetFilter<MagicPermanent> filter) {
return new MagicCardActivation(CARD_CONDITION, cardDef.getActivationHints(), "Cast") {
@Override