package magic.model.target; import magic.model.MagicGame; import magic.model.MagicPermanent; import magic.model.MagicPlayer; import magic.model.MagicSource; import magic.model.event.MagicEvent; import java.util.ArrayList; import java.util.List; public abstract class MagicPermanentFilterImpl implements MagicTargetFilter<MagicPermanent> { public List<MagicPermanent> filter(final MagicSource source) { return filter(source, source.getController(), MagicTargetHint.None); } public List<MagicPermanent> filter(final MagicPlayer player) { return filter(MagicSource.NONE, player, MagicTargetHint.None); } public List<MagicPermanent> filter(final MagicEvent event) { return filter(event.getSource(), event.getPlayer(), MagicTargetHint.None); } public List<MagicPermanent> filter(final MagicSource source, final MagicPlayer player, final MagicTargetHint targetHint) { final MagicGame game = player.getGame(); final List<MagicPermanent> targets=new ArrayList<MagicPermanent>(); if (acceptType(MagicTargetType.Permanent)) { for (final MagicPlayer controller : game.getPlayers()) { for (final MagicPermanent targetPermanent : controller.getPermanents()) { if (accept(source,player,targetPermanent) && targetHint.accept(player,targetPermanent)) { targets.add(targetPermanent); } } } } return targets; } public boolean acceptType(final MagicTargetType targetType) { return targetType==MagicTargetType.Permanent; } public MagicPermanentFilterImpl except(final MagicPermanent invalid) { return new MagicOtherPermanentTargetFilter(this, invalid); } }