choice to exert should not go on the stack, for #1092

master
melvinzhang 2017-07-21 15:41:18 +08:00
parent 558852b8eb
commit 61e4d939a5
4 changed files with 33 additions and 3 deletions

View File

@ -1034,8 +1034,8 @@ public enum MagicAbility {
ExertTrigger("You may exert SN as it attacks. When you do, " + ARG.EFFECT, 10) {
@Override
protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) {
final MagicSourceEvent sourceEvent = MagicRuleEventAction.create("You may exert SN. If you do, " + ARG.effect(arg));
card.add(ThisAttacksTrigger.create(sourceEvent));
final MagicSourceEvent sourceEvent = MagicRuleEventAction.create(ARG.effect(arg));
card.add(ThisAttacksTrigger.exert(sourceEvent));
}
},
CreatureBlocksEffect("When(ever)? " + ARG.WORDRUN + " blocks, " + ARG.EFFECT, 10) {

View File

@ -5,6 +5,7 @@ public enum MagicPermanentState {
Tapped("tapped", "{T}"),
Summoned("summoned", "{n}"),
DoesNotUntapDuringNext("doesn't untap during its controller's next untap step", "{s}"),
Exerted("exerted", ""),
Regenerated("regenerated", "{r}"),
CannotBeRegenerated("can't be regenerated", "{~r}"),
Attacking("attacking", "{c}"),

View File

@ -15,9 +15,14 @@ public class MagicExertEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) ->
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(ChangeStateAction.Set(
event.getPermanent(),
MagicPermanentState.Exerted
));
game.doAction(ChangeStateAction.Set(
event.getPermanent(),
MagicPermanentState.DoesNotUntapDuringNext
));
};
}

View File

@ -4,6 +4,9 @@ import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.event.MagicEvent;
import magic.model.event.MagicSourceEvent;
import magic.model.event.MagicExertEvent;
import magic.model.choice.MagicMayChoice;
import magic.model.action.EnqueueTriggerAction;
public abstract class ThisAttacksTrigger extends AttacksTrigger {
public ThisAttacksTrigger(final int priority) {
@ -25,4 +28,25 @@ public abstract class ThisAttacksTrigger extends AttacksTrigger {
}
};
}
public static ThisAttacksTrigger exert(final MagicSourceEvent sourceEvent) {
return new ThisAttacksTrigger(MagicTrigger.REPLACEMENT) {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent attacker) {
return new MagicEvent(
permanent,
new MagicMayChoice("Exert " + permanent + "?"),
this,
"PN may$ exert SN as it attacks."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
game.addEvent(new MagicExertEvent(event.getPermanent()));
game.doAction(new EnqueueTriggerAction(sourceEvent.getTriggerEvent(event.getPermanent())));
}
}
};
}
}