package magic.model.trigger;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.event.MagicEvent;
import magic.model.event.MagicSourceEvent;
import magic.model.stack.MagicItemOnStack;
import magic.model.target.MagicTargetFilter;
import magic.model.target.MagicTarget;
public abstract class BecomesTargetTrigger extends MagicTrigger<MagicItemOnStack> {
public BecomesTargetTrigger(final int priority) {
super(priority);
}
public BecomesTargetTrigger() {}
public MagicTriggerType getType() {
return MagicTriggerType.WhenTargeted;
}
public static BecomesTargetTrigger createThis(final MagicTargetFilter<MagicItemOnStack> ifilter, final MagicSourceEvent sourceEvent) {
return new BecomesTargetTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MagicItemOnStack itemOnStack) {
return itemOnStack.getTarget() == permanent &&
ifilter.accept(permanent, permanent.getController(), itemOnStack);
}
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicItemOnStack itemOnStack) {
return sourceEvent.getTriggerEvent(permanent, itemOnStack);
}
};
}
public static BecomesTargetTrigger create(final MagicTargetFilter<MagicPermanent> pfilter, final MagicTargetFilter<MagicItemOnStack> ifilter, final MagicSourceEvent sourceEvent) {
return new BecomesTargetTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MagicItemOnStack itemOnStack) {
final MagicTarget target = itemOnStack.getTarget();
return target.isPermanent() &&
pfilter.accept(permanent, permanent.getController(), (MagicPermanent)target) &&
ifilter.accept(permanent, permanent.getController(), itemOnStack);
}
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicItemOnStack itemOnStack) {
return sourceEvent.getTriggerEvent(permanent, (MagicPermanent)itemOnStack.getTarget());
}
};
}
}