only remove duplicate cards from library
parent
bcae6af1cf
commit
f90188540d
|
@ -101,34 +101,35 @@ abstract class MagicTargetFilterImpl implements MagicTargetFilter<MagicTarget> {
|
|||
abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard> {
|
||||
public List<MagicCard> filter(final MagicGame game, final MagicPlayer player, final MagicTargetHint targetHint) {
|
||||
final List<MagicCard> targets = new ArrayList<MagicCard>();
|
||||
final Set<Long> added = new HashSet<Long>();
|
||||
|
||||
// Cards in graveyard
|
||||
if (acceptType(MagicTargetType.Graveyard)) {
|
||||
add(game, player, player.getGraveyard(), targets, added);
|
||||
add(game, player, player.getGraveyard(), targets, false);
|
||||
}
|
||||
|
||||
// Cards in opponent's graveyard
|
||||
if (acceptType(MagicTargetType.OpponentsGraveyard)) {
|
||||
add(game, player, player.getOpponent().getGraveyard(), targets, added);
|
||||
add(game, player, player.getOpponent().getGraveyard(), targets, false);
|
||||
}
|
||||
|
||||
// Cards in hand
|
||||
if (acceptType(MagicTargetType.Hand)) {
|
||||
add(game, player, player.getHand(), targets, added);
|
||||
add(game, player, player.getHand(), targets, false);
|
||||
}
|
||||
|
||||
// Cards in library
|
||||
if (acceptType(MagicTargetType.Library)) {
|
||||
add(game, player, player.getLibrary(), targets, added);
|
||||
// only consider unique cards, possible as cards in library will not be counted
|
||||
add(game, player, player.getLibrary(), targets, true);
|
||||
}
|
||||
|
||||
return targets;
|
||||
}
|
||||
|
||||
private void add(final MagicGame game, final MagicPlayer player, final MagicCardList cards, final List<MagicCard> targets, final Set<Long> added) {
|
||||
private void add(final MagicGame game, final MagicPlayer player, final MagicCardList cards, final List<MagicCard> targets, final boolean unique) {
|
||||
final Set<Long> added = new HashSet<Long>();
|
||||
for (final MagicCard card : cards) {
|
||||
if (accept(game,player,card) && added.contains(card.getStateId()) == false) {
|
||||
if (accept(game,player,card) && (unique == false || added.contains(card.getStateId()) == false)) {
|
||||
targets.add(card);
|
||||
added.add(card.getStateId());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue