add option to foil cards in a deck

Signed-off-by: Jamin W. Collins <jamin.collins@gmail.com>
This commit is contained in:
Jamin W. Collins
2018-02-17 12:40:17 -07:00
parent e72edb95b5
commit 373e11bc41
4 changed files with 67 additions and 4 deletions

View File

@@ -27,6 +27,7 @@ import forge.gui.GuiUtils;
import forge.gui.framework.*;
import forge.item.InventoryItem;
import forge.item.PaperCard;
import forge.itemmanager.CardManager;
import forge.itemmanager.ItemManager;
import forge.itemmanager.SItemManagerUtil;
import forge.menus.IMenuProvider;
@@ -472,6 +473,65 @@ public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends D
});
}
/**
* Add context menu entries for foiling cards
*/
public void addMakeFoils() {
final int max = getMaxMoveQuantity();
if (max == 0) { return; }
addMakeFoil(1);
if (max == 1) { return; }
int qty = FModel.getPreferences().getPrefInt(FPref.DECK_DEFAULT_CARD_LIMIT);
if (qty > max) {
qty = max;
}
addMakeFoil(qty);
if (max == 2) { return; }
addMakeFoil(-max);
}
/**
* Adds the individual context menu entry for foiling the requested number of cards
*
* @param qty a negative quantity will prompt the user for a number
*/
private void addMakeFoil(int qty) {
final int shortcutModifiers = 0;
String label = "Foil " + SItemManagerUtil.getItemDisplayString(getItemManager().getSelectedItems(), qty, false);
GuiUtils.addMenuItem(menu, label, null, new Runnable() {
@Override public void run() {
Integer quantity = qty;
if (quantity < 0) {
quantity = GuiChoose.getInteger("Choose a value for X", 1, -quantity, 20);
if (quantity == null) { return; }
}
// remove *quantity* instances of existing card
CDeckEditorUI.SINGLETON_INSTANCE.removeSelectedCards(false, quantity);
// get the currently selected card from the editor
CardManager cardManager = (CardManager) CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getCatalogManager();
PaperCard existingCard = cardManager.getSelectedItem();
// make a foiled version based on the original
PaperCard foiledCard = new PaperCard(
existingCard.getRules(),
existingCard.getEdition(),
existingCard.getRarity(),
existingCard.getArtIndex(),
true);
// bounce the new card through the inventory and *quantity* into the deck
cardManager.addItem(foiledCard, 1);
cardManager.setSelectedItem(foiledCard);
CDeckEditorUI.SINGLETON_INSTANCE.addSelectedCards(false, quantity);
// clean up the inventory
cardManager.removeItem(foiledCard, 1);
}
}, true, shortcutModifiers == 0);
}
private void addItem(final String verb, final String dest, final boolean toAlternate, final int qty, final int shortcutModifiers) {
String label = verb + " " + SItemManagerUtil.getItemDisplayString(getItemManager().getSelectedItems(), qty, false);
if (dest != null && !dest.isEmpty()) {

View File

@@ -134,7 +134,7 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
*/
@Override
protected void buildRemoveContextMenu(EditorContextMenuBuilder cmb) {
CEditorConstructed.buildRemoveContextMenu(cmb, sectionMode);
CEditorConstructed.buildRemoveContextMenu(cmb, sectionMode, true);
}
/*

View File

@@ -218,11 +218,14 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
}
}
public static void buildRemoveContextMenu(EditorContextMenuBuilder cmb, DeckSection sectionMode) {
public static void buildRemoveContextMenu(EditorContextMenuBuilder cmb, DeckSection sectionMode, boolean foilAvailable) {
switch (sectionMode) {
case Main:
cmb.addMoveItems("Remove", "from deck");
cmb.addMoveAlternateItems("Move", "to sideboard");
if (foilAvailable) {
cmb.addMakeFoils();
}
break;
case Sideboard:
cmb.addMoveItems("Remove", "from sideboard");
@@ -259,7 +262,7 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
*/
@Override
protected void buildRemoveContextMenu(EditorContextMenuBuilder cmb) {
buildRemoveContextMenu(cmb, sectionMode);
buildRemoveContextMenu(cmb, sectionMode, true);
}
/*

View File

@@ -224,7 +224,7 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
*/
@Override
protected void buildRemoveContextMenu(final EditorContextMenuBuilder cmb) {
CEditorConstructed.buildRemoveContextMenu(cmb, sectionMode);
CEditorConstructed.buildRemoveContextMenu(cmb, sectionMode, false);
AddRatingItem(cmb, 1);
AddRatingItem(cmb, 2);
AddRatingItem(cmb, 3);