From de08df303bf3403198b347a28e0fab9ba3a4ce2e Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 13 Dec 2014 19:34:48 +0000 Subject: [PATCH] Improve how available pool is determined for Conquest deck editor --- .../src/forge/deck/FDeckEditor.java | 7 +--- .../forge/planarconquest/ConquestUtil.java | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 9848d8cad3c..f5acaa25204 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -38,6 +38,7 @@ import forge.menu.FDropDownMenu; import forge.menu.FMenuItem; import forge.menu.FPopupMenu; import forge.model.FModel; +import forge.planarconquest.ConquestUtil; import forge.properties.ForgePreferences.FPref; import forge.quest.data.QuestPreferences.QPref; import forge.screens.TabPageScreen; @@ -781,11 +782,7 @@ public class FDeckEditor extends TabPageScreen { cardManager.setPool(cardpool); break; case PlanarConquest: - final ItemPool pool = new ItemPool(PaperCard.class); - pool.addAllFlat(FModel.getConquest().getModel().getCollection()); - pool.removeAll(parentScreen.getDeck().getMain()); - pool.removeAll(parentScreen.getDeck().get(DeckSection.Commander)); - cardManager.setPool(pool); + cardManager.setPool(ConquestUtil.getAvailablePool(parentScreen.getDeck())); break; default: if (cardManager.getWantUnique()) { diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java index a87efc45c0e..67d92354ace 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java @@ -1,9 +1,12 @@ package forge.planarconquest; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Map.Entry; import forge.card.ColorSet; +import forge.card.MagicColor; import forge.deck.CardPool; import forge.deck.Deck; import forge.deck.DeckSection; @@ -14,6 +17,7 @@ import forge.deck.generation.DeckGeneratorBase; import forge.deck.generation.DeckGeneratorMonoColor; import forge.deck.generation.IDeckGenPool; import forge.item.PaperCard; +import forge.model.FModel; import forge.properties.ForgeConstants; import forge.quest.QuestUtil; import forge.util.FileUtil; @@ -83,4 +87,41 @@ public class ConquestUtil { } return name; } + + public static CardPool getAvailablePool(Deck deck) { + HashSet availableCards = new HashSet(FModel.getConquest().getModel().getCollection()); + + //remove all cards in main deck + for (Entry 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 invalidCards = new ArrayList(); + 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; + } }