support trigger: Whenever <permanent> explores, <effect>, closes #1276
parent
54e8c272c1
commit
3771856875
|
@ -1062,6 +1062,16 @@ public enum MagicAbility {
|
|||
));
|
||||
}
|
||||
},
|
||||
ExploreTrigger("Whenever " + ARG.WORDRUN + " explores, " + ARG.EFFECT, 10) {
|
||||
@Override
|
||||
protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) {
|
||||
card.add(BecomesStateTrigger.create(
|
||||
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)),
|
||||
MagicPermanentState.Explores,
|
||||
MagicRuleEventAction.create(ARG.effect(arg))
|
||||
));
|
||||
}
|
||||
},
|
||||
CreatureBlocksEffect("When(ever)? " + ARG.WORDRUN + " blocks, " + ARG.EFFECT, 10) {
|
||||
@Override
|
||||
protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) {
|
||||
|
|
|
@ -8,6 +8,7 @@ public enum MagicPermanentState {
|
|||
DoesNotUntapDuringNext0("doesn't untap during your next untap step", "{s}"),
|
||||
DoesNotUntapDuringNext1("doesn't untap during your next untap step", "{s}"),
|
||||
Exerted("exerted", ""),
|
||||
Explores("explores", ""),
|
||||
Regenerated("regenerated", "{r}"),
|
||||
CannotBeRegenerated("can't be regenerated", "{~r}"),
|
||||
Attacking("attacking", "{c}"),
|
||||
|
|
|
@ -35,6 +35,13 @@ public class ChangeStateAction extends MagicAction {
|
|||
set = aSet;
|
||||
}
|
||||
|
||||
public static void trigger(final MagicGame game, final MagicPermanent perm, final MagicPermanentState state) {
|
||||
game.executeTrigger(
|
||||
MagicTriggerType.WhenBecomesState,
|
||||
ChangeStateAction.Set(perm, state)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAction(final MagicGame game) {
|
||||
changed=permanent.hasState(state)!=set;
|
||||
|
|
|
@ -16,13 +16,10 @@ public class MagicExertEvent extends MagicEvent {
|
|||
}
|
||||
|
||||
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
|
||||
game.doAction(ChangeStateAction.Set(
|
||||
event.getPermanent(),
|
||||
MagicPermanentState.Exerted
|
||||
));
|
||||
game.doAction(ChangeStateAction.DoesNotUntapDuringNext(
|
||||
event.getPermanent(),
|
||||
event.getPlayer()
|
||||
));
|
||||
ChangeStateAction.trigger(game, event.getPermanent(), MagicPermanentState.Exerted);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -6,10 +6,12 @@ import magic.model.MagicPermanent;
|
|||
import magic.model.MagicCard;
|
||||
import magic.model.MagicCounterType;
|
||||
import magic.model.MagicLocationType;
|
||||
import magic.model.MagicPermanentState;
|
||||
import magic.model.choice.MagicMayChoice;
|
||||
import magic.model.action.RevealAction;
|
||||
import magic.model.action.ShiftCardAction;
|
||||
import magic.model.action.ChangeCountersAction;
|
||||
import magic.model.action.ChangeStateAction;
|
||||
|
||||
public class MagicExploreEvent extends MagicEvent {
|
||||
|
||||
|
@ -46,5 +48,6 @@ public class MagicExploreEvent extends MagicEvent {
|
|||
));
|
||||
}
|
||||
}
|
||||
ChangeStateAction.trigger(game, perm, MagicPermanentState.Explores);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ import magic.model.MagicPermanentState;
|
|||
import magic.model.action.ChangeStateAction;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.event.MagicSourceEvent;
|
||||
import magic.model.target.MagicTargetFilter;
|
||||
import magic.model.target.MagicTargetFilterFactory;
|
||||
|
||||
public abstract class BecomesStateTrigger extends MagicTrigger<ChangeStateAction> {
|
||||
public BecomesStateTrigger(final int priority) {
|
||||
|
@ -19,11 +21,11 @@ public abstract class BecomesStateTrigger extends MagicTrigger<ChangeStateAction
|
|||
return MagicTriggerType.WhenBecomesState;
|
||||
}
|
||||
|
||||
public static BecomesStateTrigger create(final MagicPermanentState state, final MagicSourceEvent sourceEvent) {
|
||||
public static BecomesStateTrigger create(final MagicTargetFilter<MagicPermanent> filter, final MagicPermanentState state, final MagicSourceEvent sourceEvent) {
|
||||
return new BecomesStateTrigger() {
|
||||
@Override
|
||||
public boolean accept(final MagicPermanent permanent, final ChangeStateAction data) {
|
||||
return data.state == state;
|
||||
return filter.accept(permanent, permanent.getController(), data.permanent) && data.state == state;
|
||||
}
|
||||
@Override
|
||||
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final ChangeStateAction data) {
|
||||
|
@ -32,6 +34,10 @@ public abstract class BecomesStateTrigger extends MagicTrigger<ChangeStateAction
|
|||
};
|
||||
}
|
||||
|
||||
public static BecomesStateTrigger create(final MagicPermanentState state, final MagicSourceEvent sourceEvent) {
|
||||
return create(MagicTargetFilterFactory.ANY, state, sourceEvent);
|
||||
}
|
||||
|
||||
public static BecomesStateTrigger createSelf(final MagicPermanentState state, final MagicSourceEvent sourceEvent) {
|
||||
return new BecomesStateTrigger() {
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue