From f3bf978f8e62d78da68b45e78bfd4c32ec03e55c Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 19 Mar 2016 19:06:29 +0000 Subject: [PATCH] Support changing planeswalkers to any you unlock --- .gitattributes | 1 + .../src/forge/card/CardListPreview.java | 2 + .../ConquestCommandersScreen.java | 2 +- .../screens/planarconquest/ConquestMenu.java | 8 ++ .../ConquestPlaneswalkersScreen.java | 84 +++++++++++++++++++ .../planarconquest/NewConquestScreen.java | 5 +- .../forge/planarconquest/ConquestData.java | 11 +++ 7 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkersScreen.java diff --git a/.gitattributes b/.gitattributes index 62915a9aa4a..953d08c7231 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1349,6 +1349,7 @@ forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneSelector.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkScreen.java -text +forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkersScreen.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestPrefsScreen.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestRewardDialog.java -text forge-gui-mobile/src/forge/screens/planarconquest/LoadConquestScreen.java -text diff --git a/forge-gui-mobile/src/forge/card/CardListPreview.java b/forge-gui-mobile/src/forge/card/CardListPreview.java index 2d3c6afa401..91cba5c8d79 100644 --- a/forge-gui-mobile/src/forge/card/CardListPreview.java +++ b/forge-gui-mobile/src/forge/card/CardListPreview.java @@ -8,6 +8,8 @@ import forge.toolbox.FChoiceList; import forge.toolbox.FLabel; public class CardListPreview extends FLabel { + public static final float CARD_PREVIEW_RATIO = 0.5f; + private final FChoiceList list; public CardListPreview(FChoiceList list0) { diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java index 2025c5e1578..88b1b072931 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java @@ -122,7 +122,7 @@ public class ConquestCommandersScreen extends FScreen { canCloseCallback.run(true); } - public void refreshCommanders() { + private void refreshCommanders() { ConquestData model = FModel.getConquest().getModel(); lstCommanders.setPool(model.getCommanders()); lstCommanders.setup(ItemManagerConfig.CONQUEST_COMMANDERS); diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java index 135b1c93e30..9f56a2fcaee 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java @@ -25,6 +25,7 @@ public class ConquestMenu extends FPopupMenu { private static final ConquestMultiverseScreen multiverseScreen = new ConquestMultiverseScreen(); private static final ConquestAEtherScreen aetherScreen = new ConquestAEtherScreen(); private static final ConquestCommandersScreen commandersScreen = new ConquestCommandersScreen(); + private static final ConquestPlaneswalkersScreen planeswalkersScreen = new ConquestPlaneswalkersScreen(); private static final ConquestCollectionScreen collectionScreen = new ConquestCollectionScreen(); private static final ConquestPlaneswalkScreen planeswalkScreen = new ConquestPlaneswalkScreen(); private static final ConquestPrefsScreen prefsScreen = new ConquestPrefsScreen(); @@ -47,6 +48,12 @@ public class ConquestMenu extends FPopupMenu { Forge.openScreen(commandersScreen); } }); + private static final FMenuItem planeswalkersItem = new FMenuItem("Planeswalkers", FSkinImage.PLANESWALKER, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + Forge.openScreen(planeswalkersScreen); + } + }); private static final FMenuItem collectionItem = new FMenuItem("Collection", FSkinImage.SPELLBOOK, new FEventHandler() { @Override public void handleEvent(FEvent e) { @@ -125,6 +132,7 @@ public class ConquestMenu extends FPopupMenu { addItem(multiverseItem); multiverseItem.setSelected(currentScreen == multiverseScreen); addItem(aetherItem); aetherItem.setSelected(currentScreen == aetherScreen); addItem(commandersItem); commandersItem.setSelected(currentScreen == commandersScreen); + addItem(planeswalkersItem); planeswalkersItem.setSelected(currentScreen == planeswalkersScreen); addItem(collectionItem); collectionItem.setSelected(currentScreen == collectionScreen); addItem(planeswalkItem); planeswalkItem.setSelected(currentScreen == planeswalkScreen); addItem(prefsItem); prefsItem.setSelected(currentScreen == prefsScreen); diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkersScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkersScreen.java new file mode 100644 index 00000000000..6787f4d86d9 --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneswalkersScreen.java @@ -0,0 +1,84 @@ +package forge.screens.planarconquest; + +import forge.Forge; +import forge.achievement.PlaneswalkerAchievements; +import forge.assets.FImage; +import forge.card.CardListPreview; +import forge.deck.FDeckChooser; +import forge.item.PaperCard; +import forge.model.FModel; +import forge.planarconquest.ConquestData; +import forge.screens.FScreen; +import forge.toolbox.FChoiceList; +import forge.util.Callback; + +public class ConquestPlaneswalkersScreen extends FScreen { + private static final float PADDING = FDeckChooser.PADDING; + + private final FChoiceList lstPlaneswalkers = add(new FChoiceList(FModel.getPlanes().iterator().next().getCommanders()) { //just use commanders as temporary list + @Override + protected void onItemActivate(Integer index, PaperCard value) { + Forge.back(); + } + + @Override + protected void onSelectionChange() { + if (tokenDisplay == null) { return; } + updatePreview(); + } + }); + private final CardListPreview tokenDisplay = add(new CardListPreview(lstPlaneswalkers)); + + public ConquestPlaneswalkersScreen() { + super("Select Planeswalker", ConquestMenu.getMenu()); + } + + @Override + public void onActivate() { + refreshPlaneswalkers(); + } + + @Override + public void onClose(final Callback canCloseCallback) { + if (canCloseCallback == null) { return; } + + final PaperCard planeswalker = lstPlaneswalkers.getSelectedItem(); + if (planeswalker == null) { + canCloseCallback.run(true); //shouldn't happen, but don't block closing screen if no commanders + return; + } + + ConquestData model = FModel.getConquest().getModel(); + if (model.getPlaneswalker() != planeswalker) { + model.setPlaneswalker(planeswalker); + model.saveData(); + } + canCloseCallback.run(true); + } + + private void refreshPlaneswalkers() { + ConquestData model = FModel.getConquest().getModel(); + lstPlaneswalkers.setListData(model.getSortedPlaneswalkers()); + lstPlaneswalkers.setSelectedItem(model.getPlaneswalker()); + } + + private void updatePreview() { + PaperCard planeswalker = lstPlaneswalkers.getSelectedItem(); + if (planeswalker != null) { + tokenDisplay.setIcon((FImage)PlaneswalkerAchievements.getTrophyImage(planeswalker.getName())); + } + else { + tokenDisplay.setIcon(null); + } + } + + @Override + protected void doLayout(float startY, float width, float height) { + float x = PADDING; + float y = startY + PADDING; + float w = width - 2 * PADDING; + tokenDisplay.setBounds(x, y, w, (height - startY) * CardListPreview.CARD_PREVIEW_RATIO); + y += tokenDisplay.getHeight() + PADDING; + lstPlaneswalkers.setBounds(x, y, w, height - y - PADDING); + } +} diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java index 41681b271dc..1f4ae6e9efc 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java @@ -23,7 +23,6 @@ import forge.util.ThreadUtil; public class NewConquestScreen extends MultiStepWizardScreen { private static final float PADDING = FOptionPane.PADDING; - private static final float CARD_PREVIEW_RATIO = 0.5f; @SuppressWarnings("unchecked") public NewConquestScreen() { @@ -131,7 +130,7 @@ public class NewConquestScreen extends MultiStepWizardScreen getSortedPlaneswalkers() { + List planeswalkers = new ArrayList(); + for (PaperCard card : unlockedCards) { + if (card.getRules().getType().isPlaneswalker()) { + planeswalkers.add(card); + } + } + Collections.sort(planeswalkers); + return planeswalkers; + } + public ConquestPlane getCurrentPlane() { return currentLocation.getPlane(); }