From 8d4ef88b31e1f7edec485f1ef664e5b5cfaf6ac5 Mon Sep 17 00:00:00 2001 From: melvin Date: Tue, 5 Nov 2013 14:56:38 +0800 Subject: [PATCH] support for sacrifice unless pattern --- .../model/event/MagicRuleEventAction.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/magic/model/event/MagicRuleEventAction.java b/src/magic/model/event/MagicRuleEventAction.java index 6c762a6539..f50933337d 100644 --- a/src/magic/model/event/MagicRuleEventAction.java +++ b/src/magic/model/event/MagicRuleEventAction.java @@ -12,6 +12,7 @@ import magic.model.MagicCounterType; import magic.model.MagicAbility; import magic.model.MagicManaCost; import magic.model.MagicCardDefinition; +import magic.model.MagicManaCost; import magic.model.condition.MagicCondition; import magic.model.condition.MagicConditionFactory; import magic.model.action.MagicCardOnStackAction; @@ -38,6 +39,7 @@ import magic.model.action.MagicMillLibraryAction; import magic.model.action.MagicRemoveCardAction; import magic.model.action.MagicMoveCardAction; import magic.model.action.MagicReanimateAction; +import magic.model.action.MagicSacrificeAction; import magic.model.stack.MagicCardOnStack; import magic.model.target.MagicTarget; import magic.model.target.MagicTargetFilter; @@ -64,6 +66,7 @@ import magic.model.target.MagicGraveyardTargetPicker; import magic.model.choice.MagicTargetChoice; import magic.model.choice.MagicChoice; import magic.model.choice.MagicMayChoice; +import magic.model.choice.MagicPayManaCostChoice; import magic.data.TokenCardDefinitions; import java.util.regex.Pattern; @@ -955,6 +958,24 @@ public enum MagicRuleEventAction { }; } }, + SacrificeUnless( + "pay (?[^\\.]*). If you don't, sacrifice SN.", + MagicTiming.None, + "Sacrifice" + ) { + public MagicChoice getChoice(final String rule) { + final Matcher matcher = matched(rule); + return new MagicPayManaCostChoice(MagicManaCost.create(matcher.group("cost"))); + } + public MagicEventAction getNoAction(final String rule) { + return new MagicEventAction() { + @Override + public void executeEvent(final MagicGame game, final MagicEvent event) { + game.doAction(new MagicSacrificeAction(event.getPermanent())); + } + }; + } + }, ; private final Pattern pattern; @@ -1032,6 +1053,10 @@ public enum MagicRuleEventAction { return action; } + public MagicEventAction getNoAction(final String rule) { + return MagicEvent.NO_ACTION; + } + public MagicTiming getTiming(final String rule) { return timing; } @@ -1105,9 +1130,11 @@ public enum MagicRuleEventAction { } public static MagicSourceEvent create(final String rule) { - final String effect = rule.replaceFirst("^PN may ", "").replaceFirst("^have ", ""); + final String ruleWithoutMay = rule.replaceFirst("^PN may ", ""); + final String effect = ruleWithoutMay.replaceFirst("^have ", ""); final MagicRuleEventAction ruleAction = MagicRuleEventAction.build(effect); final MagicEventAction action = ruleAction.getAction(effect); + final MagicEventAction noAction = ruleAction.getNoAction(effect); final MagicTargetPicker picker = ruleAction.getPicker(effect); final MagicChoice choice = ruleAction.getChoice(effect); @@ -1124,10 +1151,12 @@ public enum MagicRuleEventAction { public void executeEvent(final MagicGame game, final MagicEvent event) { if (event.isYes()) { action.executeEvent(game, event); + } else { + noAction.executeEvent(game, event); } } }, - "PN may$ " + rule + "$" + "PN may$ " + ruleWithoutMay + "$" ); } @Override