mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Add Collection screen for Planar Conquest
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -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/OnlineChatScreen.java -text
|
||||||
forge-gui-mobile/src/forge/screens/online/OnlineLobbyScreen.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/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/ConquestCommandersScreen.java -text
|
||||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java -text
|
forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java -text
|
||||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java -text
|
forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java -text
|
||||||
|
|||||||
@@ -45,6 +45,10 @@ public class DeckGenPool implements IDeckGenPool {
|
|||||||
return cards.get(name);
|
return cards.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean contains(PaperCard card) {
|
||||||
|
return cards.containsKey(card.getName());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterable<PaperCard> getAllCards() {
|
public Iterable<PaperCard> getAllCards() {
|
||||||
return cards.values();
|
return cards.values();
|
||||||
|
|||||||
@@ -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<PaperCard, ConquestPlane> {
|
||||||
|
public CardOriginFilter(ItemManager<? super PaperCard> itemManager0) {
|
||||||
|
super("All Planes", ConquestPlane.values(), itemManager0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemFilter<PaperCard> createCopy() {
|
||||||
|
CardOriginFilter copy = new CardOriginFilter(itemManager);
|
||||||
|
copy.filterValue = filterValue;
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Predicate<PaperCard> buildPredicate() {
|
||||||
|
return new Predicate<PaperCard>() {
|
||||||
|
@Override
|
||||||
|
public boolean apply(PaperCard input) {
|
||||||
|
if (filterValue == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return filterValue.getCardPool().contains(input);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package forge.screens.planarconquest;
|
package forge.screens.planarconquest;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import forge.deck.DeckProxy;
|
import forge.deck.DeckProxy;
|
||||||
@@ -11,7 +10,6 @@ import forge.itemmanager.ItemColumn;
|
|||||||
import forge.itemmanager.ItemManagerConfig;
|
import forge.itemmanager.ItemManagerConfig;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.planarconquest.ConquestCommander;
|
import forge.planarconquest.ConquestCommander;
|
||||||
import forge.planarconquest.ConquestData;
|
|
||||||
|
|
||||||
public class ConquestDeckEditor extends FDeckEditor {
|
public class ConquestDeckEditor extends FDeckEditor {
|
||||||
public ConquestDeckEditor(ConquestCommander commander) {
|
public ConquestDeckEditor(ConquestCommander commander) {
|
||||||
@@ -36,10 +34,6 @@ public class ConquestDeckEditor extends FDeckEditor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Map<ColumnDef, ItemColumn> getColOverrides(ItemManagerConfig config) {
|
protected Map<ColumnDef, ItemColumn> getColOverrides(ItemManagerConfig config) {
|
||||||
ConquestData model = FModel.getConquest().getModel();
|
return FModel.getConquest().getModel().getColOverrides(config);
|
||||||
Map<ColumnDef, ItemColumn> colOverrides = new HashMap<ColumnDef, ItemColumn>();
|
|
||||||
ItemColumn.addColOverride(config, colOverrides, ColumnDef.NEW, model.fnNewCompare, model.fnNewGet);
|
|
||||||
ItemColumn.addColOverride(config, colOverrides, ColumnDef.DECKS, model.fnDeckCompare, model.fnDeckGet);
|
|
||||||
return colOverrides;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public class ConquestMenu extends FPopupMenu {
|
|||||||
private static final ConquestMenu conquestMenu = new ConquestMenu();
|
private static final ConquestMenu conquestMenu = new ConquestMenu();
|
||||||
private static final ConquestMapScreen mapScreen = new ConquestMapScreen();
|
private static final ConquestMapScreen mapScreen = new ConquestMapScreen();
|
||||||
private static final ConquestCommandersScreen commandersScreen = new ConquestCommandersScreen();
|
private static final ConquestCommandersScreen commandersScreen = new ConquestCommandersScreen();
|
||||||
|
private static final ConquestCollectionScreen collectionScreen = new ConquestCollectionScreen();
|
||||||
private static final ConquestPrefsScreen prefsScreen = new ConquestPrefsScreen();
|
private static final ConquestPrefsScreen prefsScreen = new ConquestPrefsScreen();
|
||||||
|
|
||||||
private static final FMenuItem mapItem = new FMenuItem("Planar Map", FSkinImage.QUEST_MAP, new FEventHandler() {
|
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);
|
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() {
|
private static final FMenuItem prefsItem = new FMenuItem("Preferences", FSkinImage.SETTINGS, new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
@@ -99,6 +106,7 @@ public class ConquestMenu extends FPopupMenu {
|
|||||||
FScreen currentScreen = Forge.getCurrentScreen();
|
FScreen currentScreen = Forge.getCurrentScreen();
|
||||||
addItem(mapItem); mapItem.setSelected(currentScreen == mapScreen);
|
addItem(mapItem); mapItem.setSelected(currentScreen == mapScreen);
|
||||||
addItem(commandersItem); commandersItem.setSelected(currentScreen == commandersScreen);
|
addItem(commandersItem); commandersItem.setSelected(currentScreen == commandersScreen);
|
||||||
|
addItem(collectionItem); collectionItem.setSelected(currentScreen == collectionScreen);
|
||||||
addItem(prefsItem); prefsItem.setSelected(currentScreen == prefsScreen);
|
addItem(prefsItem); prefsItem.setSelected(currentScreen == prefsScreen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ import forge.assets.ISkinImage;
|
|||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.item.InventoryItem;
|
import forge.item.InventoryItem;
|
||||||
import forge.item.PaperCard;
|
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.model.FModel;
|
||||||
import forge.planarconquest.ConquestPlane.Region;
|
import forge.planarconquest.ConquestPlane.Region;
|
||||||
import forge.properties.ForgeConstants;
|
import forge.properties.ForgeConstants;
|
||||||
@@ -29,12 +33,12 @@ import forge.util.ItemPool;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
@@ -54,8 +58,10 @@ public final class ConquestData {
|
|||||||
private ISkinImage planeswalkerToken;
|
private ISkinImage planeswalkerToken;
|
||||||
private ConquestLocation currentLocation;
|
private ConquestLocation currentLocation;
|
||||||
|
|
||||||
|
private transient ConquestCollection collection; //don't serialize this
|
||||||
|
|
||||||
private final EnumMap<ConquestPlane, ConquestPlaneData> planeDataMap = new EnumMap<ConquestPlane, ConquestPlaneData>(ConquestPlane.class);
|
private final EnumMap<ConquestPlane, ConquestPlaneData> planeDataMap = new EnumMap<ConquestPlane, ConquestPlaneData>(ConquestPlane.class);
|
||||||
private final HashSet<PaperCard> collection = new HashSet<PaperCard>();
|
private final HashSet<PaperCard> unlockedCards = new HashSet<PaperCard>();
|
||||||
private final List<ConquestCommander> commanders = new ArrayList<ConquestCommander>();
|
private final List<ConquestCommander> commanders = new ArrayList<ConquestCommander>();
|
||||||
private final HashMap<String, Deck> decks = new HashMap<String, Deck>();
|
private final HashMap<String, Deck> decks = new HashMap<String, Deck>();
|
||||||
private final ItemPool<InventoryItem> decksUsingMyCards = new ItemPool<InventoryItem>(InventoryItem.class);
|
private final ItemPool<InventoryItem> decksUsingMyCards = new ItemPool<InventoryItem>(InventoryItem.class);
|
||||||
@@ -120,25 +126,37 @@ public final class ConquestData {
|
|||||||
return getOrCreatePlaneData(getCurrentPlane());
|
return getOrCreatePlaneData(getCurrentPlane());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterable<PaperCard> getCollection() {
|
public void populateCollectionManager(IItemManager<PaperCard> manager) {
|
||||||
return collection;
|
if (collection == null) {
|
||||||
|
collection = new ConquestCollection();
|
||||||
|
}
|
||||||
|
manager.setPool(collection, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterable<PaperCard> getUnlockedCards() {
|
||||||
|
return unlockedCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasUnlockedCard(PaperCard card) {
|
public boolean hasUnlockedCard(PaperCard card) {
|
||||||
return collection.contains(card);
|
return unlockedCards.contains(card);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unlockCard(PaperCard card) {
|
public void unlockCard(PaperCard card) {
|
||||||
collection.add(card);
|
if (unlockedCards.add(card)) {
|
||||||
newCards.add(card);
|
newCards.add(card);
|
||||||
|
if (collection != null) {
|
||||||
|
collection.add(card);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public void unlockCards(Collection<PaperCard> cards) {
|
public void unlockCards(Iterable<PaperCard> cards) {
|
||||||
collection.addAll(cards);
|
for (PaperCard card : cards) {
|
||||||
newCards.addAll(cards);
|
unlockCard(card);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUnlockedCount() {
|
public int getUnlockedCount() {
|
||||||
return collection.size();
|
return unlockedCards.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterable<ConquestCommander> getCommanders() {
|
public Iterable<ConquestCommander> getCommanders() {
|
||||||
@@ -211,28 +229,28 @@ public final class ConquestData {
|
|||||||
return newCards;
|
return newCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Function<Entry<InventoryItem, Integer>, Comparable<?>> fnNewCompare =
|
private final Function<Entry<InventoryItem, Integer>, Comparable<?>> fnNewCompare =
|
||||||
new Function<Entry<InventoryItem, Integer>, Comparable<?>>() {
|
new Function<Entry<InventoryItem, Integer>, Comparable<?>>() {
|
||||||
@Override
|
@Override
|
||||||
public Comparable<?> apply(final Entry<InventoryItem, Integer> from) {
|
public Comparable<?> apply(final Entry<InventoryItem, Integer> from) {
|
||||||
return newCards.contains(from.getKey()) ? Integer.valueOf(1) : Integer.valueOf(0);
|
return newCards.contains(from.getKey()) ? Integer.valueOf(1) : Integer.valueOf(0);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
public final Function<Entry<? extends InventoryItem, Integer>, Object> fnNewGet =
|
private final Function<Entry<? extends InventoryItem, Integer>, Object> fnNewGet =
|
||||||
new Function<Entry<? extends InventoryItem, Integer>, Object>() {
|
new Function<Entry<? extends InventoryItem, Integer>, Object>() {
|
||||||
@Override
|
@Override
|
||||||
public Object apply(final Entry<? extends InventoryItem, Integer> from) {
|
public Object apply(final Entry<? extends InventoryItem, Integer> from) {
|
||||||
return newCards.contains(from.getKey()) ? "NEW" : "";
|
return newCards.contains(from.getKey()) ? "NEW" : "";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
public final Function<Entry<InventoryItem, Integer>, Comparable<?>> fnDeckCompare = new Function<Entry<InventoryItem, Integer>, Comparable<?>>() {
|
private final Function<Entry<InventoryItem, Integer>, Comparable<?>> fnDeckCompare = new Function<Entry<InventoryItem, Integer>, Comparable<?>>() {
|
||||||
@Override
|
@Override
|
||||||
public Comparable<?> apply(final Entry<InventoryItem, Integer> from) {
|
public Comparable<?> apply(final Entry<InventoryItem, Integer> from) {
|
||||||
final Integer iValue = decksUsingMyCards.count(from.getKey());
|
final Integer iValue = decksUsingMyCards.count(from.getKey());
|
||||||
return iValue == null ? Integer.valueOf(0) : iValue;
|
return iValue == null ? Integer.valueOf(0) : iValue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
public final Function<Entry<? extends InventoryItem, Integer>, Object> fnDeckGet = new Function<Entry<? extends InventoryItem, Integer>, Object>() {
|
private final Function<Entry<? extends InventoryItem, Integer>, Object> fnDeckGet = new Function<Entry<? extends InventoryItem, Integer>, Object>() {
|
||||||
@Override
|
@Override
|
||||||
public Object apply(final Entry<? extends InventoryItem, Integer> from) {
|
public Object apply(final Entry<? extends InventoryItem, Integer> from) {
|
||||||
final Integer iValue = decksUsingMyCards.count(from.getKey());
|
final Integer iValue = decksUsingMyCards.count(from.getKey());
|
||||||
@@ -240,6 +258,13 @@ public final class ConquestData {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public Map<ColumnDef, ItemColumn> getColOverrides(ItemManagerConfig config) {
|
||||||
|
Map<ColumnDef, ItemColumn> colOverrides = new HashMap<ColumnDef, ItemColumn>();
|
||||||
|
ItemColumn.addColOverride(config, colOverrides, ColumnDef.NEW, fnNewCompare, fnNewGet);
|
||||||
|
ItemColumn.addColOverride(config, colOverrides, ColumnDef.DECKS, fnDeckCompare, fnDeckGet);
|
||||||
|
return colOverrides;
|
||||||
|
}
|
||||||
|
|
||||||
public List<ConquestLocation> getPath(ConquestLocation destLoc) {
|
public List<ConquestLocation> getPath(ConquestLocation destLoc) {
|
||||||
PathFinder pathFinder = new PathFinder();
|
PathFinder pathFinder = new PathFinder();
|
||||||
return pathFinder.findPath(destLoc);
|
return pathFinder.findPath(destLoc);
|
||||||
@@ -403,4 +428,19 @@ public final class ConquestData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
private class ConquestCollection extends ItemPool<PaperCard> {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ public class ConquestUtil {
|
|||||||
|
|
||||||
public static CardPool getAvailablePool(Deck deck) {
|
public static CardPool getAvailablePool(Deck deck) {
|
||||||
HashSet<PaperCard> availableCards = new HashSet<PaperCard>();
|
HashSet<PaperCard> availableCards = new HashSet<PaperCard>();
|
||||||
for (PaperCard pc : FModel.getConquest().getModel().getCollection()) {
|
for (PaperCard pc : FModel.getConquest().getModel().getUnlockedCards()) {
|
||||||
availableCards.add(pc);
|
availableCards.add(pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user