From 1a1364e574070a26f9dbd04a7aaea1feb8234361 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 6 Dec 2015 22:45:57 +0000 Subject: [PATCH] Add Commanders screen for Planar Conquest --- .gitattributes | 6 +- forge-gui-mobile/src/forge/card/CardZoom.java | 4 + .../src/forge/itemmanager/DeckManager.java | 3 +- .../itemmanager/filters/CardColorFilter.java | 17 +- .../itemmanager/filters/ColorFilter.java | 22 ++ .../itemmanager/filters/ComboBoxFilter.java | 82 +++++++ .../itemmanager/filters/DeckColorFilter.java | 14 +- .../itemmanager/filters/DeckSearchFilter.java | 19 -- .../ConquestCommandersScreen.java | 229 ++++++++++++++++++ .../screens/planarconquest/ConquestMenu.java | 8 + .../planarconquest/LoadConquestScreen.java | 2 +- .../forge/itemmanager/ItemManagerConfig.java | 2 + .../planarconquest/ConquestCommander.java | 52 +++- .../planarconquest/ConquestController.java | 14 +- .../forge/planarconquest/ConquestData.java | 24 +- .../forge/planarconquest/ConquestPlane.java | 4 + .../planarconquest/ConquestPlaneData.java | 17 +- ...stEventResult.java => ConquestRecord.java} | 2 +- .../forge/planarconquest/ConquestUtil.java | 5 +- 19 files changed, 445 insertions(+), 81 deletions(-) create mode 100644 forge-gui-mobile/src/forge/itemmanager/filters/ColorFilter.java create mode 100644 forge-gui-mobile/src/forge/itemmanager/filters/ComboBoxFilter.java delete mode 100644 forge-gui-mobile/src/forge/itemmanager/filters/DeckSearchFilter.java create mode 100644 forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java rename forge-gui/src/main/java/forge/planarconquest/{ConquestEventResult.java => ConquestRecord.java} (83%) diff --git a/.gitattributes b/.gitattributes index c378ad80a5b..3ecef064158 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1259,10 +1259,11 @@ forge-gui-mobile/src/forge/itemmanager/filters/CardPowerFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/CardSearchFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/CardToughnessFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/CardTypeFilter.java -text +forge-gui-mobile/src/forge/itemmanager/filters/ColorFilter.java -text +forge-gui-mobile/src/forge/itemmanager/filters/ComboBoxFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/DeckColorFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/DeckFolderFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/DeckFormatFilter.java -text -forge-gui-mobile/src/forge/itemmanager/filters/DeckSearchFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/DeckStatTypeFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/ItemFilter.java -text @@ -1333,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/ConquestCommandersScreen.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/ConquestMenu.java -text @@ -18298,11 +18300,11 @@ forge-gui/src/main/java/forge/planarconquest/ConquestData.java -text forge-gui/src/main/java/forge/planarconquest/ConquestDataIO.java -text forge-gui/src/main/java/forge/planarconquest/ConquestDeckMap.java -text forge-gui/src/main/java/forge/planarconquest/ConquestEvent.java -text -forge-gui/src/main/java/forge/planarconquest/ConquestEventResult.java -text forge-gui/src/main/java/forge/planarconquest/ConquestLocation.java -text forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java -text forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java -text forge-gui/src/main/java/forge/planarconquest/ConquestPreferences.java -text +forge-gui/src/main/java/forge/planarconquest/ConquestRecord.java -text forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java -text forge-gui/src/main/java/forge/player/GamePlayerUtil.java -text forge-gui/src/main/java/forge/player/HumanCostDecision.java -text diff --git a/forge-gui-mobile/src/forge/card/CardZoom.java b/forge-gui-mobile/src/forge/card/CardZoom.java index 1e6343101c7..219dcf98065 100644 --- a/forge-gui-mobile/src/forge/card/CardZoom.java +++ b/forge-gui-mobile/src/forge/card/CardZoom.java @@ -16,6 +16,7 @@ import forge.game.card.CardView; import forge.item.IPaperCard; import forge.item.InventoryItem; import forge.model.FModel; +import forge.planarconquest.ConquestCommander; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.screens.match.MatchController; @@ -126,6 +127,9 @@ public class CardZoom extends FOverlay { if (item instanceof IPaperCard) { return CardView.getCardForUi((IPaperCard)item); } + if (item instanceof ConquestCommander) { + return CardView.getCardForUi(((ConquestCommander)item).getCard()); + } if (item instanceof InventoryItem) { InventoryItem ii = (InventoryItem)item; return new CardView(-1, null, ii.getName(), null, ImageKeys.getImageKey(ii, false)); diff --git a/forge-gui-mobile/src/forge/itemmanager/DeckManager.java b/forge-gui-mobile/src/forge/itemmanager/DeckManager.java index f0845d0de12..67a767e8557 100644 --- a/forge-gui-mobile/src/forge/itemmanager/DeckManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/DeckManager.java @@ -15,7 +15,6 @@ import forge.game.IHasGameType; import forge.itemmanager.filters.AdvancedSearchFilter; import forge.itemmanager.filters.DeckColorFilter; import forge.itemmanager.filters.DeckFormatFilter; -import forge.itemmanager.filters.DeckSearchFilter; import forge.itemmanager.filters.TextSearchFilter; import forge.toolbox.FList; import forge.toolbox.FList.CompactModeHandler; @@ -70,7 +69,7 @@ public final class DeckManager extends ItemManager implements IHasGam @Override protected TextSearchFilter createSearchFilter() { - return new DeckSearchFilter(this); + return new TextSearchFilter(this); } @Override diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/CardColorFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/CardColorFilter.java index 9b715022db6..ba4f788ce8d 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/CardColorFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/CardColorFilter.java @@ -5,10 +5,9 @@ import com.google.common.base.Predicate; import forge.item.PaperCard; import forge.itemmanager.ItemManager; import forge.itemmanager.SFilterUtil; -import forge.itemmanager.SItemManagerUtil.StatTypes; -public class CardColorFilter extends StatTypeFilter { +public class CardColorFilter extends ColorFilter { public CardColorFilter(ItemManager itemManager0) { super(itemManager0); } @@ -18,20 +17,6 @@ public class CardColorFilter extends StatTypeFilter { return new CardColorFilter(itemManager); } - @Override - protected void buildWidget(Widget widget) { - /*if (itemManager instanceof SpellShopManager) { - addToggleButton(widget, StatTypes.PACK_OR_DECK); - }*/ - addToggleButton(widget, StatTypes.WHITE); - addToggleButton(widget, StatTypes.BLUE); - addToggleButton(widget, StatTypes.BLACK); - addToggleButton(widget, StatTypes.RED); - addToggleButton(widget, StatTypes.GREEN); - addToggleButton(widget, StatTypes.COLORLESS); - addToggleButton(widget, StatTypes.MULTICOLOR); - } - @Override protected final Predicate buildPredicate() { return SFilterUtil.buildColorFilter(buttonMap); diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/ColorFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/ColorFilter.java new file mode 100644 index 00000000000..325afc88178 --- /dev/null +++ b/forge-gui-mobile/src/forge/itemmanager/filters/ColorFilter.java @@ -0,0 +1,22 @@ +package forge.itemmanager.filters; + +import forge.item.InventoryItem; +import forge.itemmanager.ItemManager; +import forge.itemmanager.SItemManagerUtil.StatTypes; + +public abstract class ColorFilter extends StatTypeFilter { + public ColorFilter(ItemManager itemManager0) { + super(itemManager0); + } + + @Override + protected void buildWidget(Widget widget) { + addToggleButton(widget, StatTypes.WHITE); + addToggleButton(widget, StatTypes.BLUE); + addToggleButton(widget, StatTypes.BLACK); + addToggleButton(widget, StatTypes.RED); + addToggleButton(widget, StatTypes.GREEN); + addToggleButton(widget, StatTypes.COLORLESS); + addToggleButton(widget, StatTypes.MULTICOLOR); + } +} diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/ComboBoxFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/ComboBoxFilter.java new file mode 100644 index 00000000000..9ce73a7875d --- /dev/null +++ b/forge-gui-mobile/src/forge/itemmanager/filters/ComboBoxFilter.java @@ -0,0 +1,82 @@ +package forge.itemmanager.filters; + +import forge.assets.FSkinFont; +import forge.item.InventoryItem; +import forge.itemmanager.ItemManager; +import forge.toolbox.FComboBox; +import forge.toolbox.FDisplayObject; +import forge.toolbox.FEvent; +import forge.toolbox.FEvent.FEventHandler; + +public abstract class ComboBoxFilter extends ItemFilter { + protected V filterValue; + private boolean preventHandling = false; + private FComboBox comboBox = new FComboBox(); + + protected ComboBoxFilter(String allText, Iterable values, ItemManager itemManager0) { + this(allText, itemManager0); + for (V value : values) { + comboBox.addItem(value); + } + } + protected ComboBoxFilter(String allText, V[] values, ItemManager itemManager0) { + this(allText, itemManager0); + for (V value : values) { + comboBox.addItem(value); + } + } + private ComboBoxFilter(String allText, ItemManager itemManager0) { + super(itemManager0); + + comboBox.setFont(FSkinFont.get(12)); + comboBox.addItem(allText); + comboBox.setChangedHandler(new FEventHandler() { + @SuppressWarnings("unchecked") + @Override + public void handleEvent(FEvent e) { + if (preventHandling) { return; } + + int index = comboBox.getSelectedIndex(); + if (index == -1) { + //Do nothing when index set to -1 + } + else if (index == 0) { + filterValue = null; + applyChange(); + } + else { + filterValue = (V)comboBox.getSelectedItem(); + applyChange(); + } + } + }); + } + + @Override + public void reset() { + preventHandling = true; + comboBox.setSelectedIndex(0); + preventHandling = false; + filterValue = null; + } + + @Override + public FDisplayObject getMainComponent() { + return comboBox; + } + + @Override + public boolean isEmpty() { + return filterValue == null; + } + + @Override + protected void buildWidget(Widget widget) { + widget.add(comboBox); + } + + @Override + protected void doWidgetLayout(float width, float height) { + comboBox.setSize(width, height); + } +} diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/DeckColorFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/DeckColorFilter.java index 4f8ba45c266..8205570374f 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/DeckColorFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/DeckColorFilter.java @@ -5,10 +5,9 @@ import com.google.common.base.Predicate; import forge.deck.DeckProxy; import forge.itemmanager.ItemManager; import forge.itemmanager.SFilterUtil; -import forge.itemmanager.SItemManagerUtil.StatTypes; -public class DeckColorFilter extends StatTypeFilter { +public class DeckColorFilter extends ColorFilter { public DeckColorFilter(ItemManager itemManager0) { super(itemManager0); } @@ -18,17 +17,6 @@ public class DeckColorFilter extends StatTypeFilter { return new DeckColorFilter(itemManager); } - @Override - protected void buildWidget(Widget widget) { - addToggleButton(widget, StatTypes.DECK_WHITE); - addToggleButton(widget, StatTypes.DECK_BLUE); - addToggleButton(widget, StatTypes.DECK_BLACK); - addToggleButton(widget, StatTypes.DECK_RED); - addToggleButton(widget, StatTypes.DECK_GREEN); - addToggleButton(widget, StatTypes.DECK_COLORLESS); - addToggleButton(widget, StatTypes.DECK_MULTICOLOR); - } - @Override protected final Predicate buildPredicate() { return SFilterUtil.buildDeckColorFilter(buttonMap); diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/DeckSearchFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/DeckSearchFilter.java deleted file mode 100644 index 22963962993..00000000000 --- a/forge-gui-mobile/src/forge/itemmanager/filters/DeckSearchFilter.java +++ /dev/null @@ -1,19 +0,0 @@ -package forge.itemmanager.filters; - -import forge.deck.DeckProxy; -import forge.itemmanager.ItemManager; - - -public class DeckSearchFilter extends TextSearchFilter { - public DeckSearchFilter(ItemManager itemManager0) { - super(itemManager0); - } - - @Override - public ItemFilter createCopy() { - DeckSearchFilter copy = new DeckSearchFilter(itemManager); - copy.getWidget(); //initialize widget - copy.txtSearch.setText(this.txtSearch.getText()); - return copy; - } -} diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java new file mode 100644 index 00000000000..54814120fe5 --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java @@ -0,0 +1,229 @@ +package forge.screens.planarconquest; + +import java.util.Map.Entry; + +import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; +import com.google.common.base.Predicate; + +import forge.Forge; +import forge.Graphics; +import forge.assets.FImage; +import forge.assets.FSkinColor; +import forge.assets.FSkinFont; +import forge.card.CardFaceSymbols; +import forge.card.CardRenderer; +import forge.card.ColorSet; +import forge.deck.FDeckChooser; +import forge.deck.FDeckViewer; +import forge.item.PaperCard; +import forge.itemmanager.ItemManager; +import forge.itemmanager.ItemManagerConfig; +import forge.itemmanager.SFilterUtil; +import forge.itemmanager.filters.AdvancedSearchFilter; +import forge.itemmanager.filters.ColorFilter; +import forge.itemmanager.filters.ComboBoxFilter; +import forge.itemmanager.filters.ItemFilter; +import forge.itemmanager.filters.TextSearchFilter; +import forge.model.FModel; +import forge.planarconquest.ConquestCommander; +import forge.planarconquest.ConquestPlane; +import forge.planarconquest.ConquestRecord; +import forge.screens.FScreen; +import forge.toolbox.FEvent; +import forge.toolbox.FLabel; +import forge.toolbox.FList; +import forge.toolbox.FEvent.FEventHandler; +import forge.toolbox.FList.CompactModeHandler; + +public class ConquestCommandersScreen extends FScreen { + private final CommanderManager lstCommanders = add(new CommanderManager()); + private final FLabel lblTip = add(new FLabel.Builder() + .text("Double-tap to edit deck (Long-press to view)") + .textColor(FLabel.INLINE_LABEL_COLOR) + .align(HAlignment.CENTER).font(FSkinFont.get(12)).build()); + + private boolean needRefreshOnActivate = true; + + public ConquestCommandersScreen() { + super("", ConquestMenu.getMenu()); + + lstCommanders.setup(ItemManagerConfig.CONQUEST_COMMANDERS); + lstCommanders.setItemActivateHandler(new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + editSelectedDeck(); + } + }); + } + + @Override + public void onActivate() { + setHeaderCaption(FModel.getConquest().getName()); + + if (needRefreshOnActivate) { + needRefreshOnActivate = false; + refreshCommanders(); + } + } + + public void refreshCommanders() { + lstCommanders.setPool(FModel.getConquest().getModel().getCommanders()); + lstCommanders.setup(ItemManagerConfig.CONQUEST_COMMANDERS); + } + + private void editSelectedDeck() { + final ConquestCommander commander = lstCommanders.getSelectedItem(); + if (commander == null) { return; } + + needRefreshOnActivate = true; + Forge.openScreen(new ConquestDeckEditor(commander)); + } + + @Override + protected void doLayout(float startY, float width, float height) { + float x = ItemFilter.PADDING; + float y = startY; + float w = width - 2 * x; + float labelHeight = lblTip.getAutoSizeBounds().height; + float listHeight = height - labelHeight - y - 2 * FDeckChooser.PADDING; + + lstCommanders.setBounds(x, y, w, listHeight); + y += listHeight + FDeckChooser.PADDING; + lblTip.setBounds(x, y, w, labelHeight); + } + + private static class CommanderManager extends ItemManager { + private CommanderManager() { + super(ConquestCommander.class, true); + setCaption("Commanders"); + } + + @Override + protected void addDefaultFilters() { + addFilter(new CommanderColorFilter(this)); + addFilter(new CommanderOriginFilter(this)); + } + + @Override + protected TextSearchFilter createSearchFilter() { + return new TextSearchFilter(this); + } + + @Override + protected AdvancedSearchFilter createAdvancedSearchFilter() { + return new AdvancedSearchFilter(this); + } + + @Override + public ItemRenderer getListItemRenderer(final CompactModeHandler compactModeHandler) { + return new ItemRenderer() { + @Override + public float getItemHeight() { + return CardRenderer.getCardListItemHeight(compactModeHandler.isCompactMode()); //use same height for commanders as for cards + } + + @Override + public boolean tap(Integer index, Entry value, float x, float y, int count) { + return CardRenderer.cardListItemTap(model.getOrderedList(), index, CommanderManager.this, x, y, count, compactModeHandler.isCompactMode()); + } + + @Override + public boolean longPress(Integer index, Entry value, float x, float y) { + FDeckViewer.show(value.getKey().getDeck()); + return true; + } + + @Override + public void drawValue(Graphics g, Entry value, FSkinFont font, FSkinColor foreColor, FSkinColor backColor, boolean pressed, float x, float y, float w, float h) { + ConquestCommander commander = value.getKey(); + PaperCard card = commander.getCard(); + ConquestRecord record = commander.getRecord(); + + //draw card art + FImage cardArt = CardRenderer.getCardArt(card); + float cardArtHeight = h + 2 * FList.PADDING; + float cardArtWidth = cardArtHeight * CardRenderer.CARD_ART_RATIO; + if (cardArt != null) { + g.drawImage(cardArt, x - FList.PADDING, y - FList.PADDING, cardArtWidth, cardArtHeight); + } + + //draw name and color on first line + x += cardArtWidth; + float imageSize = CardRenderer.MANA_SYMBOL_SIZE; + ColorSet cardColor = card.getRules().getColor(); + float availableWidth = w - cardArtWidth - CardFaceSymbols.getWidth(cardColor, imageSize) - FList.PADDING; + g.drawText(card.getName(), font, foreColor, x, y, availableWidth, imageSize, false, HAlignment.LEFT, true); + CardFaceSymbols.drawColorSet(g, cardColor, x + availableWidth + FList.PADDING, y, imageSize); + + if (compactModeHandler.isCompactMode()) { + return; //skip second line if compact mode + } + + //draw origin, record, and set/rarity on second line + font = FSkinFont.get(12); + float lineHeight = font.getLineHeight(); + + y += imageSize + FList.PADDING + CardRenderer.SET_BOX_MARGIN; + String set = card.getEdition(); + float setWidth = CardRenderer.getSetWidth(font, set); + availableWidth = w - cardArtWidth - setWidth; + + g.drawText(commander.getOrigin() + " (" + record.getWins() + "W / " + record.getLosses() + "L)", font, foreColor, x, y, availableWidth, lineHeight, false, HAlignment.LEFT, true); + + x += availableWidth + CardRenderer.SET_BOX_MARGIN; + y -= CardRenderer.SET_BOX_MARGIN; + CardRenderer.drawSetLabel(g, font, set, card.getRarity(), x, y, setWidth, lineHeight + 2 * CardRenderer.SET_BOX_MARGIN); + } + }; + } + } + + private static class CommanderColorFilter extends ColorFilter { + public CommanderColorFilter(ItemManager itemManager0) { + super(itemManager0); + } + + @Override + public ItemFilter createCopy() { + return new CommanderColorFilter(itemManager); + } + + @Override + protected final Predicate buildPredicate() { + return new Predicate() { + private final Predicate pred = SFilterUtil.buildColorFilter(buttonMap); + + @Override + public boolean apply(ConquestCommander input) { + return pred.apply(input.getCard()); + } + }; + } + } + + private static class CommanderOriginFilter extends ComboBoxFilter { + public CommanderOriginFilter(ItemManager itemManager0) { + super("All Planes", ConquestPlane.values(), itemManager0); + } + + @Override + public ItemFilter createCopy() { + CommanderOriginFilter copy = new CommanderOriginFilter(itemManager); + copy.filterValue = filterValue; + return copy; + } + + @Override + protected Predicate buildPredicate() { + return new Predicate() { + @Override + public boolean apply(ConquestCommander input) { + if (filterValue == null) { + return true; + } + return input.getOriginPlane() == filterValue; + } + }; + } + } +} diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java index a3f7d302558..d5e62198200 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java @@ -23,6 +23,7 @@ import forge.toolbox.FEvent.FEventHandler; 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 ConquestPrefsScreen prefsScreen = new ConquestPrefsScreen(); private static final FMenuItem mapItem = new FMenuItem("Planar Map", FSkinImage.QUEST_MAP, new FEventHandler() { @@ -31,6 +32,12 @@ public class ConquestMenu extends FPopupMenu { Forge.openScreen(mapScreen); } }); + private static final FMenuItem commandersItem = new FMenuItem("Commanders", FSkinImage.DECKLIST, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + Forge.openScreen(commandersScreen); + } + }); private static final FMenuItem prefsItem = new FMenuItem("Preferences", FSkinImage.SETTINGS, new FEventHandler() { @Override public void handleEvent(FEvent e) { @@ -91,6 +98,7 @@ public class ConquestMenu extends FPopupMenu { protected void buildMenu() { FScreen currentScreen = Forge.getCurrentScreen(); addItem(mapItem); mapItem.setSelected(currentScreen == mapScreen); + addItem(commandersItem); mapItem.setSelected(currentScreen == commandersScreen); addItem(prefsItem); prefsItem.setSelected(currentScreen == prefsScreen); } } diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/LoadConquestScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/LoadConquestScreen.java index d9a0d500001..5f54b1d7eeb 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/LoadConquestScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/LoadConquestScreen.java @@ -298,7 +298,7 @@ public class LoadConquestScreen extends LaunchScreen { float iconSize = h + Utils.scale(1); float iconOffset = SettingsScreen.SETTING_PADDING - Utils.scale(2); - String cards = String.valueOf(value.getCollection().size()); + String cards = String.valueOf(value.getUnlockedCount()); font = FSkinFont.get(12); float cardsWidth = font.getBounds(cards).width + iconSize + SettingsScreen.SETTING_PADDING; g.drawText(value.getPlaneswalker().getName() + " - " + value.getCurrentPlane().getName(), font, SettingsScreen.DESC_COLOR, x, y, w - cardsWidth, h, false, HAlignment.LEFT, false); diff --git a/forge-gui/src/main/java/forge/itemmanager/ItemManagerConfig.java b/forge-gui/src/main/java/forge/itemmanager/ItemManagerConfig.java index f6bdbdd9528..9fd2c9dc72e 100644 --- a/forge-gui/src/main/java/forge/itemmanager/ItemManagerConfig.java +++ b/forge-gui/src/main/java/forge/itemmanager/ItemManagerConfig.java @@ -42,6 +42,8 @@ public enum ItemManagerConfig { null, null, 4, 0), QUEST_DECK_EDITOR(SColumnUtil.getQuestDeckEditorDefaultColumns(), false, false, false, GroupDef.DEFAULT, ColumnDef.CMC, 4, 1), + CONQUEST_COMMANDERS(SColumnUtil.getDecksDefaultColumns(true, false), false, false, false, + null, null, 3, 0), CONQUEST_COLLECTION(SColumnUtil.getConquestCollectionDefaultColumns(), false, false, false, null, null, 4, 0), CONQUEST_DECK_EDITOR(SColumnUtil.getConquestDeckEditorDefaultColumns(), false, false, false, diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java b/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java index 67c9635f1ed..57a65d820fa 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java @@ -2,19 +2,45 @@ package forge.planarconquest; import forge.deck.Deck; import forge.deck.generation.DeckGenPool; +import forge.item.InventoryItem; import forge.item.PaperCard; +import forge.planarconquest.ConquestPlane.Region; -public class ConquestCommander { +public class ConquestCommander implements InventoryItem { private final PaperCard card; private final Deck deck; + private final ConquestRecord record; + private final ConquestPlane originPlane; + private final String originRegionName; public ConquestCommander(PaperCard card0) { - card = card0; - deck = new Deck(card0.getName()); + this(card0, new Deck(card0.getName())); } public ConquestCommander(PaperCard card0, DeckGenPool cardPool0, boolean forAi) { + this(card0, ConquestUtil.generateDeck(card0, cardPool0, forAi)); + } + private ConquestCommander(PaperCard card0, Deck deck0) { card = card0; - deck = ConquestUtil.generateDeck(card0, cardPool0, forAi); + deck = deck0; + record = new ConquestRecord(); + + //determine origin of commander + ConquestPlane originPlane0 = null; + String originRegionName0 = null; + for (ConquestPlane plane : ConquestPlane.values()) { + if (plane.getCommanders().contains(card)) { + originPlane0 = plane; + for (Region region : plane.getRegions()) { + if (region.getCommanders().contains(card)) { + originRegionName0 = region.getName(); + break; + } + } + break; + } + } + originPlane = originPlane0; + originRegionName = originRegionName0; } public String getName() { @@ -41,6 +67,24 @@ public class ConquestCommander { return deck; } + public ConquestRecord getRecord() { + return record; + } + + public String getOrigin() { + return originPlane.getName() + " - " + originRegionName; + } + + public ConquestPlane getOriginPlane() { + return originPlane; + } + + @Override + public String getItemType() { + return "Commander"; + } + + @Override public String toString() { return card.getName(); } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestController.java b/forge-gui/src/main/java/forge/planarconquest/ConquestController.java index 4d309e4788d..f8dbbc76f93 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestController.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestController.java @@ -283,7 +283,7 @@ public class ConquestController { List mythics = new ArrayList(); int newCardCount = 0; for (PaperCard c : cardPool) { - if ((pred == null || pred.apply(c.getRules())) && !model.getCollection().contains(c)) { + if ((pred == null || pred.apply(c.getRules())) && !model.hasUnlockedCard(c)) { switch (c.getRarity()) { case Common: commons.add(c); @@ -439,7 +439,7 @@ public class ConquestController { } } - model.addCardsToCollection(rewards); + model.unlockCards(rewards); String message = messagePrefix; if (messageSuffix != null) { @@ -513,7 +513,7 @@ public class ConquestController { } BoosterUtils.sort(rewards); - model.addCardsToCollection(rewards); + model.unlockCards(rewards); view.showCards("Booster contained " + count + " new card" + (count != 1 ? "s" : ""), rewards); } @@ -521,7 +521,7 @@ public class ConquestController { List cards = new ArrayList(); for (Entry entry : gameRunner.event.getOpponentDeck().getMain()) { PaperCard c = entry.getKey(); - if (!c.getRules().getType().isBasicLand() && !getModel().getCollection().contains(c)) { + if (!c.getRules().getType().isBasicLand() && !getModel().hasUnlockedCard(c)) { cards.add(c); } } @@ -530,7 +530,7 @@ public class ConquestController { BoosterUtils.sort(cards); PaperCard card = SGuiChoose.one("Choose a card from your opponent's deck", cards); - model.addCardToCollection(card); + model.unlockCard(card); return true; } @@ -548,7 +548,7 @@ public class ConquestController { } private void add(PaperCard c) { - if (!model.getCollection().contains(c)) { + if (!model.hasUnlockedCard(c)) { newCount++; } cards.add(c); @@ -564,7 +564,7 @@ public class ConquestController { int index = Aggregates.randomInt(0, cards.size() - 1); c = cards.get(index); - if (!model.getCollection().contains(c)) { + if (!model.hasUnlockedCard(c)) { newCount--; cards.remove(c); rewards.add(c); diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java index 058c86efdc9..32987d9fd78 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java @@ -70,13 +70,13 @@ public final class ConquestData { currentLocation = new ConquestLocation(startingPlane, -1, 0, Region.PORTAL_COL); planeswalker = planeswalker0; planeswalkerToken = PlaneswalkerAchievements.getTrophyImage(planeswalker.getName()); - addCardToCollection(planeswalker); + unlockCard(planeswalker); //generate deck for starting commander and add all cards to collection ConquestCommander commander = new ConquestCommander(startingCommander0, startingPlane.getCardPool(), false); commanders.add(commander); - addCardToCollection(startingCommander0); - addCardsToCollection(commander.getDeck().getMain().toFlatList()); + unlockCard(startingCommander0); + unlockCards(commander.getDeck().getMain().toFlatList()); decks.put(commander.getDeck().getName(), commander.getDeck()); } @@ -120,19 +120,31 @@ public final class ConquestData { return getOrCreatePlaneData(getCurrentPlane()); } - public HashSet getCollection() { + public Iterable getCollection() { return collection; } - public void addCardToCollection(PaperCard card) { + public boolean hasUnlockedCard(PaperCard card) { + return collection.contains(card); + } + + public void unlockCard(PaperCard card) { collection.add(card); newCards.add(card); } - public void addCardsToCollection(Collection cards) { + public void unlockCards(Collection cards) { collection.addAll(cards); newCards.addAll(cards); } + public int getUnlockedCount() { + return collection.size(); + } + + public Iterable getCommanders() { + return commanders; + } + public ConquestDeckMap getDeckStorage() { return new ConquestDeckMap(decks); } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java b/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java index fce2806cfd2..a754157b4c9 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java @@ -357,6 +357,10 @@ public enum ConquestPlane { return cardPool; } + public FCollectionView getCommanders() { + return commanders; + } + public String toString() { return name; } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java index b975f6f8422..803607d37c3 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java @@ -1,17 +1,16 @@ package forge.planarconquest; -import java.util.HashSet; import forge.item.PaperCard; import forge.model.FModel; import forge.planarconquest.ConquestPlane.Region; public class ConquestPlaneData { private final ConquestPlane plane; - private final ConquestEventResult[] eventResults; + private final ConquestRecord[] eventResults; public ConquestPlaneData(ConquestPlane plane0) { plane = plane0; - eventResults = new ConquestEventResult[plane.getEventCount()]; + eventResults = new ConquestRecord[plane.getEventCount()]; } public boolean hasConqueredBoss() { @@ -30,16 +29,16 @@ public class ConquestPlaneData { return hasConquered(regionIndex * Region.ROWS_PER_REGION * Region.COLS_PER_REGION + row * Region.COLS_PER_REGION + col); } private boolean hasConquered(int index) { - ConquestEventResult result = eventResults[index]; + ConquestRecord result = eventResults[index]; return result != null && result.getWins() > 0; } - private ConquestEventResult getOrCreateResult(ConquestEvent event) { + private ConquestRecord getOrCreateResult(ConquestEvent event) { ConquestLocation loc = event.getLocation(); int index = loc.getRegionIndex() * Region.ROWS_PER_REGION * Region.COLS_PER_REGION + loc.getRow() * Region.COLS_PER_REGION + loc.getCol(); - ConquestEventResult result = eventResults[index]; + ConquestRecord result = eventResults[index]; if (result == null) { - result = new ConquestEventResult(); + result = new ConquestRecord(); eventResults[index] = result; } return result; @@ -65,9 +64,9 @@ public class ConquestPlaneData { public int getUnlockedCount() { int count = 0; - HashSet collection = FModel.getConquest().getModel().getCollection(); + ConquestData model = FModel.getConquest().getModel(); for (PaperCard pc : plane.getCardPool().getAllCards()) { - if (collection.contains(pc)) { + if (model.hasUnlockedCard(pc)) { count++; } } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestEventResult.java b/forge-gui/src/main/java/forge/planarconquest/ConquestRecord.java similarity index 83% rename from forge-gui/src/main/java/forge/planarconquest/ConquestEventResult.java rename to forge-gui/src/main/java/forge/planarconquest/ConquestRecord.java index 7a490205cc1..e3f26653c79 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestEventResult.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestRecord.java @@ -1,6 +1,6 @@ package forge.planarconquest; -public class ConquestEventResult { +public class ConquestRecord { private int wins, losses; public int getWins() { diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java index de82ba52de5..872a19c3f44 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java @@ -94,7 +94,10 @@ public class ConquestUtil { } public static CardPool getAvailablePool(Deck deck) { - HashSet availableCards = new HashSet(FModel.getConquest().getModel().getCollection()); + HashSet availableCards = new HashSet(); + for (PaperCard pc : FModel.getConquest().getModel().getCollection()) { + availableCards.add(pc); + } //remove all cards in main deck for (Entry e : deck.getMain()) {