From 1e6a47b3d2f6ee78176a9040b74670436d6f5784 Mon Sep 17 00:00:00 2001 From: drdev Date: Mon, 7 Dec 2015 01:43:13 +0000 Subject: [PATCH] Add Collection screen for Planar Conquest --- .gitattributes | 1 + .../forge/deck/generation/DeckGenPool.java | 4 + .../ConquestCollectionScreen.java | 85 +++++++++++++++++++ .../planarconquest/ConquestDeckEditor.java | 8 +- .../screens/planarconquest/ConquestMenu.java | 8 ++ .../forge/planarconquest/ConquestData.java | 70 +++++++++++---- .../forge/planarconquest/ConquestUtil.java | 2 +- 7 files changed, 155 insertions(+), 23 deletions(-) create mode 100644 forge-gui-mobile/src/forge/screens/planarconquest/ConquestCollectionScreen.java diff --git a/.gitattributes b/.gitattributes index 3ecef064158..4361bdc40d4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1334,6 +1334,7 @@ forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java -text forge-gui-mobile/src/forge/screens/online/OnlineChatScreen.java -text forge-gui-mobile/src/forge/screens/online/OnlineLobbyScreen.java -text forge-gui-mobile/src/forge/screens/online/OnlineMenu.java -text +forge-gui-mobile/src/forge/screens/planarconquest/ConquestCollectionScreen.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java -text diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java b/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java index b5a6de19322..4ebb0175a23 100644 --- a/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java @@ -45,6 +45,10 @@ public class DeckGenPool implements IDeckGenPool { return cards.get(name); } + public boolean contains(PaperCard card) { + return cards.containsKey(card.getName()); + } + @Override public Iterable getAllCards() { return cards.values(); diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCollectionScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCollectionScreen.java new file mode 100644 index 00000000000..95639116592 --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCollectionScreen.java @@ -0,0 +1,85 @@ +package forge.screens.planarconquest; + +import com.google.common.base.Predicate; + +import forge.item.PaperCard; +import forge.itemmanager.CardManager; +import forge.itemmanager.ItemManager; +import forge.itemmanager.ItemManagerConfig; +import forge.itemmanager.filters.CardColorFilter; +import forge.itemmanager.filters.CardTypeFilter; +import forge.itemmanager.filters.ComboBoxFilter; +import forge.itemmanager.filters.ItemFilter; +import forge.model.FModel; +import forge.planarconquest.ConquestData; +import forge.planarconquest.ConquestPlane; +import forge.screens.FScreen; + +public class ConquestCollectionScreen extends FScreen { + private final CollectionManager lstCollection = add(new CollectionManager()); + + public ConquestCollectionScreen() { + super("", ConquestMenu.getMenu()); + + ConquestData model = FModel.getConquest().getModel(); + ItemManagerConfig config = ItemManagerConfig.CONQUEST_COLLECTION; + lstCollection.setup(config, model.getColOverrides(config)); + } + + @Override + public void onActivate() { + setHeaderCaption(FModel.getConquest().getName()); + refreshCards(); + } + + public void refreshCards() { + FModel.getConquest().getModel().populateCollectionManager(lstCollection); + } + + @Override + protected void doLayout(float startY, float width, float height) { + float x = ItemFilter.PADDING; + float w = width - 2 * x; + lstCollection.setBounds(x, startY, w, height - startY - ItemFilter.PADDING); + } + + private static class CollectionManager extends CardManager { + public CollectionManager() { + super(false); + setCaption("Collection"); + } + + @Override + protected void addDefaultFilters() { + addFilter(new CardColorFilter(this)); + addFilter(new CardOriginFilter(this)); + addFilter(new CardTypeFilter(this)); + } + } + + private static class CardOriginFilter extends ComboBoxFilter { + public CardOriginFilter(ItemManager itemManager0) { + super("All Planes", ConquestPlane.values(), itemManager0); + } + + @Override + public ItemFilter createCopy() { + CardOriginFilter copy = new CardOriginFilter(itemManager); + copy.filterValue = filterValue; + return copy; + } + + @Override + protected Predicate buildPredicate() { + return new Predicate() { + @Override + public boolean apply(PaperCard input) { + if (filterValue == null) { + return true; + } + return filterValue.getCardPool().contains(input); + } + }; + } + } +} diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java index 9c7c8867988..e2835e1c8f0 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java @@ -1,6 +1,5 @@ package forge.screens.planarconquest; -import java.util.HashMap; import java.util.Map; import forge.deck.DeckProxy; @@ -11,7 +10,6 @@ import forge.itemmanager.ItemColumn; import forge.itemmanager.ItemManagerConfig; import forge.model.FModel; import forge.planarconquest.ConquestCommander; -import forge.planarconquest.ConquestData; public class ConquestDeckEditor extends FDeckEditor { public ConquestDeckEditor(ConquestCommander commander) { @@ -36,10 +34,6 @@ public class ConquestDeckEditor extends FDeckEditor { @Override protected Map getColOverrides(ItemManagerConfig config) { - ConquestData model = FModel.getConquest().getModel(); - Map colOverrides = new HashMap(); - ItemColumn.addColOverride(config, colOverrides, ColumnDef.NEW, model.fnNewCompare, model.fnNewGet); - ItemColumn.addColOverride(config, colOverrides, ColumnDef.DECKS, model.fnDeckCompare, model.fnDeckGet); - return colOverrides; + return FModel.getConquest().getModel().getColOverrides(config); } } diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java index b2664a99596..c5efef281f9 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java @@ -24,6 +24,7 @@ public class ConquestMenu extends FPopupMenu { private static final ConquestMenu conquestMenu = new ConquestMenu(); private static final ConquestMapScreen mapScreen = new ConquestMapScreen(); private static final ConquestCommandersScreen commandersScreen = new ConquestCommandersScreen(); + private static final ConquestCollectionScreen collectionScreen = new ConquestCollectionScreen(); private static final ConquestPrefsScreen prefsScreen = new ConquestPrefsScreen(); private static final FMenuItem mapItem = new FMenuItem("Planar Map", FSkinImage.QUEST_MAP, new FEventHandler() { @@ -38,6 +39,12 @@ public class ConquestMenu extends FPopupMenu { Forge.openScreen(commandersScreen); } }); + private static final FMenuItem collectionItem = new FMenuItem("Collection", FSkinImage.QUEST_BOX, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + Forge.openScreen(collectionScreen); + } + }); private static final FMenuItem prefsItem = new FMenuItem("Preferences", FSkinImage.SETTINGS, new FEventHandler() { @Override public void handleEvent(FEvent e) { @@ -99,6 +106,7 @@ public class ConquestMenu extends FPopupMenu { FScreen currentScreen = Forge.getCurrentScreen(); addItem(mapItem); mapItem.setSelected(currentScreen == mapScreen); addItem(commandersItem); commandersItem.setSelected(currentScreen == commandersScreen); + addItem(collectionItem); collectionItem.setSelected(currentScreen == collectionScreen); addItem(prefsItem); prefsItem.setSelected(currentScreen == prefsScreen); } } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java index 32987d9fd78..c02193694e5 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java @@ -22,6 +22,10 @@ import forge.assets.ISkinImage; import forge.deck.Deck; import forge.item.InventoryItem; import forge.item.PaperCard; +import forge.itemmanager.ColumnDef; +import forge.itemmanager.IItemManager; +import forge.itemmanager.ItemColumn; +import forge.itemmanager.ItemManagerConfig; import forge.model.FModel; import forge.planarconquest.ConquestPlane.Region; import forge.properties.ForgeConstants; @@ -29,12 +33,12 @@ import forge.util.ItemPool; import java.io.File; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.EnumMap; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import com.google.common.base.Function; @@ -54,8 +58,10 @@ public final class ConquestData { private ISkinImage planeswalkerToken; private ConquestLocation currentLocation; + private transient ConquestCollection collection; //don't serialize this + private final EnumMap planeDataMap = new EnumMap(ConquestPlane.class); - private final HashSet collection = new HashSet(); + private final HashSet unlockedCards = new HashSet(); private final List commanders = new ArrayList(); private final HashMap decks = new HashMap(); private final ItemPool decksUsingMyCards = new ItemPool(InventoryItem.class); @@ -120,25 +126,37 @@ public final class ConquestData { return getOrCreatePlaneData(getCurrentPlane()); } - public Iterable getCollection() { - return collection; + public void populateCollectionManager(IItemManager manager) { + if (collection == null) { + collection = new ConquestCollection(); + } + manager.setPool(collection, true); + } + + public Iterable getUnlockedCards() { + return unlockedCards; } public boolean hasUnlockedCard(PaperCard card) { - return collection.contains(card); + return unlockedCards.contains(card); } public void unlockCard(PaperCard card) { - collection.add(card); - newCards.add(card); + if (unlockedCards.add(card)) { + newCards.add(card); + if (collection != null) { + collection.add(card); + } + } } - public void unlockCards(Collection cards) { - collection.addAll(cards); - newCards.addAll(cards); + public void unlockCards(Iterable cards) { + for (PaperCard card : cards) { + unlockCard(card); + } } public int getUnlockedCount() { - return collection.size(); + return unlockedCards.size(); } public Iterable getCommanders() { @@ -211,28 +229,28 @@ public final class ConquestData { return newCards; } - public final Function, Comparable> fnNewCompare = + private final Function, Comparable> fnNewCompare = new Function, Comparable>() { @Override public Comparable apply(final Entry from) { return newCards.contains(from.getKey()) ? Integer.valueOf(1) : Integer.valueOf(0); } }; - public final Function, Object> fnNewGet = + private final Function, Object> fnNewGet = new Function, Object>() { @Override public Object apply(final Entry from) { return newCards.contains(from.getKey()) ? "NEW" : ""; } }; - public final Function, Comparable> fnDeckCompare = new Function, Comparable>() { + private final Function, Comparable> fnDeckCompare = new Function, Comparable>() { @Override public Comparable apply(final Entry from) { final Integer iValue = decksUsingMyCards.count(from.getKey()); return iValue == null ? Integer.valueOf(0) : iValue; } }; - public final Function, Object> fnDeckGet = new Function, Object>() { + private final Function, Object> fnDeckGet = new Function, Object>() { @Override public Object apply(final Entry from) { final Integer iValue = decksUsingMyCards.count(from.getKey()); @@ -240,6 +258,13 @@ public final class ConquestData { } }; + public Map getColOverrides(ItemManagerConfig config) { + Map colOverrides = new HashMap(); + ItemColumn.addColOverride(config, colOverrides, ColumnDef.NEW, fnNewCompare, fnNewGet); + ItemColumn.addColOverride(config, colOverrides, ColumnDef.DECKS, fnDeckCompare, fnDeckGet); + return colOverrides; + } + public List getPath(ConquestLocation destLoc) { PathFinder pathFinder = new PathFinder(); return pathFinder.findPath(destLoc); @@ -403,4 +428,19 @@ public final class ConquestData { } } } + + @SuppressWarnings("serial") + private class ConquestCollection extends ItemPool { + private ConquestCollection() { + super(PaperCard.class); + + //initialize to contain all available cards, with unlocked + //having a count of 1 and the rest having a count of 0 + for (ConquestPlane plane : ConquestPlane.values()) { + for (PaperCard card : plane.getCardPool().getAllCards()) { + items.put(card, hasUnlockedCard(card) ? 1 : 0); + } + } + } + } } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java index 872a19c3f44..8d84dd3d822 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java @@ -95,7 +95,7 @@ public class ConquestUtil { public static CardPool getAvailablePool(Deck deck) { HashSet availableCards = new HashSet(); - for (PaperCard pc : FModel.getConquest().getModel().getCollection()) { + for (PaperCard pc : FModel.getConquest().getModel().getUnlockedCards()) { availableCards.add(pc); }