support for pump and gain ability effect

master
melvin 2013-11-02 10:52:07 +08:00
parent 980f6ab54e
commit 1c2df2382a
1 changed files with 60 additions and 0 deletions

View File

@ -503,6 +503,66 @@ public enum MagicRuleEventAction {
}
}
},
GainPumpChosen(
"(?<choice>[^\\.]*) gets (?<pt>[0-9+]+/[0-9+]+) and gains (?<ability>[^\\.]*) until end of turn.",
MagicTargetHint.Positive
) {
public MagicEventAction getAction(final String rule) {
final Matcher matcher = matched(rule);
final MagicAbility ability = MagicAbility.getAbility(matcher.group("ability"));
final String[] pt = matcher.group("pt").replace("+","").split("/");
final int power = Integer.parseInt(pt[0]);
final int toughness = Integer.parseInt(pt[1]);
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new MagicChangeTurnPTAction(creature,power,toughness));
game.doAction(new MagicGainAbilityAction(creature,ability));
}
});
}
};
}
public MagicTiming getTiming(final String rule) {
final Matcher matcher = matched(rule);
final MagicAbility ability = MagicAbility.getAbility(matcher.group("ability"));
switch (ability) {
case Haste:
case Vigilance:
return MagicTiming.FirstMain;
case FirstStrike:
case DoubleStrike:
return MagicTiming.Block;
default:
return MagicTiming.Pump;
}
}
public MagicTargetPicker<?> getPicker(final String rule) {
final Matcher matcher = matched(rule);
final MagicAbility ability = MagicAbility.getAbility(matcher.group("ability"));
switch (ability) {
case Deathtouch:
return MagicDeathtouchTargetPicker.getInstance();
case Lifelink:
return MagicLifelinkTargetPicker.create();
case FirstStrike:
case DoubleStrike:
return MagicFirstStrikeTargetPicker.create();
case Haste:
return MagicHasteTargetPicker.create();
case Indestructible:
return MagicIndestructibleTargetPicker.create();
case Trample:
return MagicTrampleTargetPicker.create();
case Flying:
return MagicFlyingTargetPicker.create();
default:
return MagicPumpTargetPicker.create();
}
}
},
GainGroup(
"(?<group>[^\\.]*) gain (?<ability>[^\\.]*) until end of turn."
) {