diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 82429257a03..e6ae80cdc78 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -2192,10 +2192,37 @@ public void addLogEntry(String message) { protected static class DraftPackPage extends CatalogPage { protected boolean draftingFaceDown = false; + private final FLabel btnUseLibrarian; + private static final float LIBRARIAN_BTN_HEIGHT = Utils.scale(32); public DraftPackPage(CardManager cardManager) { super(cardManager, ItemManagerConfig.DRAFT_PACK, Localizer.getInstance().getMessage("lblPackN", String.valueOf(1)), FSkinImage.PACK); cardManager.setShowRanking(true); + btnUseLibrarian = add(new FLabel.ButtonBuilder() + .text("Cogwork Librarian: tap to draft an extra card this pick") + .font(FSkinFont.get(12)) + .build()); + btnUseLibrarian.setVisible(false); + btnUseLibrarian.setCommand(e -> { + getDraftPlayer().cogworkLibrarianActivatedByUI = true; + btnUseLibrarian.setVisible(false); + revalidate(); + }); + } + + @Override + protected void doLayout(float width, float height) { + float x = 0; + if (Forge.isLandscapeMode()) { + x = ItemFilter.PADDING; + width -= 2 * x; + } + if (btnUseLibrarian.isVisible()) { + btnUseLibrarian.setBounds(x, 0, width, LIBRARIAN_BTN_HEIGHT); + cardManager.setBounds(x, LIBRARIAN_BTN_HEIGHT, width, height - LIBRARIAN_BTN_HEIGHT); + } else { + cardManager.setBounds(x, 0, width, height); + } } @Override @@ -2247,6 +2274,14 @@ public void refresh() { return; } + // Show Cogwork Librarian button if the player has it available and hasn't activated it yet + boolean librarianAvailable = getDraftPlayer().hasCogworkLibrarianAvailable() + && !getDraftPlayer().cogworkLibrarianActivatedByUI; + if (btnUseLibrarian.isVisible() != librarianAvailable) { + btnUseLibrarian.setVisible(librarianAvailable); + revalidate(); + } + this.updateCaption(); cardManager.setEnabled(true); } @@ -2282,6 +2317,11 @@ public void moveCard(PaperCard card, CardManagerPage destination, int qty) { assert(destination instanceof DeckSectionPage); BoosterDraft draft = parentScreen.getDraft(); cardManager.setEnabled(false); //Prevent any weird inputs until choices are made and the next set of cards is ready. + // Hide the Librarian button now — refresh() will show it again next pack if still available + if (btnUseLibrarian.isVisible()) { + btnUseLibrarian.setVisible(false); + revalidate(); + } DeckSection section = ((DeckSectionPage) destination).deckSection; FThreads.invokeInBackgroundThread(() -> { draft.setChoice(card, section); diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java index 4f046e60e2a..fbb833e020d 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java @@ -55,6 +55,9 @@ public class LimitedPlayer { private int playerFlags = 0; + /** Set by the draft UI when the player taps "Use Cogwork Librarian" before a pick. */ + public boolean cogworkLibrarianActivatedByUI = false; + private final List faceUp = Lists.newArrayList(); private final List revealed = Lists.newArrayList(); private final Map> noted = new HashMap<>(); @@ -380,7 +383,7 @@ public Boolean draftCard(PaperCard bestPick, DeckSection section) { } } - return true; + return passPack; } public void addLog(String message) { @@ -688,10 +691,18 @@ public boolean handleLeovoldsOperative(DraftPack pack, PaperCard drafted) { return true; } + /** Returns true if the Cogwork Librarian extra-draft opportunity is currently pending. */ + public boolean hasCogworkLibrarianAvailable() { + return (playerFlags & CogworkLibrarianExtraDraft) == CogworkLibrarianExtraDraft; + } + public boolean handleCogworkLibrarian(DraftPack pack, PaperCard drafted) { - if(pack.isEmpty()) - return false; - return !Objects.equals(SGuiChoose.one("Draft an extra pick with Cogwork Librarian?", Lists.newArrayList("Yes", "No")), "No"); + if (pack.isEmpty()) return false; + // Opt-in: the UI sets cogworkLibrarianActivatedByUI via a button tap before the pick. + // If the player did not tap the button this pick, default to not using it. + boolean activated = cogworkLibrarianActivatedByUI; + cogworkLibrarianActivatedByUI = false; // consume the flag + return activated; } public boolean handleAgentOfAcquisitions(DraftPack pack, PaperCard drafted) {