mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 10:18:01 +00:00
Draft Ranking on ImageView
- add an option to show draft card rankings
This commit is contained in:
@@ -58,10 +58,10 @@ public class FDeckViewer extends FDialog {
|
|||||||
private FDeckViewer(final Deck deck0) {
|
private FDeckViewer(final Deck deck0) {
|
||||||
this.deck = deck0;
|
this.deck = deck0;
|
||||||
this.setTitle(deck.getName());
|
this.setTitle(deck.getName());
|
||||||
this.cardManager = new CardManager(null, false, false) {
|
this.cardManager = new CardManager(null, false, false, false) {
|
||||||
@Override //show hovered card in Image View in dialog instead of main Detail/Picture panes
|
@Override //show hovered card in Image View in dialog instead of main Detail/Picture panes
|
||||||
protected ImageView<PaperCard> createImageView(final ItemManagerModel<PaperCard> model0) {
|
protected ImageView<PaperCard> createImageView(final ItemManagerModel<PaperCard> model0) {
|
||||||
return new ImageView<PaperCard>(this, model0) {
|
return new ImageView<PaperCard>(this, model0, false) {
|
||||||
@Override
|
@Override
|
||||||
protected void showHoveredItem(PaperCard item) {
|
protected void showHoveredItem(PaperCard item) {
|
||||||
final CardView card = CardView.getCardForUi(item);
|
final CardView card = CardView.getCardForUi(item);
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ public class CardManager extends ItemManager<PaperCard> {
|
|||||||
|
|
||||||
private boolean QuestMode;
|
private boolean QuestMode;
|
||||||
|
|
||||||
public CardManager(final CDetailPicture cDetailPicture, final boolean wantUnique0, final boolean qm) {
|
public CardManager(final CDetailPicture cDetailPicture, final boolean wantUnique0, final boolean qm, boolean sr) {
|
||||||
super(PaperCard.class, cDetailPicture, wantUnique0);
|
super(PaperCard.class, cDetailPicture, wantUnique0, sr);
|
||||||
QuestMode = qm;
|
QuestMode = qm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public final class DeckManager extends ItemManager<DeckProxy> implements IHasGam
|
|||||||
* @param gt
|
* @param gt
|
||||||
*/
|
*/
|
||||||
public DeckManager(final GameType gt, final CDetailPicture cDetailPicture) {
|
public DeckManager(final GameType gt, final CDetailPicture cDetailPicture) {
|
||||||
super(DeckProxy.class, cDetailPicture, true);
|
super(DeckProxy.class, cDetailPicture, true, false);
|
||||||
this.gameType = gt;
|
this.gameType = gt;
|
||||||
|
|
||||||
this.addSelectionListener(new ListSelectionListener() {
|
this.addSelectionListener(new ListSelectionListener() {
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
|
|||||||
private boolean alwaysNonUnique = false;
|
private boolean alwaysNonUnique = false;
|
||||||
private boolean allowMultipleSelections = false;
|
private boolean allowMultipleSelections = false;
|
||||||
private boolean hideFilters = false;
|
private boolean hideFilters = false;
|
||||||
|
private boolean showRanking = false;
|
||||||
private UiCommand itemActivateCommand;
|
private UiCommand itemActivateCommand;
|
||||||
private ContextMenuBuilder contextMenuBuilder;
|
private ContextMenuBuilder contextMenuBuilder;
|
||||||
private final Class<T> genericType;
|
private final Class<T> genericType;
|
||||||
@@ -125,7 +126,8 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
|
|||||||
/**
|
/**
|
||||||
* ItemManager Constructor
|
* ItemManager Constructor
|
||||||
*/
|
*/
|
||||||
protected ItemManager(final Class<T> genericType0, final CDetailPicture cDetailPicture, final boolean wantUnique0) {
|
protected ItemManager(final Class<T> genericType0, final CDetailPicture cDetailPicture, final boolean wantUnique0, final boolean showRanking) {
|
||||||
|
this.showRanking = showRanking;
|
||||||
this.cDetailPicture = cDetailPicture;
|
this.cDetailPicture = cDetailPicture;
|
||||||
this.genericType = genericType0;
|
this.genericType = genericType0;
|
||||||
this.wantUnique = wantUnique0;
|
this.wantUnique = wantUnique0;
|
||||||
@@ -143,7 +145,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected ImageView<T> createImageView(final ItemManagerModel<T> model0) {
|
protected ImageView<T> createImageView(final ItemManagerModel<T> model0) {
|
||||||
return new ImageView<>(this, model0);
|
return new ImageView<>(this, model0, this.showRanking);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final CDetailPicture getCDetailPicture() {
|
public final CDetailPicture getCDetailPicture() {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public final class SpellShopManager extends ItemManager<InventoryItem> {
|
|||||||
private final boolean wantUnique02;
|
private final boolean wantUnique02;
|
||||||
|
|
||||||
public SpellShopManager(final CDetailPicture cDetailPicture, final boolean wantUnique0) {
|
public SpellShopManager(final CDetailPicture cDetailPicture, final boolean wantUnique0) {
|
||||||
super(InventoryItem.class, cDetailPicture, wantUnique0);
|
super(InventoryItem.class, cDetailPicture, wantUnique0, false);
|
||||||
cDetailPicture2 = cDetailPicture;
|
cDetailPicture2 = cDetailPicture;
|
||||||
wantUnique02 = wantUnique0;
|
wantUnique02 = wantUnique0;
|
||||||
}
|
}
|
||||||
@@ -34,7 +34,7 @@ public final class SpellShopManager extends ItemManager<InventoryItem> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void buildAddFilterMenu(JMenu menu) {
|
protected void buildAddFilterMenu(JMenu menu) {
|
||||||
CardManager CM = new CardManager(cDetailPicture2, wantUnique02, true);
|
CardManager CM = new CardManager(cDetailPicture2, wantUnique02, true, false);
|
||||||
CM.buildAddFilterMenu(menu, this);
|
CM.buildAddFilterMenu(menu, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import forge.screens.match.controllers.CDetailPicture;
|
|||||||
|
|
||||||
public class TokenManager extends ItemManager<PaperToken> {
|
public class TokenManager extends ItemManager<PaperToken> {
|
||||||
public TokenManager(final CDetailPicture cDetailPicture, final boolean wantUnique0) {
|
public TokenManager(final CDetailPicture cDetailPicture, final boolean wantUnique0) {
|
||||||
super(PaperToken.class, cDetailPicture, wantUnique0);
|
super(PaperToken.class, cDetailPicture, wantUnique0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import forge.deck.DeckProxy;
|
|||||||
import forge.deck.io.DeckPreferences;
|
import forge.deck.io.DeckPreferences;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.card.CardView;
|
import forge.game.card.CardView;
|
||||||
|
import forge.gamemodes.limited.CardRanker;
|
||||||
import forge.gui.framework.ILocalRepaint;
|
import forge.gui.framework.ILocalRepaint;
|
||||||
import forge.item.IPaperCard;
|
import forge.item.IPaperCard;
|
||||||
import forge.item.InventoryItem;
|
import forge.item.InventoryItem;
|
||||||
@@ -145,7 +146,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
private final FComboBoxWrapper<Object> cbPileByOptions = new FComboBoxWrapper<>();
|
private final FComboBoxWrapper<Object> cbPileByOptions = new FComboBoxWrapper<>();
|
||||||
private final FComboBoxWrapper<Integer> cbColumnCount = new FComboBoxWrapper<>();
|
private final FComboBoxWrapper<Integer> cbColumnCount = new FComboBoxWrapper<>();
|
||||||
|
|
||||||
public ImageView(final ItemManager<T> itemManager0, final ItemManagerModel<T> model0) {
|
public ImageView(final ItemManager<T> itemManager0, final ItemManagerModel<T> model0, final boolean showRanking) {
|
||||||
super(itemManager0, model0);
|
super(itemManager0, model0);
|
||||||
|
|
||||||
SItemManagerUtil.populateImageViewOptions(itemManager0, cbGroupByOptions, cbPileByOptions);
|
SItemManagerUtil.populateImageViewOptions(itemManager0, cbGroupByOptions, cbPileByOptions);
|
||||||
@@ -192,6 +193,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
|
|
||||||
//setup display
|
//setup display
|
||||||
display = new CardViewDisplay();
|
display = new CardViewDisplay();
|
||||||
|
display.setShowRanking(showRanking);
|
||||||
display.addMouseListener(new FMouseAdapter() {
|
display.addMouseListener(new FMouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void onLeftMouseDown(MouseEvent e) {
|
public void onLeftMouseDown(MouseEvent e) {
|
||||||
@@ -1000,11 +1002,16 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
|
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
private class CardViewDisplay extends JPanel implements ILocalRepaint {
|
private class CardViewDisplay extends JPanel implements ILocalRepaint {
|
||||||
|
boolean showRanking = false;
|
||||||
private CardViewDisplay() {
|
private CardViewDisplay() {
|
||||||
setOpaque(false);
|
setOpaque(false);
|
||||||
setFocusable(true);
|
setFocusable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setShowRanking(boolean showRanking) {
|
||||||
|
this.showRanking = showRanking;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void repaintSelf() {
|
public void repaintSelf() {
|
||||||
repaint(getVisibleRect());
|
repaint(getVisibleRect());
|
||||||
@@ -1223,6 +1230,32 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
}
|
}
|
||||||
CardPanel.drawFoilEffect(g, card, bounds.x, bounds.y, bounds.width, bounds.height, borderSize);
|
CardPanel.drawFoilEffect(g, card, bounds.x, bounds.y, bounds.width, bounds.height, borderSize);
|
||||||
}
|
}
|
||||||
|
//draw draft ranking
|
||||||
|
if (showRanking && FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_OVERLAY_DRAFT_RANKING)) {
|
||||||
|
double score = CardRanker.getRawScore((PaperCard) item);
|
||||||
|
int draftRank = score <= 0 ? 0 : score > 99 ? 99 : (int) Math.round(CardRanker.getRawScore((PaperCard) item));
|
||||||
|
String value = String.valueOf(draftRank);
|
||||||
|
g.setColor(Color.white);
|
||||||
|
Shape clip = g.getClip();
|
||||||
|
g.setClip(bounds);
|
||||||
|
int scale = (int)(g.getFontMetrics().getHeight()*3.5f);
|
||||||
|
int h = (int)(g.getFontMetrics().getHeight()/3.5f);
|
||||||
|
int w = g.getFontMetrics().stringWidth(value);
|
||||||
|
int x = (int)(bounds.x+bounds.width/2);
|
||||||
|
int y = (int)(bounds.y+bounds.height/2);
|
||||||
|
if (draftRank >= 90)
|
||||||
|
FSkin.drawImage(g, FSkin.getImage(FSkinProp.IMG_DRAFTRANK_S), x-scale/2, y-h-scale/2, scale, scale);
|
||||||
|
else if (draftRank >= 80 && draftRank <= 89)
|
||||||
|
FSkin.drawImage(g, FSkin.getImage(FSkinProp.IMG_DRAFTRANK_A), x-scale/2, y-h-scale/2, scale, scale);
|
||||||
|
else if (draftRank >= 60 && draftRank <= 79)
|
||||||
|
FSkin.drawImage(g, FSkin.getImage(FSkinProp.IMG_DRAFTRANK_B), x-scale/2, y-h-scale/2, scale, scale);
|
||||||
|
else if (draftRank >= 25 && draftRank <= 59)
|
||||||
|
FSkin.drawImage(g, FSkin.getImage(FSkinProp.IMG_DRAFTRANK_C), x-scale/2, y-h-scale/2, scale, scale);
|
||||||
|
else
|
||||||
|
FSkin.drawImage(g, FSkin.getImage(FSkinProp.IMG_DRAFTRANK_D), x-scale/2, y-h-scale/2, scale, scale);
|
||||||
|
g.drawString(value, x-w/2, y);
|
||||||
|
g.setClip(clip);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,8 +104,8 @@ public final class CEditorCommander extends CDeckEditor<Deck> {
|
|||||||
customCards.getAllCardsNoAlt()), PaperCard.class);
|
customCards.getAllCardsNoAlt()), PaperCard.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
CardManager catalogManager = new CardManager(getCDetailPicture(), true, false);
|
CardManager catalogManager = new CardManager(getCDetailPicture(), true, false, false);
|
||||||
CardManager deckManager = new CardManager(getCDetailPicture(), false, false);
|
CardManager deckManager = new CardManager(getCDetailPicture(), false, false, false);
|
||||||
deckManager.setAlwaysNonUnique(true);
|
deckManager.setAlwaysNonUnique(true);
|
||||||
|
|
||||||
catalogManager.setCaption("Catalog");
|
catalogManager.setCaption("Catalog");
|
||||||
|
|||||||
@@ -131,8 +131,8 @@ public final class CEditorConstructed extends CDeckEditor<Deck> {
|
|||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
catalogManager = new CardManager(getCDetailPicture(), wantUnique, false);
|
catalogManager = new CardManager(getCDetailPicture(), wantUnique, false, false);
|
||||||
deckManager = new CardManager(getCDetailPicture(), false, false);
|
deckManager = new CardManager(getCDetailPicture(), false, false, false);
|
||||||
deckManager.setAlwaysNonUnique(true);
|
deckManager.setAlwaysNonUnique(true);
|
||||||
|
|
||||||
final Localizer localizer = Localizer.getInstance();
|
final Localizer localizer = Localizer.getInstance();
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
|||||||
public CEditorDraftingProcess(final CDetailPicture cDetailPicture0) {
|
public CEditorDraftingProcess(final CDetailPicture cDetailPicture0) {
|
||||||
super(FScreen.DRAFTING_PROCESS, cDetailPicture0, GameType.Draft);
|
super(FScreen.DRAFTING_PROCESS, cDetailPicture0, GameType.Draft);
|
||||||
|
|
||||||
final CardManager catalogManager = new CardManager(cDetailPicture0, false, false);
|
final CardManager catalogManager = new CardManager(cDetailPicture0, false, false, true);
|
||||||
final CardManager deckManager = new CardManager(cDetailPicture0, false, false);
|
final CardManager deckManager = new CardManager(cDetailPicture0, false, false, true);
|
||||||
|
|
||||||
//hide filters and options panel so more of pack is visible by default
|
//hide filters and options panel so more of pack is visible by default
|
||||||
catalogManager.setHideViewOptions(1, true);
|
catalogManager.setHideViewOptions(1, true);
|
||||||
|
|||||||
@@ -85,8 +85,8 @@ public final class CEditorLimited extends CDeckEditor<DeckGroup> {
|
|||||||
public CEditorLimited(final IStorage<DeckGroup> deckMap0, final FScreen screen0, final CDetailPicture cDetailPicture0) {
|
public CEditorLimited(final IStorage<DeckGroup> deckMap0, final FScreen screen0, final CDetailPicture cDetailPicture0) {
|
||||||
super(screen0, cDetailPicture0, GameType.Sealed);
|
super(screen0, cDetailPicture0, GameType.Sealed);
|
||||||
|
|
||||||
final CardManager catalogManager = new CardManager(cDetailPicture0, false, false);
|
final CardManager catalogManager = new CardManager(cDetailPicture0, false, false, FScreen.DECK_EDITOR_DRAFT.equals(screen0));
|
||||||
final CardManager deckManager = new CardManager(cDetailPicture0, false, false);
|
final CardManager deckManager = new CardManager(cDetailPicture0, false, false, FScreen.DECK_EDITOR_DRAFT.equals(screen0));
|
||||||
|
|
||||||
catalogManager.setCaption("Sideboard");
|
catalogManager.setCaption("Sideboard");
|
||||||
|
|
||||||
|
|||||||
@@ -123,8 +123,8 @@ public final class CEditorQuest extends CDeckEditor<Deck> {
|
|||||||
|
|
||||||
this.questData = questData0;
|
this.questData = questData0;
|
||||||
|
|
||||||
final CardManager catalogManager = new CardManager(cDetailPicture0, false, true);
|
final CardManager catalogManager = new CardManager(cDetailPicture0, false, true, false);
|
||||||
final CardManager deckManager = new CardManager(cDetailPicture0, false, true);
|
final CardManager deckManager = new CardManager(cDetailPicture0, false, true, false);
|
||||||
|
|
||||||
catalogManager.setCaption("Quest Inventory");
|
catalogManager.setCaption("Quest Inventory");
|
||||||
|
|
||||||
|
|||||||
@@ -79,8 +79,8 @@ public class CEditorQuestDraftingProcess extends ACEditorBase<PaperCard, DeckGro
|
|||||||
public CEditorQuestDraftingProcess(final CDetailPicture cDetailPicture0) {
|
public CEditorQuestDraftingProcess(final CDetailPicture cDetailPicture0) {
|
||||||
super(FScreen.DRAFTING_PROCESS, cDetailPicture0, GameType.QuestDraft);
|
super(FScreen.DRAFTING_PROCESS, cDetailPicture0, GameType.QuestDraft);
|
||||||
|
|
||||||
final CardManager catalogManager = new CardManager(cDetailPicture0, false, false);
|
final CardManager catalogManager = new CardManager(cDetailPicture0, false, false, true);
|
||||||
final CardManager deckManager = new CardManager(cDetailPicture0, false, false);
|
final CardManager deckManager = new CardManager(cDetailPicture0, false, false, true);
|
||||||
|
|
||||||
//hide filters and options panel so more of pack is visible by default
|
//hide filters and options panel so more of pack is visible by default
|
||||||
catalogManager.setHideViewOptions(1, true);
|
catalogManager.setHideViewOptions(1, true);
|
||||||
|
|||||||
@@ -101,8 +101,8 @@ public final class CEditorQuestLimited extends CDeckEditor<DeckGroup> {
|
|||||||
|
|
||||||
this.questData = questData0;
|
this.questData = questData0;
|
||||||
|
|
||||||
final CardManager catalogManager = new CardManager(cDetailPicture0, false, true);
|
final CardManager catalogManager = new CardManager(cDetailPicture0, false, true, false);
|
||||||
final CardManager deckManager = new CardManager(cDetailPicture0, false, true);
|
final CardManager deckManager = new CardManager(cDetailPicture0, false, true, false);
|
||||||
|
|
||||||
catalogManager.setCaption("Sideboard");
|
catalogManager.setCaption("Sideboard");
|
||||||
|
|
||||||
|
|||||||
@@ -70,8 +70,8 @@ public final class CEditorVariant extends CDeckEditor<Deck> {
|
|||||||
this.cardPoolCondition = poolCondition;
|
this.cardPoolCondition = poolCondition;
|
||||||
this.sectionMode = deckSection0;
|
this.sectionMode = deckSection0;
|
||||||
|
|
||||||
final CardManager catalogManager = new CardManager(cDetailPicture0, true, false);
|
final CardManager catalogManager = new CardManager(cDetailPicture0, true, false, false);
|
||||||
final CardManager deckManager = new CardManager(cDetailPicture0, false, false);
|
final CardManager deckManager = new CardManager(cDetailPicture0, false, false, false);
|
||||||
deckManager.setAlwaysNonUnique(true);
|
deckManager.setAlwaysNonUnique(true);
|
||||||
|
|
||||||
final Localizer localizer = Localizer.getInstance();
|
final Localizer localizer = Localizer.getInstance();
|
||||||
|
|||||||
@@ -79,8 +79,8 @@ public class CEditorWinstonProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
|||||||
public CEditorWinstonProcess(final CDetailPicture cDetailPicture0) {
|
public CEditorWinstonProcess(final CDetailPicture cDetailPicture0) {
|
||||||
super(FScreen.DRAFTING_PROCESS, cDetailPicture0, GameType.Draft);
|
super(FScreen.DRAFTING_PROCESS, cDetailPicture0, GameType.Draft);
|
||||||
|
|
||||||
final CardManager catalogManager = new CardManager(cDetailPicture0, false, false);
|
final CardManager catalogManager = new CardManager(cDetailPicture0, false, false, true);
|
||||||
final CardManager deckManager = new CardManager(cDetailPicture0, false, false);
|
final CardManager deckManager = new CardManager(cDetailPicture0, false, false, true);
|
||||||
|
|
||||||
//hide filters and options panel so more of pack is visible by default
|
//hide filters and options panel so more of pack is visible by default
|
||||||
catalogManager.setHideViewOptions(1, true);
|
catalogManager.setHideViewOptions(1, true);
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ public enum CSubmenuPreferences implements ICDoc {
|
|||||||
lstControls.add(Pair.of(view.getCbLoadCardsLazily(), FPref.LOAD_CARD_SCRIPTS_LAZILY));
|
lstControls.add(Pair.of(view.getCbLoadCardsLazily(), FPref.LOAD_CARD_SCRIPTS_LAZILY));
|
||||||
lstControls.add(Pair.of(view.getCbLoadHistoricFormats(), FPref.LOAD_HISTORIC_FORMATS));
|
lstControls.add(Pair.of(view.getCbLoadHistoricFormats(), FPref.LOAD_HISTORIC_FORMATS));
|
||||||
lstControls.add(Pair.of(view.getCbSmartCardArtSelectionOpt(), FPref.UI_SMART_CARD_ART));
|
lstControls.add(Pair.of(view.getCbSmartCardArtSelectionOpt(), FPref.UI_SMART_CARD_ART));
|
||||||
|
lstControls.add(Pair.of(view.getCbShowDraftRanking(), FPref.UI_OVERLAY_DRAFT_RANKING));
|
||||||
|
|
||||||
|
|
||||||
for(final Pair<JCheckBox, FPref> kv : lstControls) {
|
for(final Pair<JCheckBox, FPref> kv : lstControls) {
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
|
|||||||
private final JCheckBox cbUseExperimentalNetworkStream = new OptionsCheckBox(localizer.getMessage("lblExperimentalNetworkCompatibility"));
|
private final JCheckBox cbUseExperimentalNetworkStream = new OptionsCheckBox(localizer.getMessage("lblExperimentalNetworkCompatibility"));
|
||||||
private final JCheckBox cbCardArtCoreExpansionsOnlyOpt = new OptionsCheckBox(localizer.getMessage("lblPrefArtExpansionOnly"));
|
private final JCheckBox cbCardArtCoreExpansionsOnlyOpt = new OptionsCheckBox(localizer.getMessage("lblPrefArtExpansionOnly"));
|
||||||
private final JCheckBox cbSmartCardArtSelectionOpt = new OptionsCheckBox(localizer.getMessage("lblSmartCardArtOpt"));
|
private final JCheckBox cbSmartCardArtSelectionOpt = new OptionsCheckBox(localizer.getMessage("lblSmartCardArtOpt"));
|
||||||
|
private final JCheckBox cbShowDraftRanking = new OptionsCheckBox(localizer.getMessage("lblShowDraftRankingOverlay"));
|
||||||
|
|
||||||
private final Map<FPref, KeyboardShortcutField> shortcutFields = new HashMap<>();
|
private final Map<FPref, KeyboardShortcutField> shortcutFields = new HashMap<>();
|
||||||
|
|
||||||
@@ -299,6 +300,10 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
|
|||||||
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlSmartCardArtOpt")), "w 80%!, h 22px!, gap 28px 0 0 0, span 2 1");
|
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlSmartCardArtOpt")), "w 80%!, h 22px!, gap 28px 0 0 0, span 2 1");
|
||||||
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlSmartCardArtOptNote")), descriptionConstraints);
|
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlSmartCardArtOptNote")), descriptionConstraints);
|
||||||
|
|
||||||
|
//Draft Ranking Overlay
|
||||||
|
pnlPrefs.add(cbShowDraftRanking, titleConstraints);
|
||||||
|
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlShowDraftRankingOverlay")), descriptionConstraints);
|
||||||
|
|
||||||
// Advanced
|
// Advanced
|
||||||
pnlPrefs.add(new SectionLabel(localizer.getMessage("AdvancedSettings")), sectionConstraints);
|
pnlPrefs.add(new SectionLabel(localizer.getMessage("AdvancedSettings")), sectionConstraints);
|
||||||
|
|
||||||
@@ -819,6 +824,9 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
|
|||||||
/** @return {@link javax.swing.JCheckBox} */
|
/** @return {@link javax.swing.JCheckBox} */
|
||||||
public JCheckBox getCbSmartCardArtSelectionOpt() { return cbSmartCardArtSelectionOpt; }
|
public JCheckBox getCbSmartCardArtSelectionOpt() { return cbSmartCardArtSelectionOpt; }
|
||||||
|
|
||||||
|
/** @return {@link javax.swing.JCheckBox} */
|
||||||
|
public JCheckBox getCbShowDraftRanking() { return cbShowDraftRanking; }
|
||||||
|
|
||||||
/** @return {@link javax.swing.JCheckBox} */
|
/** @return {@link javax.swing.JCheckBox} */
|
||||||
public JCheckBox getCbEnforceDeckLegality() {
|
public JCheckBox getCbEnforceDeckLegality() {
|
||||||
return cbEnforceDeckLegality;
|
return cbEnforceDeckLegality;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public enum VWorkshopCatalog implements IVDoc<CWorkshopCatalog> {
|
|||||||
|
|
||||||
//========== Constructor
|
//========== Constructor
|
||||||
VWorkshopCatalog() {
|
VWorkshopCatalog() {
|
||||||
this.cardManager = new CardManager(cDetailPicture, true, false);
|
this.cardManager = new CardManager(cDetailPicture, true, false, false);
|
||||||
this.cardManager.setCaption(localizer.getMessage("lblCatalog"));
|
this.cardManager.setCaption(localizer.getMessage("lblCatalog"));
|
||||||
final Iterable<PaperCard> allCards = Iterables.concat(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), FModel.getMagicDb().getVariantCards().getAllCards());
|
final Iterable<PaperCard> allCards = Iterables.concat(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), FModel.getMagicDb().getVariantCards().getAllCards());
|
||||||
this.cardManager.setPool(ItemPool.createFrom(allCards, PaperCard.class), true);
|
this.cardManager.setPool(ItemPool.createFrom(allCards, PaperCard.class), true);
|
||||||
|
|||||||
@@ -1108,7 +1108,8 @@ public class FSkin {
|
|||||||
private static String preferredDir;
|
private static String preferredDir;
|
||||||
private static String preferredName;
|
private static String preferredName;
|
||||||
private static BufferedImage bimDefaultSprite, bimFavIcon, bimPreferredSprite, bimFoils, bimQuestDraftDeck, bimOldFoils,
|
private static BufferedImage bimDefaultSprite, bimFavIcon, bimPreferredSprite, bimFoils, bimQuestDraftDeck, bimOldFoils,
|
||||||
bimDefaultAvatars, bimPreferredAvatars, bimTrophies, bimAbilities, bimManaIcons, bimPhyrexian, bimDefaultSleeve, bimDefaultSleeve2, bimDefaultDeckbox, bimPrefferedSetLogo, bimDefaultWatermark;
|
bimDefaultAvatars, bimPreferredAvatars, bimTrophies, bimAbilities, bimManaIcons, bimPhyrexian, bimDefaultSleeve,
|
||||||
|
bimDefaultSleeve2, bimDefaultDeckbox, bimPrefferedSetLogo, bimDefaultWatermark, bimDefaultDraftRank;
|
||||||
private static int x0, y0, w0, h0, newW, newH, preferredW, preferredH;
|
private static int x0, y0, w0, h0, newW, newH, preferredW, preferredH;
|
||||||
private static int[] tempCoords;
|
private static int[] tempCoords;
|
||||||
private static int defaultFontSize = 12;
|
private static int defaultFontSize = 12;
|
||||||
@@ -1250,6 +1251,7 @@ public class FSkin {
|
|||||||
final File f16 = new File(preferredDir + ForgeConstants.SPRITE_SETLOGO_FILE);
|
final File f16 = new File(preferredDir + ForgeConstants.SPRITE_SETLOGO_FILE);
|
||||||
final File f17 = new File(defaultDir + ForgeConstants.SPRITE_WATERMARK_FILE);
|
final File f17 = new File(defaultDir + ForgeConstants.SPRITE_WATERMARK_FILE);
|
||||||
final File f18 = new File(defaultDir +ForgeConstants.SPRITE_PHYREXIAN_FILE);
|
final File f18 = new File(defaultDir +ForgeConstants.SPRITE_PHYREXIAN_FILE);
|
||||||
|
final File f19 = new File(defaultDir + ForgeConstants.SPRITE_DRAFTRANKS_FILE);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
int p = 0;
|
int p = 0;
|
||||||
@@ -1275,6 +1277,8 @@ public class FSkin {
|
|||||||
FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
||||||
bimDefaultDeckbox = ImageIO.read(f14);
|
bimDefaultDeckbox = ImageIO.read(f14);
|
||||||
FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
||||||
|
bimDefaultDraftRank = ImageIO.read(f19);
|
||||||
|
FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
||||||
bimPrefferedSetLogo = f16.exists() ? ImageIO.read(f16) : ImageIO.read(f15);
|
bimPrefferedSetLogo = f16.exists() ? ImageIO.read(f16) : ImageIO.read(f15);
|
||||||
FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
||||||
bimDefaultWatermark = ImageIO.read(f17);
|
bimDefaultWatermark = ImageIO.read(f17);
|
||||||
@@ -1346,6 +1350,9 @@ public class FSkin {
|
|||||||
case DECKBOX:
|
case DECKBOX:
|
||||||
setImage(prop, bimDefaultDeckbox);
|
setImage(prop, bimDefaultDeckbox);
|
||||||
break;
|
break;
|
||||||
|
case DRAFTRANKS:
|
||||||
|
setImage(prop, bimDefaultDraftRank);
|
||||||
|
break;
|
||||||
case SETLOGO:
|
case SETLOGO:
|
||||||
setImage(prop, bimPrefferedSetLogo);
|
setImage(prop, bimPrefferedSetLogo);
|
||||||
break;
|
break;
|
||||||
@@ -1375,6 +1382,7 @@ public class FSkin {
|
|||||||
bimDefaultSleeve.flush();
|
bimDefaultSleeve.flush();
|
||||||
bimDefaultSleeve2.flush();
|
bimDefaultSleeve2.flush();
|
||||||
bimDefaultDeckbox.flush();
|
bimDefaultDeckbox.flush();
|
||||||
|
bimDefaultDraftRank.flush();
|
||||||
bimPrefferedSetLogo.flush();
|
bimPrefferedSetLogo.flush();
|
||||||
bimDefaultWatermark.flush();
|
bimDefaultWatermark.flush();
|
||||||
bimQuestDraftDeck.flush();
|
bimQuestDraftDeck.flush();
|
||||||
@@ -1393,6 +1401,7 @@ public class FSkin {
|
|||||||
bimDefaultSleeve = null;
|
bimDefaultSleeve = null;
|
||||||
bimDefaultSleeve2 = null;
|
bimDefaultSleeve2 = null;
|
||||||
bimDefaultDeckbox = null;
|
bimDefaultDeckbox = null;
|
||||||
|
bimDefaultDraftRank = null;
|
||||||
bimPrefferedSetLogo = null;
|
bimPrefferedSetLogo = null;
|
||||||
bimDefaultWatermark = null;
|
bimDefaultWatermark = null;
|
||||||
bimPreferredAvatars = null;
|
bimPreferredAvatars = null;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import forge.assets.FSkin;
|
|||||||
import forge.assets.FSkinFont;
|
import forge.assets.FSkinFont;
|
||||||
import forge.assets.ImageCache;
|
import forge.assets.ImageCache;
|
||||||
import forge.error.ExceptionHandler;
|
import forge.error.ExceptionHandler;
|
||||||
|
import forge.gamemodes.limited.BoosterDraft;
|
||||||
import forge.gui.FThreads;
|
import forge.gui.FThreads;
|
||||||
import forge.gui.GuiBase;
|
import forge.gui.GuiBase;
|
||||||
import forge.gui.error.BugReporter;
|
import forge.gui.error.BugReporter;
|
||||||
@@ -221,6 +222,7 @@ public class Forge implements ApplicationListener {
|
|||||||
/* call preloadExtendedArt here, if we put it above we will *
|
/* call preloadExtendedArt here, if we put it above we will *
|
||||||
* get error: No OpenGL context found in the current thread. */
|
* get error: No OpenGL context found in the current thread. */
|
||||||
preloadExtendedArt();
|
preloadExtendedArt();
|
||||||
|
preloadBoosterDrafts();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -250,7 +252,10 @@ public class Forge implements ApplicationListener {
|
|||||||
if (!filteredkeys.isEmpty())
|
if (!filteredkeys.isEmpty())
|
||||||
ImageCache.preloadCache(filteredkeys);
|
ImageCache.preloadCache(filteredkeys);
|
||||||
}
|
}
|
||||||
|
private void preloadBoosterDrafts() {
|
||||||
|
//preloading of custom drafts
|
||||||
|
BoosterDraft.initializeCustomDrafts();
|
||||||
|
}
|
||||||
public static void openHomeScreen(int index, FScreen lastMatch) {
|
public static void openHomeScreen(int index, FScreen lastMatch) {
|
||||||
openScreen(HomeScreen.instance);
|
openScreen(HomeScreen.instance);
|
||||||
HomeScreen.instance.openMenu(index);
|
HomeScreen.instance.openMenu(index);
|
||||||
|
|||||||
@@ -125,6 +125,13 @@ public enum FSkinImage implements FImage {
|
|||||||
WATERMARK_W (FSkinProp.IMG_WATERMARK_W, SourceFile.WATERMARKS),
|
WATERMARK_W (FSkinProp.IMG_WATERMARK_W, SourceFile.WATERMARKS),
|
||||||
WATERMARK_C (FSkinProp.IMG_WATERMARK_C, SourceFile.WATERMARKS),
|
WATERMARK_C (FSkinProp.IMG_WATERMARK_C, SourceFile.WATERMARKS),
|
||||||
|
|
||||||
|
//draft ranks
|
||||||
|
DRAFTRANK_D (FSkinProp.IMG_DRAFTRANK_D, SourceFile.DRAFTRANKS),
|
||||||
|
DRAFTRANK_C (FSkinProp.IMG_DRAFTRANK_C, SourceFile.DRAFTRANKS),
|
||||||
|
DRAFTRANK_B (FSkinProp.IMG_DRAFTRANK_B, SourceFile.DRAFTRANKS),
|
||||||
|
DRAFTRANK_A (FSkinProp.IMG_DRAFTRANK_A, SourceFile.DRAFTRANKS),
|
||||||
|
DRAFTRANK_S (FSkinProp.IMG_DRAFTRANK_S, SourceFile.DRAFTRANKS),
|
||||||
|
|
||||||
//CardBG
|
//CardBG
|
||||||
CARDBG_A (FSkinProp.IMG_CARDBG_A, SourceFile.CARDBG),
|
CARDBG_A (FSkinProp.IMG_CARDBG_A, SourceFile.CARDBG),
|
||||||
CARDBG_B (FSkinProp.IMG_CARDBG_B, SourceFile.CARDBG),
|
CARDBG_B (FSkinProp.IMG_CARDBG_B, SourceFile.CARDBG),
|
||||||
@@ -497,6 +504,7 @@ public enum FSkinImage implements FImage {
|
|||||||
PHYREXIAN(ForgeConstants.SPRITE_PHYREXIAN_FILE),
|
PHYREXIAN(ForgeConstants.SPRITE_PHYREXIAN_FILE),
|
||||||
SETLOGOS(ForgeConstants.SPRITE_SETLOGO_FILE),
|
SETLOGOS(ForgeConstants.SPRITE_SETLOGO_FILE),
|
||||||
WATERMARKS(ForgeConstants.SPRITE_WATERMARK_FILE),
|
WATERMARKS(ForgeConstants.SPRITE_WATERMARK_FILE),
|
||||||
|
DRAFTRANKS(ForgeConstants.SPRITE_DRAFTRANKS_FILE),
|
||||||
CRACKS(ForgeConstants.SPRITE_CRACKS_FILE),
|
CRACKS(ForgeConstants.SPRITE_CRACKS_FILE),
|
||||||
CARDBG(ForgeConstants.SPRITE_CARDBG_FILE),
|
CARDBG(ForgeConstants.SPRITE_CARDBG_FILE),
|
||||||
PLANAR_CONQUEST(ForgeConstants.SPRITE_PLANAR_CONQUEST_FILE);
|
PLANAR_CONQUEST(ForgeConstants.SPRITE_PLANAR_CONQUEST_FILE);
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ public class FDeckChooser extends FScreen {
|
|||||||
&& selectedDeckType != DeckType.VINTAGE_CARDGEN_DECK && selectedDeckType != DeckType.MODERN_COLOR_DECK &&
|
&& selectedDeckType != DeckType.VINTAGE_CARDGEN_DECK && selectedDeckType != DeckType.MODERN_COLOR_DECK &&
|
||||||
selectedDeckType != DeckType.COLOR_DECK && selectedDeckType != DeckType.THEME_DECK
|
selectedDeckType != DeckType.COLOR_DECK && selectedDeckType != DeckType.THEME_DECK
|
||||||
&& selectedDeckType != DeckType.RANDOM_COMMANDER_DECK && selectedDeckType != DeckType.RANDOM_CARDGEN_COMMANDER_DECK) {
|
&& selectedDeckType != DeckType.RANDOM_COMMANDER_DECK && selectedDeckType != DeckType.RANDOM_CARDGEN_COMMANDER_DECK) {
|
||||||
FDeckViewer.show(getDeck());
|
FDeckViewer.show(getDeck(), false, DeckType.DRAFT_DECK.equals(selectedDeckType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -682,6 +682,15 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
protected boolean isDraftEditor() {
|
||||||
|
switch (editorType) {
|
||||||
|
case Draft:
|
||||||
|
case QuestDraft:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean allowsReplacement(final EditorType editorType){
|
public static boolean allowsReplacement(final EditorType editorType){
|
||||||
switch (editorType) {
|
switch (editorType) {
|
||||||
@@ -766,6 +775,9 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
CardManagerPage.this.buildMenu(menu, card);
|
CardManagerPage.this.buildMenu(menu, card);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
cardManager.setShowRanking(ItemManagerConfig.DRAFT_CONSPIRACY.equals(config0)
|
||||||
|
|| ItemManagerConfig.DRAFT_PACK.equals(config0) || ItemManagerConfig.DRAFT_POOL.equals(config0)
|
||||||
|
|| ItemManagerConfig.DRAFT_DECKS.equals(config0) || (parentScreen != null && parentScreen.isDraftEditor()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initialize() {
|
protected void initialize() {
|
||||||
@@ -773,6 +785,9 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
cardManager.setup(config);
|
cardManager.setup(config);
|
||||||
else //fix planar conquest deck editor and maybe others...
|
else //fix planar conquest deck editor and maybe others...
|
||||||
cardManager.setup(config, parentScreen.getColOverrides(config));
|
cardManager.setup(config, parentScreen.getColOverrides(config));
|
||||||
|
cardManager.setShowRanking(ItemManagerConfig.DRAFT_CONSPIRACY.equals(config)
|
||||||
|
|| ItemManagerConfig.DRAFT_PACK.equals(config) || ItemManagerConfig.DRAFT_POOL.equals(config)
|
||||||
|
|| ItemManagerConfig.DRAFT_DECKS.equals(config) || (parentScreen != null && parentScreen.isDraftEditor()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean canAddCards() {
|
protected boolean canAddCards() {
|
||||||
@@ -1695,6 +1710,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
int packNumber = draft.getCurrentBoosterIndex() + 1;
|
int packNumber = draft.getCurrentBoosterIndex() + 1;
|
||||||
caption = Localizer.getInstance().getMessage("lblPackN", String.valueOf(packNumber));
|
caption = Localizer.getInstance().getMessage("lblPackN", String.valueOf(packNumber));
|
||||||
cardManager.setPool(pool);
|
cardManager.setPool(pool);
|
||||||
|
cardManager.setShowRanking(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -114,9 +114,12 @@ public class FDeckViewer extends FScreen {
|
|||||||
private DeckSection currentSection;
|
private DeckSection currentSection;
|
||||||
|
|
||||||
public static void show(final Deck deck0) {
|
public static void show(final Deck deck0) {
|
||||||
show(deck0, false);
|
show(deck0, false, false);
|
||||||
}
|
}
|
||||||
public static void show(final Deck deck0, boolean noPreload) {
|
public static void show(final Deck deck0, boolean noPreload) {
|
||||||
|
show(deck0, noPreload, false);
|
||||||
|
}
|
||||||
|
public static void show(final Deck deck0, boolean noPreload, boolean showRanking) {
|
||||||
if (deck0 == null) { return; }
|
if (deck0 == null) { return; }
|
||||||
|
|
||||||
if (!noPreload){
|
if (!noPreload){
|
||||||
@@ -124,12 +127,12 @@ public class FDeckViewer extends FScreen {
|
|||||||
ImageCache.preloadCache(deck0);
|
ImageCache.preloadCache(deck0);
|
||||||
}
|
}
|
||||||
|
|
||||||
deckViewer = new FDeckViewer(deck0);
|
deckViewer = new FDeckViewer(deck0, showRanking);
|
||||||
deckViewer.setRotate180(MatchController.getView() != null && MatchController.getView().isTopHumanPlayerActive());
|
deckViewer.setRotate180(MatchController.getView() != null && MatchController.getView().isTopHumanPlayerActive());
|
||||||
Forge.openScreen(deckViewer);
|
Forge.openScreen(deckViewer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private FDeckViewer(Deck deck0) {
|
private FDeckViewer(Deck deck0, boolean showRanking) {
|
||||||
super(new MenuHeader(deck0.getName(), menu) {
|
super(new MenuHeader(deck0.getName(), menu) {
|
||||||
@Override
|
@Override
|
||||||
protected boolean displaySidebarForLandscapeMode() {
|
protected boolean displaySidebarForLandscapeMode() {
|
||||||
@@ -139,6 +142,7 @@ public class FDeckViewer extends FScreen {
|
|||||||
deck = deck0;
|
deck = deck0;
|
||||||
cardManager = new CardManager(false);
|
cardManager = new CardManager(false);
|
||||||
cardManager.setPool(deck.getMain());
|
cardManager.setPool(deck.getMain());
|
||||||
|
cardManager.setShowRanking(showRanking);
|
||||||
|
|
||||||
currentSection = DeckSection.Main;
|
currentSection = DeckSection.Main;
|
||||||
updateCaption();
|
updateCaption();
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
private final List<ItemFilter<? extends T>> filters = new ArrayList<>();
|
private final List<ItemFilter<? extends T>> filters = new ArrayList<>();
|
||||||
private boolean hideFilters = false;
|
private boolean hideFilters = false;
|
||||||
private boolean wantUnique = false;
|
private boolean wantUnique = false;
|
||||||
|
private boolean showRanking = false;
|
||||||
private boolean multiSelectMode = false;
|
private boolean multiSelectMode = false;
|
||||||
private FEventHandler selectionChangedHandler, itemActivateHandler;
|
private FEventHandler selectionChangedHandler, itemActivateHandler;
|
||||||
private ContextMenuBuilder<T> contextMenuBuilder;
|
private ContextMenuBuilder<T> contextMenuBuilder;
|
||||||
@@ -820,10 +821,18 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
return wantUnique;
|
return wantUnique;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getShowRanking() {
|
||||||
|
return showRanking;
|
||||||
|
}
|
||||||
|
|
||||||
public void setWantUnique(boolean unique) {
|
public void setWantUnique(boolean unique) {
|
||||||
wantUnique = unique;
|
wantUnique = unique;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setShowRanking(boolean showRanking0) {
|
||||||
|
showRanking = showRanking0;
|
||||||
|
}
|
||||||
|
|
||||||
public void setSelectionSupport(int minSelections0, int maxSelections0) {
|
public void setSelectionSupport(int minSelections0, int maxSelections0) {
|
||||||
for (ItemView<T> view : views) {
|
for (ItemView<T> view : views) {
|
||||||
view.setSelectionSupport(minSelections0, maxSelections0);
|
view.setSelectionSupport(minSelections0, maxSelections0);
|
||||||
|
|||||||
@@ -17,11 +17,14 @@ import forge.card.CardRenderer.CardStackPosition;
|
|||||||
import forge.deck.*;
|
import forge.deck.*;
|
||||||
import forge.deck.io.DeckPreferences;
|
import forge.deck.io.DeckPreferences;
|
||||||
import forge.game.card.CardView;
|
import forge.game.card.CardView;
|
||||||
|
import forge.gamemodes.limited.CardRanker;
|
||||||
import forge.gamemodes.planarconquest.ConquestCommander;
|
import forge.gamemodes.planarconquest.ConquestCommander;
|
||||||
import forge.item.InventoryItem;
|
import forge.item.InventoryItem;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
import forge.itemmanager.*;
|
import forge.itemmanager.*;
|
||||||
import forge.itemmanager.filters.ItemFilter;
|
import forge.itemmanager.filters.ItemFilter;
|
||||||
|
import forge.localinstance.properties.ForgePreferences;
|
||||||
|
import forge.model.FModel;
|
||||||
import forge.toolbox.*;
|
import forge.toolbox.*;
|
||||||
import forge.toolbox.FEvent.FEventHandler;
|
import forge.toolbox.FEvent.FEventHandler;
|
||||||
import forge.util.ImageUtil;
|
import forge.util.ImageUtil;
|
||||||
@@ -985,6 +988,26 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
|
|
||||||
if (item instanceof PaperCard) {
|
if (item instanceof PaperCard) {
|
||||||
CardRenderer.drawCard(g, (PaperCard) item, x, y, w, h, pos);
|
CardRenderer.drawCard(g, (PaperCard) item, x, y, w, h, pos);
|
||||||
|
if (itemManager.getShowRanking() && FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_OVERLAY_DRAFT_RANKING)) {
|
||||||
|
double score = CardRanker.getRawScore((PaperCard) item);
|
||||||
|
int draftRank = score <= 0 ? 0 : score > 99 ? 99 : (int) Math.round(CardRanker.getRawScore((PaperCard) item));
|
||||||
|
float rankSize = w/2;
|
||||||
|
float y2 = y+(rankSize-(rankSize*0.1f));
|
||||||
|
float x2 = x+rankSize/2;
|
||||||
|
if (draftRank >= 90) {
|
||||||
|
g.drawImage(FSkinImage.DRAFTRANK_S, x2, y2+1, rankSize, rankSize);
|
||||||
|
} else if (draftRank >= 80 && draftRank <= 89 ) {
|
||||||
|
g.drawImage(FSkinImage.DRAFTRANK_A, x2, y2+1, rankSize, rankSize);
|
||||||
|
} else if (draftRank >= 60 && draftRank <= 79 ) {
|
||||||
|
g.drawImage(FSkinImage.DRAFTRANK_B, x2, y2+1, rankSize, rankSize);
|
||||||
|
} else if (draftRank >= 25 && draftRank <= 59 ) {
|
||||||
|
g.drawImage(FSkinImage.DRAFTRANK_C, x2, y2+1, rankSize, rankSize);
|
||||||
|
} else {
|
||||||
|
g.drawImage(FSkinImage.DRAFTRANK_D, x2, y2+1, rankSize, rankSize);
|
||||||
|
}
|
||||||
|
String value = String.valueOf(draftRank);
|
||||||
|
g.drawText(value, FSkinFont.forHeight(rankSize/4), Color.WHITE, x, y, w, h, true, Align.center, true);
|
||||||
|
}
|
||||||
} else if (item instanceof ConquestCommander) {
|
} else if (item instanceof ConquestCommander) {
|
||||||
CardRenderer.drawCard(g, ((ConquestCommander) item).getCard(), x, y, w, h, pos);
|
CardRenderer.drawCard(g, ((ConquestCommander) item).getCard(), x, y, w, h, pos);
|
||||||
} else if (deckSelectMode) {
|
} else if (deckSelectMode) {
|
||||||
|
|||||||
@@ -595,6 +595,10 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
localizer.getMessage("lblShowCardIDOverlays"),
|
localizer.getMessage("lblShowCardIDOverlays"),
|
||||||
localizer.getMessage("nlShowCardIDOverlays")),
|
localizer.getMessage("nlShowCardIDOverlays")),
|
||||||
5);
|
5);
|
||||||
|
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_DRAFT_RANKING,
|
||||||
|
localizer.getMessage("lblShowDraftRankingOverlay"),
|
||||||
|
localizer.getMessage("nlShowDraftRankingOverlay")),
|
||||||
|
5);
|
||||||
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_ABILITY_ICONS,
|
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_ABILITY_ICONS,
|
||||||
localizer.getMessage("lblShowAbilityIconsOverlays"),
|
localizer.getMessage("lblShowAbilityIconsOverlays"),
|
||||||
localizer.getMessage("nlShowAbilityIconsOverlays")),
|
localizer.getMessage("nlShowAbilityIconsOverlays")),
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ Name=Adam Styborkski's Pauper Cube
|
|||||||
1 Clutch of Currents|BFZ
|
1 Clutch of Currents|BFZ
|
||||||
1 Coalition Honor Guard|EMA
|
1 Coalition Honor Guard|EMA
|
||||||
1 Colossal Might|ARB
|
1 Colossal Might|ARB
|
||||||
1 Common Iguana
|
1 Common Iguana|UST
|
||||||
1 Compulsive Research|STA
|
1 Compulsive Research|STA
|
||||||
1 Compulsory Rest|AKR
|
1 Compulsory Rest|AKR
|
||||||
1 Consume Strength|APC
|
1 Consume Strength|APC
|
||||||
|
|||||||
@@ -1044,6 +1044,8 @@ nlShowMatchBackground=Zeige Bilder im Spielfeldhintergrund.
|
|||||||
nlTheme=Wähle ein Thema um die Bildschirmanzeigen anzupassen.
|
nlTheme=Wähle ein Thema um die Bildschirmanzeigen anzupassen.
|
||||||
nlVibrateAfterLongPress=Aktiviert Vibration bei langem Druck, z.B. beim Zoomen.
|
nlVibrateAfterLongPress=Aktiviert Vibration bei langem Druck, z.B. beim Zoomen.
|
||||||
nlVibrateWhenLosingLife=Aktiviert Vibration bei Lebenspunktverlust.
|
nlVibrateWhenLosingLife=Aktiviert Vibration bei Lebenspunktverlust.
|
||||||
|
lblShowDraftRankingOverlay=Show Draft Ranking
|
||||||
|
nlShowDraftRankingOverlay=Shows the card ranking in Draft Editor.
|
||||||
lblBorderMaskOption=Rand-Masken-Option
|
lblBorderMaskOption=Rand-Masken-Option
|
||||||
nlBorderMaskOption=Wendet die gewählte Option auf die Kartenbilder an (Im Zweifel wähle Beschneiden/Crop).
|
nlBorderMaskOption=Wendet die gewählte Option auf die Kartenbilder an (Im Zweifel wähle Beschneiden/Crop).
|
||||||
lblEnableRoundBorder=Aktiviere Maske mit runden Ränder
|
lblEnableRoundBorder=Aktiviere Maske mit runden Ränder
|
||||||
|
|||||||
@@ -1045,6 +1045,8 @@ nlShowMatchBackground=Show match background image on battlefield, otherwise back
|
|||||||
nlTheme=Sets the theme that determines how display components are skinned.
|
nlTheme=Sets the theme that determines how display components are skinned.
|
||||||
nlVibrateAfterLongPress=Enable quick vibration to signify a long press, such as for card zooming.
|
nlVibrateAfterLongPress=Enable quick vibration to signify a long press, such as for card zooming.
|
||||||
nlVibrateWhenLosingLife=Enable vibration when your player loses life or takes damage during a game.
|
nlVibrateWhenLosingLife=Enable vibration when your player loses life or takes damage during a game.
|
||||||
|
lblShowDraftRankingOverlay=Show Draft Ranking
|
||||||
|
nlShowDraftRankingOverlay=Shows the card ranking in Draft Editor.
|
||||||
lblBorderMaskOption=Border Mask Option
|
lblBorderMaskOption=Border Mask Option
|
||||||
nlBorderMaskOption=Applies the selected border option for card images (If unsure, choose Crop).
|
nlBorderMaskOption=Applies the selected border option for card images (If unsure, choose Crop).
|
||||||
lblEnableRoundBorder=Enable Round Border Mask
|
lblEnableRoundBorder=Enable Round Border Mask
|
||||||
|
|||||||
@@ -1044,6 +1044,8 @@ nlShowMatchBackground=Muestra la imagen de fondo de la partida en el campo de ba
|
|||||||
nlTheme=Establece el tema que determina el aspecto global del juego.
|
nlTheme=Establece el tema que determina el aspecto global del juego.
|
||||||
nlVibrateAfterLongPress=Habilita la vibración rápida cuando se realice una pulsación prolongada, como p.ej. al realizar zoom de la carta.
|
nlVibrateAfterLongPress=Habilita la vibración rápida cuando se realice una pulsación prolongada, como p.ej. al realizar zoom de la carta.
|
||||||
nlVibrateWhenLosingLife=Habilita la vibración cuando tu jugador pierde vidas o sufre daños.
|
nlVibrateWhenLosingLife=Habilita la vibración cuando tu jugador pierde vidas o sufre daños.
|
||||||
|
lblShowDraftRankingOverlay=Show Draft Ranking
|
||||||
|
nlShowDraftRankingOverlay=Shows the card ranking in Draft Editor.
|
||||||
lblBorderMaskOption=Opción de máscara de borde
|
lblBorderMaskOption=Opción de máscara de borde
|
||||||
nlBorderMaskOption=Aplica la opción de borde seleccionada para las imágenes de las cartas (si no estás seguro, elige Crop).
|
nlBorderMaskOption=Aplica la opción de borde seleccionada para las imágenes de las cartas (si no estás seguro, elige Crop).
|
||||||
lblEnableRoundBorder=Habilitar máscara de bordes redondeados
|
lblEnableRoundBorder=Habilitar máscara de bordes redondeados
|
||||||
|
|||||||
@@ -1043,6 +1043,8 @@ nlShowMatchBackground=Mostra l''immagine di sfondo dell''incontro sul campo di b
|
|||||||
nlTheme=Imposta il tema che determina l''aspetto visivo dei vari componenti dell''interfaccia.
|
nlTheme=Imposta il tema che determina l''aspetto visivo dei vari componenti dell''interfaccia.
|
||||||
nlVibrateAfterLongPress=Abilitare una rapida vibrazione per indicare una pressione prolungata, ad esempio quando si ingrandisce una carta.
|
nlVibrateAfterLongPress=Abilitare una rapida vibrazione per indicare una pressione prolungata, ad esempio quando si ingrandisce una carta.
|
||||||
nlVibrateWhenLosingLife=Attiva le vibrazioni quando il giocatore perde punti vita o subisce danni durante una partita.
|
nlVibrateWhenLosingLife=Attiva le vibrazioni quando il giocatore perde punti vita o subisce danni durante una partita.
|
||||||
|
lblShowDraftRankingOverlay=Show Draft Ranking
|
||||||
|
nlShowDraftRankingOverlay=Shows the card ranking in Draft Editor.
|
||||||
lblBorderMaskOption=Opzioni della maschera dei bordi
|
lblBorderMaskOption=Opzioni della maschera dei bordi
|
||||||
nlBorderMaskOption=Applica l''opzione selezionata ai bordi delle carte (Nel dubbio, scegli Ritaglia).
|
nlBorderMaskOption=Applica l''opzione selezionata ai bordi delle carte (Nel dubbio, scegli Ritaglia).
|
||||||
lblEnableRoundBorder=Abilita maschera bordi arrotondati
|
lblEnableRoundBorder=Abilita maschera bordi arrotondati
|
||||||
|
|||||||
@@ -1045,6 +1045,8 @@ nlShowMatchBackground=戦場の背景画像を常時します。そうでない
|
|||||||
nlTheme=UI コンポーネントのスキンを使うテーマを設定します。
|
nlTheme=UI コンポーネントのスキンを使うテーマを設定します。
|
||||||
nlVibrateAfterLongPress=ズームインとかのために長押した時の振動を有効にします。
|
nlVibrateAfterLongPress=ズームインとかのために長押した時の振動を有効にします。
|
||||||
nlVibrateWhenLosingLife=プレーヤーがゲーム中にライフを失ったり、ダメージを受けたりした時に振動を有効にします。
|
nlVibrateWhenLosingLife=プレーヤーがゲーム中にライフを失ったり、ダメージを受けたりした時に振動を有効にします。
|
||||||
|
lblShowDraftRankingOverlay=Show Draft Ranking
|
||||||
|
nlShowDraftRankingOverlay=Shows the card ranking in Draft Editor.
|
||||||
lblBorderMaskOption=枠のマスクオプション
|
lblBorderMaskOption=枠のマスクオプション
|
||||||
nlBorderMaskOption=カード画像の枠に選択したマスクを適用します(分からない場合は Crop にしてください)。
|
nlBorderMaskOption=カード画像の枠に選択したマスクを適用します(分からない場合は Crop にしてください)。
|
||||||
lblEnableRoundBorder=ラウンドボーダーマスクを有効にする
|
lblEnableRoundBorder=ラウンドボーダーマスクを有効にする
|
||||||
|
|||||||
@@ -1045,6 +1045,8 @@ nlShowMatchBackground=在战场显示背景图片,否则显示背景纹理。
|
|||||||
nlTheme=设置显示的组件使用的外观主题。
|
nlTheme=设置显示的组件使用的外观主题。
|
||||||
nlVibrateAfterLongPress=启用长按触发震动,例如长按缩放卡牌图片。
|
nlVibrateAfterLongPress=启用长按触发震动,例如长按缩放卡牌图片。
|
||||||
nlVibrateWhenLosingLife=启用当玩家在游戏中失去生命或收到伤害时震动。
|
nlVibrateWhenLosingLife=启用当玩家在游戏中失去生命或收到伤害时震动。
|
||||||
|
lblShowDraftRankingOverlay=Show Draft Ranking
|
||||||
|
nlShowDraftRankingOverlay=Shows the card ranking in Draft Editor.
|
||||||
lblBorderMaskOption=边框遮罩选项
|
lblBorderMaskOption=边框遮罩选项
|
||||||
nlBorderMaskOption=将选定的边框选项应用于卡图(如果你不清楚该功能的作用请选Crop)。
|
nlBorderMaskOption=将选定的边框选项应用于卡图(如果你不清楚该功能的作用请选Crop)。
|
||||||
lblEnableRoundBorder=启用圆角边框掩码
|
lblEnableRoundBorder=启用圆角边框掩码
|
||||||
|
|||||||
BIN
forge-gui/res/skins/default/sprite_draftranks.png
Normal file
BIN
forge-gui/res/skins/default/sprite_draftranks.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 203 KiB |
@@ -71,10 +71,13 @@ public class BoosterDraft implements IBoosterDraft {
|
|||||||
private int packsInDraft;
|
private int packsInDraft;
|
||||||
|
|
||||||
private final Map<String, Float> draftPicks = new TreeMap<>();
|
private final Map<String, Float> draftPicks = new TreeMap<>();
|
||||||
|
static final List<CustomLimited> customs = new ArrayList<>();
|
||||||
protected LimitedPoolType draftFormat;
|
protected LimitedPoolType draftFormat;
|
||||||
|
|
||||||
protected final List<Supplier<List<PaperCard>>> product = new ArrayList<>();
|
protected final List<Supplier<List<PaperCard>>> product = new ArrayList<>();
|
||||||
|
public static void initializeCustomDrafts() {
|
||||||
|
loadCustomDrafts();
|
||||||
|
}
|
||||||
public static BoosterDraft createDraft(final LimitedPoolType draftType) {
|
public static BoosterDraft createDraft(final LimitedPoolType draftType) {
|
||||||
final BoosterDraft draft = new BoosterDraft(draftType);
|
final BoosterDraft draft = new BoosterDraft(draftType);
|
||||||
if (!draft.generateProduct()) {
|
if (!draft.generateProduct()) {
|
||||||
@@ -297,8 +300,8 @@ public class BoosterDraft implements IBoosterDraft {
|
|||||||
* Looks for draft files, reads them, returns a list.
|
* Looks for draft files, reads them, returns a list.
|
||||||
*/
|
*/
|
||||||
private static List<CustomLimited> loadCustomDrafts() {
|
private static List<CustomLimited> loadCustomDrafts() {
|
||||||
|
if (customs.isEmpty()) {
|
||||||
String[] dList;
|
String[] dList;
|
||||||
final List<CustomLimited> customs = new ArrayList<>();
|
|
||||||
|
|
||||||
// get list of custom draft files
|
// get list of custom draft files
|
||||||
final File dFolder = new File(ForgeConstants.DRAFT_DIR);
|
final File dFolder = new File(ForgeConstants.DRAFT_DIR);
|
||||||
@@ -318,6 +321,7 @@ public class BoosterDraft implements IBoosterDraft {
|
|||||||
customs.add(CustomLimited.parse(dfData, FModel.getDecks().getCubes()));
|
customs.add(CustomLimited.parse(dfData, FModel.getDecks().getCubes()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return customs;
|
return customs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ public final class ForgeConstants {
|
|||||||
public static final String SPRITE_PLANAR_CONQUEST_FILE = "sprite_planar_conquest.png";
|
public static final String SPRITE_PLANAR_CONQUEST_FILE = "sprite_planar_conquest.png";
|
||||||
public static final String SPRITE_SETLOGO_FILE = "sprite_setlogo.png";
|
public static final String SPRITE_SETLOGO_FILE = "sprite_setlogo.png";
|
||||||
public static final String SPRITE_WATERMARK_FILE = "sprite_watermark.png";
|
public static final String SPRITE_WATERMARK_FILE = "sprite_watermark.png";
|
||||||
|
public static final String SPRITE_DRAFTRANKS_FILE = "sprite_draftranks.png";
|
||||||
public static String SPRITE_CARDBG_FILE = "sprite_cardbg.png";
|
public static String SPRITE_CARDBG_FILE = "sprite_cardbg.png";
|
||||||
public static final String FONT_FILE = "font1.ttf";
|
public static final String FONT_FILE = "font1.ttf";
|
||||||
public static final String SPLASH_BG_FILE = "bg_splash.png";
|
public static final String SPLASH_BG_FILE = "bg_splash.png";
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
|||||||
UI_OVERLAY_CARD_MANA_COST ("true"),
|
UI_OVERLAY_CARD_MANA_COST ("true"),
|
||||||
UI_OVERLAY_CARD_ID ("true"),
|
UI_OVERLAY_CARD_ID ("true"),
|
||||||
UI_OVERLAY_ABILITY_ICONS("true"),
|
UI_OVERLAY_ABILITY_ICONS("true"),
|
||||||
|
UI_OVERLAY_DRAFT_RANKING("true"),
|
||||||
UI_ENABLE_ONLINE_IMAGE_FETCHER ("false"),
|
UI_ENABLE_ONLINE_IMAGE_FETCHER ("false"),
|
||||||
UI_PREFERRED_ART("LATEST_ART_ALL_EDITIONS"),
|
UI_PREFERRED_ART("LATEST_ART_ALL_EDITIONS"),
|
||||||
UI_SMART_CARD_ART("false"),
|
UI_SMART_CARD_ART("false"),
|
||||||
|
|||||||
@@ -422,6 +422,13 @@ public enum FSkinProp {
|
|||||||
IMG_WATERMARK_W (new int[] {2, 1006, 500, 500}, PropType.WATERMARKS),
|
IMG_WATERMARK_W (new int[] {2, 1006, 500, 500}, PropType.WATERMARKS),
|
||||||
IMG_WATERMARK_C (new int[] {504, 1006, 500, 500}, PropType.WATERMARKS),
|
IMG_WATERMARK_C (new int[] {504, 1006, 500, 500}, PropType.WATERMARKS),
|
||||||
|
|
||||||
|
//FOR DRAFT RANKING
|
||||||
|
IMG_DRAFTRANK_D (new int[] {2, 2, 240, 240}, PropType.DRAFTRANKS),
|
||||||
|
IMG_DRAFTRANK_C (new int[] {244, 2, 240, 240}, PropType.DRAFTRANKS),
|
||||||
|
IMG_DRAFTRANK_B (new int[] {2, 244, 240, 240}, PropType.DRAFTRANKS),
|
||||||
|
IMG_DRAFTRANK_A (new int[] {244, 244, 240, 240}, PropType.DRAFTRANKS),
|
||||||
|
IMG_DRAFTRANK_S (new int[] {2, 486, 240, 240}, PropType.DRAFTRANKS),
|
||||||
|
|
||||||
//FOR CARDBG
|
//FOR CARDBG
|
||||||
IMG_CARDBG_A (new int[] {2, 2, 339, 496}, PropType.CARDBG),
|
IMG_CARDBG_A (new int[] {2, 2, 339, 496}, PropType.CARDBG),
|
||||||
IMG_CARDBG_B (new int[] {343, 2, 339, 496}, PropType.CARDBG),
|
IMG_CARDBG_B (new int[] {343, 2, 339, 496}, PropType.CARDBG),
|
||||||
@@ -574,6 +581,7 @@ public enum FSkinProp {
|
|||||||
DECKBOX,
|
DECKBOX,
|
||||||
SETLOGO,
|
SETLOGO,
|
||||||
WATERMARKS,
|
WATERMARKS,
|
||||||
|
DRAFTRANKS,
|
||||||
CARDBG,
|
CARDBG,
|
||||||
FAVICON
|
FAVICON
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user