package mage.target.common;
import mage.filter.common.FilterControlledCreatureOrPlaneswalkerPermanent;
import mage.filter.common.FilterCreatureOrPlaneswalkerPermanent;
/**
* @author BetaSteward_at_googlemail.com
*/
public class TargetCreatureOrPlaneswalkerAmount extends TargetPermanentAmount {
private static final FilterCreatureOrPlaneswalkerPermanent defaultFilter
= new FilterCreatureOrPlaneswalkerPermanent("target creatures and/or planeswalkers");
/**
* IMPORTANT: Use more specific constructor if {@code amount} is not always the same number!
* {@code minNumberOfTargets} defaults to zero for {@code amount} > 3, otherwise to one, in line with typical templating.
* {@code maxNumberOfTargets} defaults to {@code amount}.
* {@code filter} defaults to all creature and planeswalker permanents. ("target creatures and/or planeswalkers")
*
* @see TargetCreatureOrPlaneswalkerAmount#TargetCreatureOrPlaneswalkerAmount(int, int, int, FilterCreatureOrPlaneswalkerPermanent)
*/
public TargetCreatureOrPlaneswalkerAmount(int amount) {
this(amount, defaultFilter);
}
/**
* IMPORTANT: Use more specific constructor if {@code amount} is not always the same number!
* {@code minNumberOfTargets} defaults to zero for {@code amount} > 3, otherwise to one, in line with typical templating.
* {@code maxNumberOfTargets} defaults to {@code amount}.
*
* @see TargetCreatureOrPlaneswalkerAmount#TargetCreatureOrPlaneswalkerAmount(int, int, int, FilterCreatureOrPlaneswalkerPermanent)
*/
public TargetCreatureOrPlaneswalkerAmount(int amount, FilterCreatureOrPlaneswalkerPermanent filter) {
this(amount, amount > 3 ? 0 : 1, amount, filter);
}
/**
* {@code filter} defaults to all creature and planeswalker permanents. ("target creatures and/or planeswalkers")
*
* @see TargetCreatureOrPlaneswalkerAmount#TargetCreatureOrPlaneswalkerAmount(int, int, int, FilterCreatureOrPlaneswalkerPermanent)
*/
public TargetCreatureOrPlaneswalkerAmount(int amount, int minNumberOfTargets, int maxNumberOfTargets) {
this(amount, minNumberOfTargets, maxNumberOfTargets, defaultFilter);
}
/**
* @param amount Amount of stuff (e.g. damage, counters) to distribute.
* @param minNumberOfTargets Minimum number of targets.
* @param maxNumberOfTargets Maximum number of targets. If no lower max is needed, set to {@code amount}.
* @param filter Filter for creatures and/or planeswalkers that something will be distributed amongst.
*/
public TargetCreatureOrPlaneswalkerAmount(int amount, int minNumberOfTargets, int maxNumberOfTargets, FilterCreatureOrPlaneswalkerPermanent filter) {
super(amount, minNumberOfTargets, maxNumberOfTargets, filter);
}
/**
* IMPORTANT: Use more specific constructor if {@code amount} is not always the same number!
*
* @see TargetCreatureOrPlaneswalkerAmount#TargetCreatureOrPlaneswalkerAmount(int, FilterCreatureOrPlaneswalkerPermanent)
*/
public TargetCreatureOrPlaneswalkerAmount(int amount, FilterControlledCreatureOrPlaneswalkerPermanent filter) {
this(amount, amount > 3 ? 0 : 1, amount, filter);
}
/**
* @see TargetCreatureOrPlaneswalkerAmount#TargetCreatureOrPlaneswalkerAmount(int, int, int, FilterCreatureOrPlaneswalkerPermanent)
*/
public TargetCreatureOrPlaneswalkerAmount(int amount, int minNumberOfTargets, int maxNumberOfTargets, FilterControlledCreatureOrPlaneswalkerPermanent filter) {
super(amount, minNumberOfTargets, maxNumberOfTargets, filter);
}
private TargetCreatureOrPlaneswalkerAmount(final TargetCreatureOrPlaneswalkerAmount target) {
super(target);
}
@Override
public TargetCreatureOrPlaneswalkerAmount copy() {
return new TargetCreatureOrPlaneswalkerAmount(this);
}
}