Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions forge-gui-mobile/src/forge/deck/FDeckEditor.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
Expand Down
19 changes: 15 additions & 4 deletions forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<PaperCard> faceUp = Lists.newArrayList();
private final List<PaperCard> revealed = Lists.newArrayList();
private final Map<String, List<String>> noted = new HashMap<>();
Expand Down Expand Up @@ -380,7 +383,7 @@ public Boolean draftCard(PaperCard bestPick, DeckSection section) {
}
}

return true;
return passPack;
}

public void addLog(String message) {
Expand Down Expand Up @@ -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) {
Expand Down