package magic.model.trigger;
import magic.model.MagicCard;
import magic.model.MagicGame;
import magic.model.MagicLocationType;
import magic.model.MagicPermanent;
import magic.model.action.MoveCardAction;
import magic.model.event.MagicEvent;
import magic.model.event.MagicSourceEvent;
public abstract class CardIsDiscardedTrigger extends OtherPutIntoGraveyardTrigger {
public CardIsDiscardedTrigger(final int priority) {
super(priority);
}
public CardIsDiscardedTrigger() {}
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MoveCardAction act) {
return (act.fromLocation == MagicLocationType.OwnersHand) ?
getEvent(permanent, act.card) : MagicEvent.NONE;
}
protected abstract MagicEvent getEvent(final MagicPermanent source, final MagicCard card);
public static CardIsDiscardedTrigger player(final MagicSourceEvent sourceEvent) {
return new CardIsDiscardedTrigger() {
@Override
public MagicEvent getEvent(final MagicPermanent source, final MagicCard card) {
return sourceEvent.getTriggerEvent(source, card.getOwner());
}
};
}
public static CardIsDiscardedTrigger opponent(final MagicSourceEvent sourceEvent) {
return new CardIsDiscardedTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MoveCardAction act) {
return super.accept(permanent, act) && permanent.isEnemy(act.card);
}
@Override
public MagicEvent getEvent(final MagicPermanent source, final MagicCard card) {
return sourceEvent.getTriggerEvent(source, card.getOwner());
}
};
}
public static CardIsDiscardedTrigger you(final MagicSourceEvent sourceEvent) {
return new CardIsDiscardedTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MoveCardAction act) {
return super.accept(permanent, act) && permanent.isFriend(act.card);
}
@Override
public MagicEvent getEvent(final MagicPermanent source, final MagicCard card) {
return sourceEvent.getTriggerEvent(source, card.getOwner());
}
};
}
}