package magic.model.trigger;
import magic.model.MagicGame;
import magic.model.MagicLocationType;
import magic.model.MagicPermanent;
import magic.model.MagicPlayer;
import magic.model.action.RemoveFromPlayAction;
import magic.model.action.SacrificeAction;
import magic.model.action.DestroyAction;
import magic.model.action.DrawAction;
import magic.model.event.MagicEvent;
import magic.model.event.MagicSourceEvent;
import magic.data.CardDefinitions;
public abstract class AtEndOfTurnTrigger extends MagicTrigger<MagicPlayer> {
public AtEndOfTurnTrigger(final int priority) {
super(priority);
}
public AtEndOfTurnTrigger() {}
public MagicTriggerType getType() {
return MagicTriggerType.AtEndOfTurn;
}
public static final AtEndOfTurnTrigger create(final MagicSourceEvent sourceEvent) {
return new AtEndOfTurnTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPlayer player) {
return sourceEvent.getTriggerEvent(permanent, player);
}
};
}
public static final AtEndOfTurnTrigger createYour(final MagicSourceEvent sourceEvent) {
return new AtEndOfTurnTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MagicPlayer eotPlayer) {
return permanent.isController(eotPlayer);
}
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPlayer player) {
return sourceEvent.getTriggerEvent(permanent);
}
};
}
public static final AtEndOfTurnTrigger Sacrifice = new AtEndOfTurnTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer eotPlayer) {
return new MagicEvent(
permanent,
this,
"Sacrifice SN."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new SacrificeAction(event.getPermanent()));
}
};
public static final AtEndOfTurnTrigger Destroy = new AtEndOfTurnTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer eotPlayer) {
return new MagicEvent(
permanent,
this,
"Destroy SN."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new DestroyAction(event.getPermanent()));
}
};
public static final AtEndOfTurnTrigger ExileAtEnd = new AtEndOfTurnTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer eotPlayer) {
return new MagicEvent(
permanent,
this,
"Exile SN."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new RemoveFromPlayAction(event.getPermanent(), MagicLocationType.Exile));
}
};
public static final AtEndOfTurnTrigger ExileAtYourEnd(final MagicPlayer your) {
return new AtEndOfTurnTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer eotPlayer) {
return your.getId() == eotPlayer.getId() ?
new MagicEvent(
permanent,
this,
"Exile SN."
):
MagicEvent.NONE;
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new RemoveFromPlayAction(event.getPermanent(), MagicLocationType.Exile));
}
};
};
public static final AtEndOfTurnTrigger Return = new AtEndOfTurnTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicPlayer eocPlayer) {
return new MagicEvent(
permanent,
this,
"Return SN to its owner's hand."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new RemoveFromPlayAction(
event.getPermanent(),
MagicLocationType.OwnersHand
));
}
};
public static final AtEndOfTurnTrigger Monarch = new AtEndOfTurnTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MagicPlayer eotPlayer) {
return eotPlayer.isMonarch();
}
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicPlayer eotPlayer) {
return new MagicEvent(
game.createDelayedSource(CardDefinitions.getCard("The Monarch"), eotPlayer),
eotPlayer,
this,
"PN draws a card."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new DrawAction(event.getPlayer()));
}
};
}