From 983f2d2856b4543ed926af6cb0c5f36442cea0b5 Mon Sep 17 00:00:00 2001 From: Jetz Date: Sat, 13 Jul 2024 19:17:09 -0400 Subject: [PATCH] Fixed QuestCommander deck editor, hopefully. --- forge-core/src/main/java/forge/deck/Deck.java | 10 ++++ .../src/main/java/forge/deck/DeckSection.java | 5 ++ .../deckeditor/controllers/ACEditorBase.java | 2 +- .../src/forge/deck/FDeckEditor.java | 46 ++++++++++++------- .../src/forge/screens/quest/QuestMenu.java | 1 + 5 files changed, 46 insertions(+), 18 deletions(-) diff --git a/forge-core/src/main/java/forge/deck/Deck.java b/forge-core/src/main/java/forge/deck/Deck.java index 8299af796b9..d8058eeb8cc 100644 --- a/forge-core/src/main/java/forge/deck/Deck.java +++ b/forge-core/src/main/java/forge/deck/Deck.java @@ -539,7 +539,12 @@ public class Deck extends DeckBase implements Iterable fnValidator; diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java index 08289e0b102..14cf254a3be 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java @@ -214,7 +214,7 @@ public abstract class ACEditorBase> cardsByName = null; if (deck != null) { - final CardPool allCards = deck.getAllCardsInASinglePool(deck.has(DeckSection.Commander)); + final CardPool allCards = deck.getAllCardsInASinglePool(); cardsByName = Aggregates.groupSumBy(allCards, pc -> pc.getRules().getNormalizedName()); } diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 371191a8032..64fbed9287b 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -259,11 +259,13 @@ public class FDeckEditor extends TabPageScreen { return isLandscape ? new DeckEditorPage[] { new CatalogPage(ItemManagerConfig.QUEST_EDITOR_POOL, Forge.getLocalizer().getMessage("lblInventory"), FSkinImage.QUEST_BOX), new DeckSectionPage(DeckSection.Commander, ItemManagerConfig.COMMANDER_SECTION), - new DeckSectionPage(DeckSection.Main, ItemManagerConfig.QUEST_DECK_EDITOR) + new DeckSectionPage(DeckSection.Main, ItemManagerConfig.QUEST_DECK_EDITOR), + new DeckSectionPage(DeckSection.Sideboard, ItemManagerConfig.QUEST_DECK_EDITOR) } : new DeckEditorPage[] { new CatalogPage(ItemManagerConfig.QUEST_EDITOR_POOL, Forge.getLocalizer().getMessage("lblInventory"), FSkinImage.QUEST_BOX), new DeckSectionPage(DeckSection.Main, ItemManagerConfig.QUEST_DECK_EDITOR), - new DeckSectionPage(DeckSection.Commander, ItemManagerConfig.COMMANDER_SECTION) + new DeckSectionPage(DeckSection.Commander, ItemManagerConfig.COMMANDER_SECTION), + new DeckSectionPage(DeckSection.Sideboard, ItemManagerConfig.QUEST_DECK_EDITOR) }; case PlanarConquest: return isLandscape ? new DeckEditorPage[] { @@ -367,10 +369,7 @@ public class FDeckEditor extends TabPageScreen { private FDeckEditor(EditorType editorType0, String editDeckName, String editDeckPath, Deck newDeck, boolean showMainDeck,FEventHandler backButton) { super(backButton, getPages(editorType0)); - if (editorType0 == EditorType.QuestCommander) //fix saving quest commander - editorType = EditorType.Quest; - else - editorType = editorType0; + editorType = editorType0; editorType.getController().editor = this; @@ -486,6 +485,7 @@ public class FDeckEditor extends TabPageScreen { defaultLandSet = CardEdition.Predicates.getRandomSetWithAllBasicLands(availableEditionCodes); break; case Quest: + case QuestCommander: defaultLandSet = FModel.getQuest().getDefaultLandSet(); break; default: @@ -1487,7 +1487,7 @@ public class FDeckEditor extends TabPageScreen { super.initialize(); cardManager.setCaption(getItemManagerCaption()); - if (!isVisible() && (parentScreen.getEditorType() != EditorType.Quest||parentScreen.getEditorType() != EditorType.QuestCommander)) { + if (!isVisible() && (parentScreen.getEditorType() != EditorType.Quest && parentScreen.getEditorType() != EditorType.QuestCommander)) { //delay refreshing while hidden unless for quest inventory needRefreshWhenShown = true; //Throw in the all cards that might be requested by other pages. @@ -1539,6 +1539,7 @@ public class FDeckEditor extends TabPageScreen { public void refresh() { Predicate additionalFilter = null; final EditorType editorType = parentScreen.getEditorType(); + Deck currentDeck = parentScreen.getDeck(); switch (editorType) { case Archenemy: cardManager.setPool(FModel.getArchenemyCards(), true); @@ -1547,28 +1548,40 @@ public class FDeckEditor extends TabPageScreen { cardManager.setPool(FModel.getPlanechaseCards(), true); break; case Quest: - final ItemPool questPool = new ItemPool<>(PaperCard.class); + case QuestCommander: + ItemPool questPool = new ItemPool<>(PaperCard.class); questPool.addAll(FModel.getQuest().getCards().getCardpool()); - // remove bottom cards that are in the deck from the card pool - questPool.removeAll(parentScreen.getDeck().getMain()); - // remove sideboard cards from the catalog - questPool.removeAll(parentScreen.getDeck().getOrCreate(DeckSection.Sideboard)); + // remove cards that are in the deck from the card pool + questPool.removeAll(currentDeck.getAllCardsInASinglePool(true, true)); + if (editorType == EditorType.QuestCommander) { + List commanders = currentDeck.getCommanders(); + Predicate filter; + String label; + if (commanders.isEmpty()) { + filter = DeckFormat.Commander.isLegalCommanderPredicate(); + label = "lblCommanders"; + } + else { + filter = DeckFormat.Commander.isLegalCardForCommanderPredicate(commanders); + label = "lblCards"; + } + cardManager.setCaption(Forge.getLocalizer().getMessage(label)); + questPool = editorType.applyCardFilter(questPool, filter); + } cardManager.setPool(questPool); break; case PlanarConquest: - cardManager.setPool(ConquestUtil.getAvailablePool(parentScreen.getDeck())); + cardManager.setPool(ConquestUtil.getAvailablePool(currentDeck)); break; - case QuestCommander: case Commander: case Oathbreaker: case TinyLeaders: case Brawl: - final List commanders = parentScreen.getDeck().getCommanders(); + final List commanders = currentDeck.getCommanders(); if (commanders.isEmpty()) { //if no commander set for deck, only show valid commanders switch (editorType) { case Commander: - case QuestCommander: additionalFilter = DeckFormat.Commander.isLegalCommanderPredicate(); cardManager.setCaption(Forge.getLocalizer().getMessage("lblCommanders")); break; @@ -1591,7 +1604,6 @@ public class FDeckEditor extends TabPageScreen { //if a commander has been set, only show cards that match its color identity switch (editorType) { case Commander: - case QuestCommander: additionalFilter = DeckFormat.Commander.isLegalCardForCommanderPredicate(commanders); break; case Oathbreaker: diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java b/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java index 67ca2c6eba6..8d5a79fe466 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java @@ -133,6 +133,7 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats { } ((DeckController)EditorType.Quest.getController()).setRootFolder(FModel.getQuest().getMyDecks()); + ((DeckController)EditorType.QuestCommander.getController()).setRootFolder(FModel.getQuest().getMyDecks()); ((DeckController)EditorType.QuestDraft.getController()).setRootFolder(FModel.getQuest().getDraftDecks()); if (reason == LaunchReason.StartQuestMode) { if (QuestUtil.getCurrentDeck() == null) {