Improve how available pool is determined for Conquest deck editor

This commit is contained in:
drdev
2014-12-13 19:34:48 +00:00
parent 6c6554008c
commit de08df303b
2 changed files with 43 additions and 5 deletions

View File

@@ -38,6 +38,7 @@ import forge.menu.FDropDownMenu;
import forge.menu.FMenuItem; import forge.menu.FMenuItem;
import forge.menu.FPopupMenu; import forge.menu.FPopupMenu;
import forge.model.FModel; import forge.model.FModel;
import forge.planarconquest.ConquestUtil;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.quest.data.QuestPreferences.QPref; import forge.quest.data.QuestPreferences.QPref;
import forge.screens.TabPageScreen; import forge.screens.TabPageScreen;
@@ -781,11 +782,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
cardManager.setPool(cardpool); cardManager.setPool(cardpool);
break; break;
case PlanarConquest: case PlanarConquest:
final ItemPool<PaperCard> pool = new ItemPool<PaperCard>(PaperCard.class); cardManager.setPool(ConquestUtil.getAvailablePool(parentScreen.getDeck()));
pool.addAllFlat(FModel.getConquest().getModel().getCollection());
pool.removeAll(parentScreen.getDeck().getMain());
pool.removeAll(parentScreen.getDeck().get(DeckSection.Commander));
cardManager.setPool(pool);
break; break;
default: default:
if (cardManager.getWantUnique()) { if (cardManager.getWantUnique()) {

View File

@@ -1,9 +1,12 @@
package forge.planarconquest; package forge.planarconquest;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map.Entry;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.card.MagicColor;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSection; import forge.deck.DeckSection;
@@ -14,6 +17,7 @@ import forge.deck.generation.DeckGeneratorBase;
import forge.deck.generation.DeckGeneratorMonoColor; import forge.deck.generation.DeckGeneratorMonoColor;
import forge.deck.generation.IDeckGenPool; import forge.deck.generation.IDeckGenPool;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.model.FModel;
import forge.properties.ForgeConstants; import forge.properties.ForgeConstants;
import forge.quest.QuestUtil; import forge.quest.QuestUtil;
import forge.util.FileUtil; import forge.util.FileUtil;
@@ -83,4 +87,41 @@ public class ConquestUtil {
} }
return name; return name;
} }
public static CardPool getAvailablePool(Deck deck) {
HashSet<PaperCard> availableCards = new HashSet<PaperCard>(FModel.getConquest().getModel().getCollection());
//remove all cards in main deck
for (Entry<PaperCard, Integer> e : deck.getMain()) {
availableCards.remove(e.getKey());
}
//remove commander
PaperCard commander = deck.get(DeckSection.Commander).get(0);
availableCards.remove(commander);
//remove any cards that aren't allowed in deck due to color identity
byte colorIdentity = commander.getRules().getColorIdentity().getColor();
if (colorIdentity != MagicColor.ALL_COLORS) {
List<PaperCard> invalidCards = new ArrayList<PaperCard>();
for (PaperCard pc : availableCards) {
if (!pc.getRules().getColorIdentity().hasNoColorsExcept(colorIdentity)) {
invalidCards.add(pc);
}
}
availableCards.removeAll(invalidCards);
}
//create pool from available cards and allowed basic lands
CardPool pool = new CardPool();
pool.addAllFlat(availableCards);
String setCode = FModel.getConquest().getModel().getCurrentPlane().getEditions().get(0).getCode();
for (int i = 0; i < MagicColor.WUBRG.length; i++) {
if ((colorIdentity & MagicColor.WUBRG[i]) != 0) {
pool.add(MagicColor.Constant.BASIC_LANDS.get(i), setCode, 50);
}
}
return pool;
}
} }