mirror of
https://github.com/correl/mage.git
synced 2024-12-24 03:00:14 +00:00
Added the possibility to limit library search to an amount of cards (Aven Mindcensor).
This commit is contained in:
parent
03720ee1fd
commit
1baa60e9de
3 changed files with 48 additions and 9 deletions
|
@ -169,6 +169,21 @@ public class Library implements Serializable {
|
|||
return cards;
|
||||
}
|
||||
|
||||
public List<Card> getTopCards(Game game, int amount) {
|
||||
List<Card> cards = new ArrayList<Card>();
|
||||
Iterator<UUID> it = library.iterator();
|
||||
int count = 0;
|
||||
while(it.hasNext() && count < amount) {
|
||||
UUID cardId = it.next();
|
||||
Card card = game.getCard(cardId);
|
||||
if (card != null) {
|
||||
cards.add(card);
|
||||
++count;
|
||||
}
|
||||
}
|
||||
return cards;
|
||||
}
|
||||
|
||||
public Collection<Card> getUniqueCards(Game game) {
|
||||
Map<String, Card> cards = new HashMap<String, Card>();
|
||||
for (UUID cardId: library) {
|
||||
|
|
|
@ -1177,7 +1177,16 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
|
|||
//20091005 - 701.14c
|
||||
if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.SEARCH_LIBRARY, targetPlayerId, playerId))) {
|
||||
TargetCardInLibrary newTarget = target.copy();
|
||||
int count = library.count(target.getFilter(), game);
|
||||
int count;
|
||||
Integer cardLimit = (Integer) game.getState().getValue("LibrarySearchLimit");
|
||||
if (cardLimit != null) {
|
||||
newTarget.setCardLimit(cardLimit);
|
||||
game.getState().setValue("LibrarySearchLimit", null);
|
||||
count = Math.min(library.count(target.getFilter(), game),cardLimit.intValue());
|
||||
} else {
|
||||
count = library.count(target.getFilter(), game);
|
||||
}
|
||||
|
||||
if (count < target.getNumberOfTargets()) {
|
||||
newTarget.setMinNumberOfTargets(count);
|
||||
}
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
|
||||
package mage.target.common;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import mage.Constants.Outcome;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.Ability;
|
||||
|
@ -46,6 +48,8 @@ import java.util.UUID;
|
|||
*/
|
||||
public class TargetCardInLibrary extends TargetCard<TargetCardInLibrary> {
|
||||
|
||||
private Integer cardLimit;
|
||||
|
||||
public TargetCardInLibrary() {
|
||||
this(1, 1, new FilterCard());
|
||||
}
|
||||
|
@ -64,6 +68,7 @@ public class TargetCardInLibrary extends TargetCard<TargetCardInLibrary> {
|
|||
|
||||
public TargetCardInLibrary(final TargetCardInLibrary target) {
|
||||
super(target);
|
||||
this.cardLimit = target.cardLimit;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -73,27 +78,32 @@ public class TargetCardInLibrary extends TargetCard<TargetCardInLibrary> {
|
|||
if (targetPlayer == null) {
|
||||
targetPlayer = player;
|
||||
}
|
||||
|
||||
List<Card> cards;
|
||||
if (cardLimit == null) {
|
||||
cards = targetPlayer.getLibrary().getCards(game);
|
||||
} else {
|
||||
int maxCards = Math.min(cardLimit.intValue(), targetPlayer.getLibrary().size());
|
||||
cards = targetPlayer.getLibrary().getTopCards(game, maxCards);
|
||||
}
|
||||
|
||||
while (!isChosen() && !doneChosing()) {
|
||||
chosen = targets.size() >= minNumberOfTargets;
|
||||
if (!player.choose(outcome, new CardsImpl(Zone.LIBRARY, targetPlayer.getLibrary().getCards(game)), this, game)) {
|
||||
if (!player.choose(outcome, new CardsImpl(Zone.LIBRARY, cards), this, game)) {
|
||||
return chosen;
|
||||
}
|
||||
chosen = targets.size() >= minNumberOfTargets;
|
||||
}
|
||||
// Issue 231
|
||||
/*while (!doneChosing()) {
|
||||
if (!player.choose(outcome, new CardsImpl(Zone.LIBRARY, player.getLibrary().getCards(game)), this, game)) {
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
|
||||
return chosen = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTarget(UUID id, Ability source, Game game) {
|
||||
Card card = game.getPlayer(source.getControllerId()).getLibrary().getCard(id, game);
|
||||
if (card != null)
|
||||
if (card != null) {
|
||||
return filter.match(card, game);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -106,4 +116,9 @@ public class TargetCardInLibrary extends TargetCard<TargetCardInLibrary> {
|
|||
this.minNumberOfTargets = minNumberOfTargets;
|
||||
}
|
||||
|
||||
public void setCardLimit(Integer cardLimit) {
|
||||
this.cardLimit = new Integer(cardLimit.intValue());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue