package magic.model.target;
import magic.model.MagicGame;
import magic.model.MagicPlayer;
import magic.model.MagicSource;
import magic.model.stack.MagicItemOnStack;
import magic.model.event.MagicEvent;
import java.util.ArrayList;
import java.util.List;
public abstract class MagicStackFilterImpl implements MagicTargetFilter<MagicItemOnStack> {
public List<MagicItemOnStack> filter(final MagicSource source) {
return filter(source, source.getController(), MagicTargetHint.None);
}
public List<MagicItemOnStack> filter(final MagicPlayer player) {
return filter(MagicSource.NONE, player, MagicTargetHint.None);
}
public List<MagicItemOnStack> filter(final MagicEvent event) {
return filter(event.getSource(), event.getPlayer(), MagicTargetHint.None);
}
public List<MagicItemOnStack> filter(final MagicSource source, final MagicPlayer player, final MagicTargetHint targetHint) {
final MagicGame game = player.getGame();
final List<MagicItemOnStack> targets=new ArrayList<MagicItemOnStack>();
// Items on stack
if (acceptType(MagicTargetType.Stack)) {
for (final MagicItemOnStack targetItemOnStack : game.getStack()) {
if (accept(source,player,targetItemOnStack) &&
targetHint.accept(player,targetItemOnStack)) {
targets.add(targetItemOnStack);
}
}
}
return targets;
}
public boolean acceptType(final MagicTargetType targetType) {
return targetType==MagicTargetType.Stack;
}
}