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; } }