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) {
|
CreatureBlocksEffect("When(ever)? " + ARG.WORDRUN + " blocks, " + ARG.EFFECT, 10) {
|
||||||
@Override
|
@Override
|
||||||
protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) {
|
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}"),
|
DoesNotUntapDuringNext0("doesn't untap during your next untap step", "{s}"),
|
||||||
DoesNotUntapDuringNext1("doesn't untap during your next untap step", "{s}"),
|
DoesNotUntapDuringNext1("doesn't untap during your next untap step", "{s}"),
|
||||||
Exerted("exerted", ""),
|
Exerted("exerted", ""),
|
||||||
|
Explores("explores", ""),
|
||||||
Regenerated("regenerated", "{r}"),
|
Regenerated("regenerated", "{r}"),
|
||||||
CannotBeRegenerated("can't be regenerated", "{~r}"),
|
CannotBeRegenerated("can't be regenerated", "{~r}"),
|
||||||
Attacking("attacking", "{c}"),
|
Attacking("attacking", "{c}"),
|
||||||
|
|
|
@ -35,6 +35,13 @@ public class ChangeStateAction extends MagicAction {
|
||||||
set = aSet;
|
set = aSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void trigger(final MagicGame game, final MagicPermanent perm, final MagicPermanentState state) {
|
||||||
|
game.executeTrigger(
|
||||||
|
MagicTriggerType.WhenBecomesState,
|
||||||
|
ChangeStateAction.Set(perm, state)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doAction(final MagicGame game) {
|
public void doAction(final MagicGame game) {
|
||||||
changed=permanent.hasState(state)!=set;
|
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) -> {
|
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
|
||||||
game.doAction(ChangeStateAction.Set(
|
|
||||||
event.getPermanent(),
|
|
||||||
MagicPermanentState.Exerted
|
|
||||||
));
|
|
||||||
game.doAction(ChangeStateAction.DoesNotUntapDuringNext(
|
game.doAction(ChangeStateAction.DoesNotUntapDuringNext(
|
||||||
event.getPermanent(),
|
event.getPermanent(),
|
||||||
event.getPlayer()
|
event.getPlayer()
|
||||||
));
|
));
|
||||||
|
ChangeStateAction.trigger(game, event.getPermanent(), MagicPermanentState.Exerted);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,12 @@ import magic.model.MagicPermanent;
|
||||||
import magic.model.MagicCard;
|
import magic.model.MagicCard;
|
||||||
import magic.model.MagicCounterType;
|
import magic.model.MagicCounterType;
|
||||||
import magic.model.MagicLocationType;
|
import magic.model.MagicLocationType;
|
||||||
|
import magic.model.MagicPermanentState;
|
||||||
import magic.model.choice.MagicMayChoice;
|
import magic.model.choice.MagicMayChoice;
|
||||||
import magic.model.action.RevealAction;
|
import magic.model.action.RevealAction;
|
||||||
import magic.model.action.ShiftCardAction;
|
import magic.model.action.ShiftCardAction;
|
||||||
import magic.model.action.ChangeCountersAction;
|
import magic.model.action.ChangeCountersAction;
|
||||||
|
import magic.model.action.ChangeStateAction;
|
||||||
|
|
||||||
public class MagicExploreEvent extends MagicEvent {
|
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.action.ChangeStateAction;
|
||||||
import magic.model.event.MagicEvent;
|
import magic.model.event.MagicEvent;
|
||||||
import magic.model.event.MagicSourceEvent;
|
import magic.model.event.MagicSourceEvent;
|
||||||
|
import magic.model.target.MagicTargetFilter;
|
||||||
|
import magic.model.target.MagicTargetFilterFactory;
|
||||||
|
|
||||||
public abstract class BecomesStateTrigger extends MagicTrigger<ChangeStateAction> {
|
public abstract class BecomesStateTrigger extends MagicTrigger<ChangeStateAction> {
|
||||||
public BecomesStateTrigger(final int priority) {
|
public BecomesStateTrigger(final int priority) {
|
||||||
|
@ -19,11 +21,11 @@ public abstract class BecomesStateTrigger extends MagicTrigger<ChangeStateAction
|
||||||
return MagicTriggerType.WhenBecomesState;
|
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() {
|
return new BecomesStateTrigger() {
|
||||||
@Override
|
@Override
|
||||||
public boolean accept(final MagicPermanent permanent, final ChangeStateAction data) {
|
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
|
@Override
|
||||||
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final ChangeStateAction data) {
|
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) {
|
public static BecomesStateTrigger createSelf(final MagicPermanentState state, final MagicSourceEvent sourceEvent) {
|
||||||
return new BecomesStateTrigger() {
|
return new BecomesStateTrigger() {
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue