add parser for weaken effect

master
melvin 2013-10-15 17:39:09 +08:00
parent d7c1446355
commit ffe2a220e6
7 changed files with 34 additions and 10 deletions

View File

@ -104,7 +104,7 @@ public abstract class MagicPermanentActivation extends MagicActivation<MagicPerm
final String effect = text.toLowerCase();
final MagicRuleEventAction ruleAction = MagicRuleEventAction.build(effect);
final MagicEventAction action = ruleAction.getAction(effect);
final MagicTargetPicker<?> picker = ruleAction.picker;
final MagicTargetPicker<?> picker = ruleAction.getPicker(effect);
final MagicChoice choice = ruleAction.getChoice(effect);
return new MagicPermanentActivation(

View File

@ -24,6 +24,7 @@ import magic.model.target.MagicDestroyTargetPicker;
import magic.model.target.MagicExileTargetPicker;
import magic.model.target.MagicDamageTargetPicker;
import magic.model.target.MagicPumpTargetPicker;
import magic.model.target.MagicWeakenTargetPicker;
import magic.model.choice.MagicTargetChoice;
import magic.model.choice.MagicChoice;
@ -161,13 +162,32 @@ public enum MagicRuleEventAction {
};
}
},
Weaken(
"(?<choice>[^\\.]*) gets (?<pt>[0-9-]+/[0-9-]+) until end of turn.",
MagicTargetHint.Negative,
null,
MagicTiming.Removal,
"Weaken",
null
) {
public MagicEventAction getAction(final String rule) {
return Pump.getAction(rule);
}
public MagicTargetPicker<?> getPicker(final String rule) {
final Matcher matcher = matched(rule);
final String[] args = matcher.group("pt").replace('+','0').split("/");
final int p = -Integer.parseInt(args[0]);
final int t = -Integer.parseInt(args[1]);
return new MagicWeakenTargetPicker(p, t);
}
},
;
private final Pattern pattern;
private final MagicTargetHint hint;
private final MagicEventAction action;
private final MagicTargetPicker<?> picker;
public final MagicTargetPicker<?> picker;
public final MagicTiming timing;
public final String description;
@ -194,6 +214,10 @@ public enum MagicRuleEventAction {
return pattern.matcher(rule).matches();
}
public MagicTargetPicker<?> getPicker(final String rule) {
return picker;
}
public MagicEventAction getAction(final String rule) {
return action;
}

View File

@ -19,7 +19,7 @@ public abstract class MagicSpellCardEvent implements MagicCardEvent,MagicEventAc
final String effect = rule.toLowerCase();
final MagicRuleEventAction ruleAction = MagicRuleEventAction.build(effect);
final MagicEventAction action = ruleAction.getAction(effect);
final MagicTargetPicker<?> picker = ruleAction.picker;
final MagicTargetPicker<?> picker = ruleAction.getPicker(effect);
final MagicChoice choice = ruleAction.getChoice(effect);
return new MagicSpellCardEvent() {

View File

@ -17,7 +17,7 @@ public class MagicWeakenTargetPicker extends MagicTargetPicker<MagicPermanent> {
public MagicWeakenTargetPicker(final int amountPower,final int amountToughness) {
this.amountToughness=amountToughness;
}
public MagicWeakenTargetPicker create(final String arg) {
final String[] args = arg.replace('+','0').split("/");
final int p = -Integer.parseInt(args[0]);

View File

@ -38,7 +38,7 @@ public abstract class MagicWhenComesIntoPlayTrigger extends MagicTrigger<MagicPa
final String effect = rule.toLowerCase();
final MagicRuleEventAction ruleAction = MagicRuleEventAction.build(effect);
final MagicEventAction action = ruleAction.getAction(effect);
final MagicTargetPicker<?> picker = ruleAction.picker;
final MagicTargetPicker<?> picker = ruleAction.getPicker(effect);
final MagicChoice choice = ruleAction.getChoice(effect);
return new MagicWhenComesIntoPlayTrigger() {
@ -65,7 +65,7 @@ public abstract class MagicWhenComesIntoPlayTrigger extends MagicTrigger<MagicPa
final String effect = rule.toLowerCase();
final MagicRuleEventAction ruleAction = MagicRuleEventAction.build(effect);
final MagicEventAction action = ruleAction.getAction(effect);
final MagicTargetPicker<?> picker = ruleAction.picker;
final MagicTargetPicker<?> picker = ruleAction.getPicker(effect);
final MagicChoice choice = ruleAction.getChoice(effect);
return new MagicWhenComesIntoPlayTrigger() {

View File

@ -32,7 +32,7 @@ public abstract class MagicWhenDiesTrigger extends MagicWhenPutIntoGraveyardTrig
final String effect = rule.toLowerCase();
final MagicRuleEventAction ruleAction = MagicRuleEventAction.build(effect);
final MagicEventAction action = ruleAction.getAction(effect);
final MagicTargetPicker<?> picker = ruleAction.picker;
final MagicTargetPicker<?> picker = ruleAction.getPicker(effect);
final MagicChoice choice = ruleAction.getChoice(effect);
return new MagicWhenDiesTrigger() {
@ -59,7 +59,7 @@ public abstract class MagicWhenDiesTrigger extends MagicWhenPutIntoGraveyardTrig
final String effect = rule.toLowerCase();
final MagicRuleEventAction ruleAction = MagicRuleEventAction.build(effect);
final MagicEventAction action = ruleAction.getAction(effect);
final MagicTargetPicker<?> picker = ruleAction.picker;
final MagicTargetPicker<?> picker = ruleAction.getPicker(effect);
final MagicChoice choice = ruleAction.getChoice(effect);
return new MagicWhenDiesTrigger() {

View File

@ -37,7 +37,7 @@ public abstract class MagicWhenLeavesPlayTrigger extends MagicTrigger<MagicRemov
final String effect = rule.toLowerCase();
final MagicRuleEventAction ruleAction = MagicRuleEventAction.build(effect);
final MagicEventAction action = ruleAction.getAction(effect);
final MagicTargetPicker<?> picker = ruleAction.picker;
final MagicTargetPicker<?> picker = ruleAction.getPicker(effect);
final MagicChoice choice = ruleAction.getChoice(effect);
return new MagicWhenLeavesPlayTrigger() {
@ -64,7 +64,7 @@ public abstract class MagicWhenLeavesPlayTrigger extends MagicTrigger<MagicRemov
final String effect = rule.toLowerCase();
final MagicRuleEventAction ruleAction = MagicRuleEventAction.build(effect);
final MagicEventAction action = ruleAction.getAction(effect);
final MagicTargetPicker<?> picker = ruleAction.picker;
final MagicTargetPicker<?> picker = ruleAction.getPicker(effect);
final MagicChoice choice = ruleAction.getChoice(effect);
return new MagicWhenLeavesPlayTrigger() {