diff --git a/.gitattributes b/.gitattributes index c8067da183f..86a3934fa2f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19625,6 +19625,7 @@ forge-gui/src/main/java/forge/properties/ForgeConstants.java -text forge-gui/src/main/java/forge/properties/ForgePreferences.java svneol=native#text/plain forge-gui/src/main/java/forge/properties/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/quest/BoosterUtils.java svneol=native#text/plain +forge-gui/src/main/java/forge/quest/IQuestEvent.java -text forge-gui/src/main/java/forge/quest/IQuestRewardCard.java -text forge-gui/src/main/java/forge/quest/IQuestTournamentView.java -text forge-gui/src/main/java/forge/quest/IVQuestStats.java -text diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java index 06daa9a0044..cd18ffd0c16 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java @@ -30,6 +30,7 @@ import forge.itemmanager.views.ItemTableColumn; import forge.model.FModel; import forge.quest.QuestController; import forge.quest.QuestSpellShop; +import forge.quest.QuestUtil; import forge.screens.deckeditor.views.*; import forge.screens.home.quest.CSubmenuQuestDecks; import forge.screens.match.controllers.CDetailPicture; @@ -179,7 +180,7 @@ public final class CEditorQuestCardShop extends ACEditorBase, IQuestT private final FLabel lblCredits = new FLabel.Builder() .icon(FSkin.getIcon(FSkinProp.ICO_QUEST_COINSTACK)) - .iconScaleFactor(0.8f) + .iconScaleFactor(0.75f) .fontSize(14).build(); private final FScrollPanel pnlTournaments = new FScrollPanel(new MigLayout("insets 0, gap 0, wrap, ax center"), true, diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/ViewStall.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/ViewStall.java index 95333fa4542..6ae3a325408 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/ViewStall.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/ViewStall.java @@ -19,6 +19,7 @@ package forge.screens.home.quest; import forge.model.FModel; import forge.quest.QuestController; +import forge.quest.QuestUtil; import forge.quest.bazaar.IQuestBazaarItem; import forge.quest.bazaar.QuestStallDefinition; import forge.quest.data.QuestAssets; @@ -146,7 +147,7 @@ public class ViewStall extends JPanel { final QuestAssets qS = qData.getAssets(); StringBuilder sb = new StringBuilder(); sb.append("Credits: "); - sb.append(qS.getCredits()); + sb.append(QuestUtil.formatCredits(qS.getCredits())); sb.append(" Life: "); sb.append(qS.getLife(qData.getMode())); sb.append(" Level: "); diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestBazaarScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestBazaarScreen.java index 7effc66a134..16b6826fb27 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestBazaarScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestBazaarScreen.java @@ -105,7 +105,7 @@ public class QuestBazaarScreen extends TabPageScreen { } final QuestAssets qS = qData.getAssets(); - lblCredits.setText("Credits: " + qS.getCredits()); + lblCredits.setText("Credits: " + QuestUtil.formatCredits(qS.getCredits())); lblLife.setText("Life: " + qS.getLife(qData.getMode())); final List items = qData.getBazaar().getItems(qData, stallDef.getName()); diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestEventPanel.java b/forge-gui-mobile/src/forge/screens/quest/QuestEventPanel.java index 08c385cb956..adf65172bb6 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestEventPanel.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestEventPanel.java @@ -9,8 +9,7 @@ import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.FSkinColor.Colors; import forge.assets.ImageCache; -import forge.quest.QuestEvent; -import forge.quest.QuestUtil; +import forge.quest.IQuestEvent; import forge.screens.settings.SettingsScreen; import forge.toolbox.FDisplayObject; import forge.toolbox.FEvent; @@ -36,20 +35,20 @@ class QuestEventPanel extends FDisplayObject { private static final float RADIO_BUTTON_RADIUS = Utils.AVG_FINGER_WIDTH / 4; private static final float MIN_HEIGHT = 2 * Utils.AVG_FINGER_HEIGHT; - private final QuestEvent event; + private final IQuestEvent event; private final FImage img; private Container container; - public QuestEventPanel(final QuestEvent e0, final Container container0) { + public QuestEventPanel(final IQuestEvent e0, final Container container0) { event = e0; - img = ImageCache.getIcon(e0); + img = event.hasImage() ? ImageCache.getIcon(e0) : null; container = container0; if (container.selectedPanel == null) { setSelected(true); //select first panel in container by default } } - public QuestEvent getEvent() { + public IQuestEvent getEvent() { return event; } @@ -64,7 +63,7 @@ class QuestEventPanel extends FDisplayObject { } else if (selected0) { container.selectedPanel = this; - QuestUtil.setEvent(event); + event.select(); } } @@ -83,22 +82,27 @@ class QuestEventPanel extends FDisplayObject { float h = getHeight(); g.fillGradientRect(GRADIENT_LEFT_COLOR, GRADIENT_RIGHT_COLOR, false, 0, 0, w, h); - //draw icon float x = PADDING; float y = PADDING; - float imageSize = h - 2 * PADDING; - float maxImageSize = w / 3; - if (imageSize > maxImageSize) { //ensure image doesn't take up too much space - y += (imageSize - maxImageSize) / 2; - imageSize = maxImageSize; + + //draw image if needed + if (img != null) { + float imageSize = h - 2 * PADDING; + float maxImageSize = w / 3; + if (imageSize > maxImageSize) { //ensure image doesn't take up too much space + y += (imageSize - maxImageSize) / 2; + imageSize = maxImageSize; + } + g.drawImage(img, x, y, imageSize, imageSize); + + //shift title to the right of and slightly below the top of the icon + x += imageSize + 2 * PADDING; + y = 2 * PADDING; } - g.drawImage(img, x, y, imageSize, imageSize); //draw title - x += imageSize + 2 * PADDING; - y = 2 * PADDING; w -= x + 2 * (RADIO_BUTTON_RADIUS + PADDING); - String title = event.getTitle() + " (" + event.getDifficulty().getTitle() + ")"; + String title = event.getFullTitle(); g.drawText(title, TITLE_FONT, TITLE_COLOR, x, y, w, h, false, HAlignment.LEFT, false); //draw description diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java index b349e94c33a..28fdba3fb10 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java @@ -119,7 +119,7 @@ public class QuestSpellShopScreen extends TabPageScreen { } public void updateCreditsLabel() { - String credits = "Credits: " + FModel.getQuest().getAssets().getCredits(); + String credits = "Credits: " + QuestUtil.formatCredits(FModel.getQuest().getAssets().getCredits()); spellShopPage.lblCredits.setText(credits); inventoryPage.lblCredits.setText(credits); } @@ -170,7 +170,7 @@ public class QuestSpellShopScreen extends TabPageScreen { private static abstract class SpellShopBasePage extends TabPage { protected final SpellShopManager itemManager; - protected FLabel lblCredits = new FLabel.Builder().icon(FSkinImage.QUEST_COINSTACK).iconScaleFactor(1f).font(FSkinFont.get(16)).build(); + protected FLabel lblCredits = new FLabel.Builder().icon(FSkinImage.QUEST_COINSTACK).iconScaleFactor(0.75f).font(FSkinFont.get(16)).build(); protected SpellShopBasePage(String caption0, FImage icon0, boolean isShop0) { super(caption0, icon0); diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java index ed3105146cb..eac96e274b0 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java @@ -29,7 +29,7 @@ import forge.util.Utils; public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestTournamentView { private final FLabel lblCredits = add(new FLabel.Builder().icon(FSkinImage.QUEST_COINSTACK) - .iconScaleFactor(1f).font(FSkinFont.get(16)).build()); + .iconScaleFactor(0.75f).font(FSkinFont.get(16)).build()); private final FLabel lblTokens = add(new FLabel.Builder() .align(HAlignment.RIGHT).font(FSkinFont.get(16)).build()); @@ -115,13 +115,18 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT @Override public void updateEventList(QuestEventDraftContainer events) { pnlTournaments.clear(); - if (events == null) { return; } - /*for (QuestEventDraft event : events) { - pnlTournaments.add(new QuestEventPanel(event, pnlTournaments)); - }*/ + if (events != null) { + for (QuestEventDraft event : events) { + pnlTournaments.add(new QuestEventPanel(event, pnlTournaments)); + } + } pnlTournaments.revalidate(); + + boolean hasTournaments = pnlTournaments.getChildCount() > 0; + pnlTournaments.setVisible(hasTournaments); + lblNoTournaments.setVisible(!hasTournaments); } @Override diff --git a/forge-gui/src/main/java/forge/quest/IQuestEvent.java b/forge-gui/src/main/java/forge/quest/IQuestEvent.java new file mode 100644 index 00000000000..56f1280276d --- /dev/null +++ b/forge-gui/src/main/java/forge/quest/IQuestEvent.java @@ -0,0 +1,10 @@ +package forge.quest; + +import forge.game.player.IHasIcon; + +public interface IQuestEvent extends IHasIcon { + String getFullTitle(); + String getDescription(); + void select(); + boolean hasImage(); +} diff --git a/forge-gui/src/main/java/forge/quest/QuestEvent.java b/forge-gui/src/main/java/forge/quest/QuestEvent.java index ea212b26067..a9f0cabd6fb 100644 --- a/forge-gui/src/main/java/forge/quest/QuestEvent.java +++ b/forge-gui/src/main/java/forge/quest/QuestEvent.java @@ -20,7 +20,6 @@ package forge.quest; import com.google.common.base.Function; import forge.deck.Deck; -import forge.game.player.IHasIcon; import forge.item.InventoryItem; import java.util.ArrayList; @@ -35,7 +34,7 @@ import java.util.List; * MODEL - A basic event instance in Quest mode. Can be extended for use in * unique event types: battles, quests, and others. */ -public abstract class QuestEvent implements IHasIcon { +public abstract class QuestEvent implements IQuestEvent { // Default vals if none provided in the event file. private Deck eventDeck = null; private String title = "Mystery Event"; @@ -53,7 +52,7 @@ public abstract class QuestEvent implements IHasIcon { }; public final String getTitle() { - return this.title; + return title; } /** @@ -64,57 +63,57 @@ public abstract class QuestEvent implements IHasIcon { } public final QuestEventDifficulty getDifficulty() { - return this.difficulty; + return difficulty; } public final String getDescription() { - return this.description; + return description; } public final Deck getEventDeck() { - return this.eventDeck; + return eventDeck; } @Override public final String getIconImageKey() { - return this.imageKey; + return imageKey; } public final String getName() { - return this.name; + return name; } public final String getProfile() { - return this.profile; + return profile; } - public void setProfile(final String profi) { - this.profile = profi; + public void setProfile(final String profile0) { + profile = profile0; } public void setName(final String name0) { - this.name = name0; + name = name0; } public void setTitle(final String title0) { - this.title = title0; + title = title0; } public void setDifficulty(final QuestEventDifficulty difficulty0) { - this.difficulty = difficulty0; + difficulty = difficulty0; } public void setDescription(final String description0) { - this.description = description0; + description = description0; } public void setEventDeck(final Deck eventDeck0) { - this.eventDeck = eventDeck0; + eventDeck = eventDeck0; } @Override public void setIconImageKey(final String s0) { - this.imageKey = s0; + imageKey = s0; } public final List getCardRewardList() { @@ -122,13 +121,13 @@ public abstract class QuestEvent implements IHasIcon { return null; } if (cardRewardList == null) { - this.cardRewardList = new ArrayList(BoosterUtils.generateCardRewardList(cardReward)); + cardRewardList = new ArrayList(BoosterUtils.generateCardRewardList(cardReward)); } - return this.cardRewardList; + return cardRewardList; } public void setCardReward(final String cardReward0) { - this.cardReward = cardReward0; + cardReward = cardReward0; } public List getHumanExtraCards() { @@ -138,4 +137,19 @@ public abstract class QuestEvent implements IHasIcon { public List getAiExtraCards() { return Collections.emptyList(); } + + @Override + public final String getFullTitle() { + return title + " (" + difficulty.getTitle() + ")"; + } + + @Override + public void select() { + QuestUtil.setEvent(this); + } + + @Override + public boolean hasImage() { + return true; + } } diff --git a/forge-gui/src/main/java/forge/quest/QuestEventDraft.java b/forge-gui/src/main/java/forge/quest/QuestEventDraft.java index 1880c7910d1..88766d6b8dc 100644 --- a/forge-gui/src/main/java/forge/quest/QuestEventDraft.java +++ b/forge-gui/src/main/java/forge/quest/QuestEventDraft.java @@ -50,7 +50,7 @@ import java.util.*; * MODEL - A basic event instance in Quest mode. Can be extended for use in * unique event types: battles, quests, and others. */ -public class QuestEventDraft { +public class QuestEventDraft implements IQuestEvent { public static class QuestDraftPrizes { @@ -1097,4 +1097,45 @@ public class QuestEventDraft { return bracket; } + + @Override + public final String getFullTitle() { + return title; + } + + public String getBoosterList() { + String boosterList = ""; + String[] boosterArray = boosterConfiguration.split("/"); + for (int i = 0; i < boosterArray.length; i++) { + boosterList += FModel.getMagicDb().getEditions().get(boosterArray[i]).getName(); + if (i != boosterArray.length - 1) { + boosterList += " | "; + } + } + return boosterList; + } + + @Override + public String getDescription() { + return getBoosterList() + "\n" + QuestUtil.formatCredits(entryFee) + " Credit Entry Fee"; + } + + @Override + public void select() { + QuestUtil.setDraftEvent(this); + } + + @Override + public String getIconImageKey() { + return null; + } + + @Override + public void setIconImageKey(String iconImageKey) { + } + + @Override + public boolean hasImage() { + return false; + } } diff --git a/forge-gui/src/main/java/forge/quest/QuestTournamentController.java b/forge-gui/src/main/java/forge/quest/QuestTournamentController.java index 0fad71972ac..872b8554c58 100644 --- a/forge-gui/src/main/java/forge/quest/QuestTournamentController.java +++ b/forge-gui/src/main/java/forge/quest/QuestTournamentController.java @@ -88,7 +88,7 @@ public class QuestTournamentController { final QuestEventDraft.QuestDraftPrizes prizes = draft.collectPrizes(); if (prizes.hasCredits()) { - SOptionPane.showMessageDialog("For placing " + placement + ", you have been awarded " + prizes.credits + " credits!", "Credits Awarded", FSkinProp.ICO_QUEST_GOLD); + SOptionPane.showMessageDialog("For placing " + placement + ", you have been awarded " + QuestUtil.formatCredits(prizes.credits) + " credits!", "Credits Awarded", FSkinProp.ICO_QUEST_GOLD); } if (prizes.hasIndividualCards()) { @@ -230,7 +230,7 @@ public class QuestTournamentController { } private void updateSelectTournament() { - view.getLblCredits().setText("Credits: " + FModel.getQuest().getAssets().getCredits()); + view.getLblCredits().setText("Credits: " + QuestUtil.formatCredits(FModel.getQuest().getAssets().getCredits())); final QuestAchievements achievements = FModel.getQuest().getAchievements(); achievements.generateDrafts(); @@ -390,11 +390,11 @@ public class QuestTournamentController { final long creditsAvailable = FModel.getQuest().getAssets().getCredits(); if (draftEvent.canEnter()) { - SOptionPane.showMessageDialog("You need " + (draftEvent.getEntryFee() - creditsAvailable) + " more credits to enter this tournament.", "Not Enough Credits", SOptionPane.WARNING_ICON); + SOptionPane.showMessageDialog("You need " + QuestUtil.formatCredits(draftEvent.getEntryFee() - creditsAvailable) + " more credits to enter this tournament.", "Not Enough Credits", SOptionPane.WARNING_ICON); return; } - final boolean okayToEnter = SOptionPane.showOptionDialog("This tournament costs " + draftEvent.getEntryFee() + " credits to enter.\nAre you sure you wish to enter?", "Enter Draft Tournament?", FSkinProp.ICO_QUEST_GOLD, ImmutableList.of("Yes", "No"), 1) == 0; + final boolean okayToEnter = SOptionPane.showOptionDialog("This tournament costs " + QuestUtil.formatCredits(draftEvent.getEntryFee()) + " credits to enter.\nAre you sure you wish to enter?", "Enter Draft Tournament?", FSkinProp.ICO_QUEST_GOLD, ImmutableList.of("Yes", "No"), 1) == 0; if (!okayToEnter) { return; diff --git a/forge-gui/src/main/java/forge/quest/QuestUtil.java b/forge-gui/src/main/java/forge/quest/QuestUtil.java index 050d7aa1b4a..18569a60573 100644 --- a/forge-gui/src/main/java/forge/quest/QuestUtil.java +++ b/forge-gui/src/main/java/forge/quest/QuestUtil.java @@ -49,6 +49,7 @@ import forge.util.gui.SOptionPane; import org.apache.commons.lang3.tuple.ImmutablePair; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; @@ -62,6 +63,10 @@ import java.util.List; * @version $Id$ */ public class QuestUtil { + private static final DecimalFormat CREDITS_FORMATTER = new DecimalFormat("#,###"); + public static String formatCredits(long credits) { + return CREDITS_FORMATTER.format(credits); + } /** *

@@ -368,7 +373,7 @@ public class QuestUtil { view0.getLblLife().setVisible(true); // Stats panel - view0.getLblCredits().setText("Credits: " + qS.getCredits()); + view0.getLblCredits().setText("Credits: " + QuestUtil.formatCredits(qS.getCredits())); view0.getLblLife().setText("Life: " + qS.getLife(qCtrl.getMode())); view0.getLblWins().setText("Wins: " + qA.getWin()); view0.getLblLosses().setText("Losses: " + qA.getLost());