Draft Ranking on ImageView

- add an option to show draft card rankings
This commit is contained in:
Anthony Calosa
2022-02-11 14:12:44 +08:00
parent cde13348d6
commit 1eb4aa5647
40 changed files with 203 additions and 55 deletions

View File

@@ -22,6 +22,7 @@ import forge.assets.FSkin;
import forge.assets.FSkinFont;
import forge.assets.ImageCache;
import forge.error.ExceptionHandler;
import forge.gamemodes.limited.BoosterDraft;
import forge.gui.FThreads;
import forge.gui.GuiBase;
import forge.gui.error.BugReporter;
@@ -221,6 +222,7 @@ public class Forge implements ApplicationListener {
/* call preloadExtendedArt here, if we put it above we will *
* get error: No OpenGL context found in the current thread. */
preloadExtendedArt();
preloadBoosterDrafts();
}
});
}
@@ -250,7 +252,10 @@ public class Forge implements ApplicationListener {
if (!filteredkeys.isEmpty())
ImageCache.preloadCache(filteredkeys);
}
private void preloadBoosterDrafts() {
//preloading of custom drafts
BoosterDraft.initializeCustomDrafts();
}
public static void openHomeScreen(int index, FScreen lastMatch) {
openScreen(HomeScreen.instance);
HomeScreen.instance.openMenu(index);

View File

@@ -125,6 +125,13 @@ public enum FSkinImage implements FImage {
WATERMARK_W (FSkinProp.IMG_WATERMARK_W, 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_A (FSkinProp.IMG_CARDBG_A, SourceFile.CARDBG),
CARDBG_B (FSkinProp.IMG_CARDBG_B, SourceFile.CARDBG),
@@ -497,6 +504,7 @@ public enum FSkinImage implements FImage {
PHYREXIAN(ForgeConstants.SPRITE_PHYREXIAN_FILE),
SETLOGOS(ForgeConstants.SPRITE_SETLOGO_FILE),
WATERMARKS(ForgeConstants.SPRITE_WATERMARK_FILE),
DRAFTRANKS(ForgeConstants.SPRITE_DRAFTRANKS_FILE),
CRACKS(ForgeConstants.SPRITE_CRACKS_FILE),
CARDBG(ForgeConstants.SPRITE_CARDBG_FILE),
PLANAR_CONQUEST(ForgeConstants.SPRITE_PLANAR_CONQUEST_FILE);

View File

@@ -162,7 +162,7 @@ public class FDeckChooser extends FScreen {
&& selectedDeckType != DeckType.VINTAGE_CARDGEN_DECK && selectedDeckType != DeckType.MODERN_COLOR_DECK &&
selectedDeckType != DeckType.COLOR_DECK && selectedDeckType != DeckType.THEME_DECK
&& selectedDeckType != DeckType.RANDOM_COMMANDER_DECK && selectedDeckType != DeckType.RANDOM_CARDGEN_COMMANDER_DECK) {
FDeckViewer.show(getDeck());
FDeckViewer.show(getDeck(), false, DeckType.DRAFT_DECK.equals(selectedDeckType));
}
}
});

View File

@@ -682,6 +682,15 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
return false;
}
}
protected boolean isDraftEditor() {
switch (editorType) {
case Draft:
case QuestDraft:
return true;
default:
return false;
}
}
public static boolean allowsReplacement(final EditorType editorType){
switch (editorType) {
@@ -766,6 +775,9 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
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() {
@@ -773,6 +785,9 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
cardManager.setup(config);
else //fix planar conquest deck editor and maybe others...
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() {
@@ -1695,6 +1710,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
int packNumber = draft.getCurrentBoosterIndex() + 1;
caption = Localizer.getInstance().getMessage("lblPackN", String.valueOf(packNumber));
cardManager.setPool(pool);
cardManager.setShowRanking(true);
}
@Override

View File

@@ -114,9 +114,12 @@ public class FDeckViewer extends FScreen {
private DeckSection currentSection;
public static void show(final Deck deck0) {
show(deck0, false);
show(deck0, false, false);
}
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 (!noPreload){
@@ -124,12 +127,12 @@ public class FDeckViewer extends FScreen {
ImageCache.preloadCache(deck0);
}
deckViewer = new FDeckViewer(deck0);
deckViewer = new FDeckViewer(deck0, showRanking);
deckViewer.setRotate180(MatchController.getView() != null && MatchController.getView().isTopHumanPlayerActive());
Forge.openScreen(deckViewer);
}
private FDeckViewer(Deck deck0) {
private FDeckViewer(Deck deck0, boolean showRanking) {
super(new MenuHeader(deck0.getName(), menu) {
@Override
protected boolean displaySidebarForLandscapeMode() {
@@ -139,6 +142,7 @@ public class FDeckViewer extends FScreen {
deck = deck0;
cardManager = new CardManager(false);
cardManager.setPool(deck.getMain());
cardManager.setShowRanking(showRanking);
currentSection = DeckSection.Main;
updateCaption();

View File

@@ -74,6 +74,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
private final List<ItemFilter<? extends T>> filters = new ArrayList<>();
private boolean hideFilters = false;
private boolean wantUnique = false;
private boolean showRanking = false;
private boolean multiSelectMode = false;
private FEventHandler selectionChangedHandler, itemActivateHandler;
private ContextMenuBuilder<T> contextMenuBuilder;
@@ -820,10 +821,18 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
return wantUnique;
}
public boolean getShowRanking() {
return showRanking;
}
public void setWantUnique(boolean unique) {
wantUnique = unique;
}
public void setShowRanking(boolean showRanking0) {
showRanking = showRanking0;
}
public void setSelectionSupport(int minSelections0, int maxSelections0) {
for (ItemView<T> view : views) {
view.setSelectionSupport(minSelections0, maxSelections0);

View File

@@ -17,11 +17,14 @@ import forge.card.CardRenderer.CardStackPosition;
import forge.deck.*;
import forge.deck.io.DeckPreferences;
import forge.game.card.CardView;
import forge.gamemodes.limited.CardRanker;
import forge.gamemodes.planarconquest.ConquestCommander;
import forge.item.InventoryItem;
import forge.item.PaperCard;
import forge.itemmanager.*;
import forge.itemmanager.filters.ItemFilter;
import forge.localinstance.properties.ForgePreferences;
import forge.model.FModel;
import forge.toolbox.*;
import forge.toolbox.FEvent.FEventHandler;
import forge.util.ImageUtil;
@@ -985,6 +988,26 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
if (item instanceof PaperCard) {
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) {
CardRenderer.drawCard(g, ((ConquestCommander) item).getCard(), x, y, w, h, pos);
} else if (deckSelectMode) {

View File

@@ -595,13 +595,17 @@ public class SettingsPage extends TabPage<SettingsScreen> {
localizer.getMessage("lblShowCardIDOverlays"),
localizer.getMessage("nlShowCardIDOverlays")),
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,
localizer.getMessage("lblShowAbilityIconsOverlays"),
localizer.getMessage("nlShowAbilityIconsOverlays")),
5);
lstSettings.addItem(new BooleanSetting(FPref.UI_USE_LASER_ARROWS,
localizer.getMessage("lblUseLaserArrows"),
localizer.getMessage("nlUseLaserArrows")),
localizer.getMessage("lblUseLaserArrows"),
localizer.getMessage("nlUseLaserArrows")),
5);
//Vibration Options
lstSettings.addItem(new BooleanSetting(FPref.UI_VIBRATE_ON_LIFE_LOSS,