package magic.model.trigger;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.action.SacrificeAction;
import magic.model.event.MagicEvent;
import magic.model.event.MagicSourceEvent;
import magic.model.stack.MagicItemOnStack;
import magic.model.target.MagicTargetFilter;
public abstract class ThisBecomesTargetTrigger extends BecomesTargetTrigger {
@Override
public boolean accept(final MagicPermanent permanent, final MagicItemOnStack item) {
return item.isTarget(permanent);
}
public static ThisBecomesTargetTrigger create(final MagicTargetFilter<MagicItemOnStack> filter, final MagicSourceEvent sourceEvent) {
return new ThisBecomesTargetTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MagicItemOnStack itemOnStack) {
return super.accept(permanent, itemOnStack) && filter.accept(permanent, permanent.getController(), itemOnStack);
}
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicItemOnStack itemOnStack) {
return sourceEvent.getTriggerEvent(permanent);
}
};
}
public static ThisBecomesTargetTrigger create(final MagicSourceEvent sourceEvent) {
return new ThisBecomesTargetTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicItemOnStack itemOnStack) {
return sourceEvent.getTriggerEvent(permanent);
}
};
}
public static ThisBecomesTargetTrigger createSpell(final MagicSourceEvent sourceEvent) {
return new ThisBecomesTargetTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MagicItemOnStack item) {
return super.accept(permanent, item) && item.isSpell();
}
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicItemOnStack itemOnStack) {
return sourceEvent.getTriggerEvent(permanent);
}
};
}
public static final ThisBecomesTargetTrigger SacWhenTargeted = new ThisBecomesTargetTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicItemOnStack target) {
return new MagicEvent(
permanent,
this,
"Sacrifice SN."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new SacrificeAction(event.getPermanent()));
}
};
}