From bee6a0a3b8afe48836e7eb3dfadcdf1a4d0c951d Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Tue, 13 Nov 2012 20:41:14 +0000 Subject: [PATCH] Quest start UI done --- .../gui/home/quest/CSubmenuQuestData.java | 44 +++++++++++- .../gui/home/quest/VSubmenuQuestData.java | 70 +++++++++++++++---- .../java/forge/quest/QuestController.java | 6 +- .../forge/quest/data/GameFormatQuest.java | 25 +++---- src/main/java/forge/quest/data/QuestData.java | 10 ++- 5 files changed, 123 insertions(+), 32 deletions(-) diff --git a/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java b/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java index a5ee14285c5..52f315f2067 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import javax.swing.JOptionPane; import forge.Command; @@ -13,6 +14,7 @@ import forge.deck.Deck; import forge.Singletons; import forge.game.GameFormat; import forge.gui.framework.ICDoc; +import forge.item.CardPrinted; import forge.properties.ForgeProps; import forge.properties.NewConstants; import forge.quest.QuestController; @@ -39,6 +41,7 @@ public enum CSubmenuQuestData implements ICDoc { private final VSubmenuQuestData view = VSubmenuQuestData.SINGLETON_INSTANCE; private final List customFormatCodes = new ArrayList(); + private final List customPrizeFormatCodes = new ArrayList(); private final Command cmdQuestSelect = new Command() { @Override public void execute() { changeQuest(); } }; @@ -57,6 +60,10 @@ public enum CSubmenuQuestData implements ICDoc { view.getBtnCustomFormat().setCommand( new Command() { @Override public void execute() { new DialogCustomFormat(customFormatCodes); }}); + + view.getBtnPrizeCustomFormat().setCommand( new Command() { @Override public void execute() { + new DialogCustomFormat(customPrizeFormatCodes); + }}); } /* (non-Javadoc) @@ -173,7 +180,42 @@ public enum CSubmenuQuestData implements ICDoc { break; } - GameFormat fmtPrizes = fmtStartPool; + GameFormat fmtPrizes = null; + switch(view.getPrizedPoolType()) { + case Complete: + fmtPrizes = null; + break; + case CustomFormat: + if ( customPrizeFormatCodes.isEmpty() ) + { + int answer = JOptionPane.showConfirmDialog(null, "You have defined custom format as containing no sets.\nThis will choose all editions without restriction as prized.\n\nContinue?"); + if ( JOptionPane.YES_OPTION != answer ) + return; + } + fmtPrizes = customPrizeFormatCodes.isEmpty() ? null : new GameFormat("Custom Prizes", customPrizeFormatCodes, null); // chosen sets and no banend cards + break; + case Rotating: + fmtPrizes = view.getPrizedRotatingFormat(); + break; + default: // same as starting + fmtPrizes = fmtStartPool; + if ( null == fmtPrizes && dckStartPool != null) { // build it form deck + List sets = new ArrayList(); + for(Entry c : dckStartPool.getMain()) { + String edition = c.getKey().getEdition(); + if ( !sets.contains(edition) ) + sets.add(edition); + } + for(Entry c : dckStartPool.getSideboard()) { + String edition = c.getKey().getEdition(); + if ( !sets.contains(edition) ) + sets.add(edition); + } + fmtPrizes = new GameFormat("From deck", sets, null); + } + break; + + } final Object o = JOptionPane.showInputDialog(null, "Poets will remember your quest as:", "Quest Name", JOptionPane.OK_CANCEL_OPTION); diff --git a/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java b/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java index e40a3ae8f42..b26d1585b4b 100644 --- a/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java +++ b/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java @@ -7,7 +7,6 @@ import java.util.HashMap; import java.util.Map; import javax.swing.ButtonGroup; -import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; @@ -96,11 +95,18 @@ public enum VSubmenuQuestData implements IVSubmenu { private final JComboBox cbxCustomDeck = new JComboBox(); private final FLabel btnDefineCustomFormat = new FLabel.Builder().opaque(true).hoverable(true).text("Define custom format").build(); - + private final FLabel btnPrizeDefineCustomFormat = new FLabel.Builder().opaque(true).hoverable(true).text("Define custom format").build(); + private final JLabel lblPrizedCards = new FLabel.Builder().text("Prized cards:").build(); private final JComboBox cbxPrizedCards = new JComboBox(); - private final JCheckBox cboAllowUnlocks = new FCheckBox("Allow sets unlock"); + private final JLabel lblPrizeFormat = new FLabel.Builder().text("Sanctioned format:").build(); + private final JComboBox cbxPrizeFormat = new JComboBox(); + + private final JLabel lblPrizeUnrestricted = new FLabel.Builder().text("All cards will be avaliable to win.").build(); + private final JLabel lblPrizeSameAsStarting = new FLabel.Builder().text("Only sets found in starting pool will be avaliable.").build(); + + private final JCheckBox cboAllowUnlocks = new FCheckBox("Allow unlock of not included editions"); private final FLabel btnEmbark = new FLabel.Builder().opaque(true) .fontSize(16).hoverable(true).text("Embark!").build(); @@ -136,6 +142,21 @@ public enum VSubmenuQuestData implements IVSubmenu { } }; + /* Listeners */ + private final ActionListener alPrizesPool = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + StartingPoolType newVal = getPrizedPoolType(); + lblPrizeUnrestricted.setVisible(newVal == StartingPoolType.Complete); + cboAllowUnlocks.setVisible(newVal != StartingPoolType.Complete); + + lblPrizeFormat.setVisible(newVal == StartingPoolType.Rotating); + cbxPrizeFormat.setVisible(newVal == StartingPoolType.Rotating); + btnPrizeDefineCustomFormat.setVisible(newVal == StartingPoolType.CustomFormat); + lblPrizeSameAsStarting.setVisible(newVal == null); + } + }; + /** * Constructor. */ @@ -163,13 +184,20 @@ public enum VSubmenuQuestData implements IVSubmenu { // initial adjustment alStartingPool.actionPerformed(null); + alPrizesPool.actionPerformed(null); - cbxPrizedCards.addItem("Same format as staring pool"); - cbxPrizedCards.addItem("More options to come (WIP)"); + cbxPrizedCards.addItem("Same as starting pool"); + cbxPrizedCards.addItem(StartingPoolType.Complete); + cbxPrizedCards.addItem(StartingPoolType.Rotating); + cbxPrizedCards.addItem(StartingPoolType.CustomFormat); + cbxPrizedCards.addActionListener(alPrizesPool); for (GameFormat gf : Singletons.getModel().getFormats()) { cbxFormat.addItem(gf); + cbxPrizeFormat.addItem(gf); } + + cboAllowUnlocks.setSelected(true); final Map preconDescriptions = new HashMap(); IStorageView preconDecks = QuestController.getPrecons(); @@ -228,7 +256,7 @@ public enum VSubmenuQuestData implements IVSubmenu { final String cboWidth = "pushx, "; final String cboWidthStart = cboWidth + hidemode; - pnlRestrictions.setLayout(new MigLayout("insets 0, gap 0, wrap 2", "[120, al right][240, fill]", "[|]12[|]")); + pnlRestrictions.setLayout(new MigLayout("insets 0, gap 0, wrap 2", "[120, al right][240, fill]", "[|]12[|]6[]")); pnlRestrictions.add(lblStartingPool, constraints + lblWidthStart); pnlRestrictions.add(cbxStartingPool, constraints + cboWidthStart); @@ -250,8 +278,15 @@ public enum VSubmenuQuestData implements IVSubmenu { pnlRestrictions.add(lblPrizedCards, constraints + lblWidth); pnlRestrictions.add(cbxPrizedCards, constraints + cboWidth); - pnlRestrictions.add(cboAllowUnlocks, constraints + "spanx 2, ax center"); - cboAllowUnlocks.setOpaque(false); + + pnlRestrictions.add(lblPrizeFormat, constraints + lblWidthStart); + pnlRestrictions.add(cbxPrizeFormat, constraints + cboWidthStart); // , skip 1 + pnlRestrictions.add(btnPrizeDefineCustomFormat, constraints + hidemode + "spanx 2, w 240px"); + pnlRestrictions.add(lblPrizeSameAsStarting, constraints + hidemode + "spanx 2" ); + pnlRestrictions.add(lblPrizeUnrestricted, constraints + hidemode + "spanx 2" ); + + pnlRestrictions.add(cboAllowUnlocks, constraints + "spanx 2, ax right"); +// cboAllowUnlocks.setOpaque(false); pnlRestrictions.setOpaque(false); pnlOptions.add(pnlRestrictions, "pushx, ay top"); @@ -388,6 +423,12 @@ public enum VSubmenuQuestData implements IVSubmenu { public StartingPoolType getStartingPoolType() { return (StartingPoolType) cbxStartingPool.getSelectedItem(); } + + + public StartingPoolType getPrizedPoolType() { + Object v = cbxPrizedCards.getSelectedItem(); + return v instanceof StartingPoolType ? (StartingPoolType) v : null; + } public boolean isFantasy() { return boxFantasy.isSelected(); @@ -397,12 +438,15 @@ public enum VSubmenuQuestData implements IVSubmenu { return (GameFormat) cbxFormat.getSelectedItem(); } - /** - * TODO: Write javadoc for this method. - * @return - */ + public GameFormat getPrizedRotatingFormat() { + return (GameFormat) cbxPrizeFormat.getSelectedItem(); + } + public FLabel getBtnCustomFormat() { - // TODO Auto-generated method stub return btnDefineCustomFormat; } + public FLabel getBtnPrizeCustomFormat() { + return btnPrizeDefineCustomFormat; + } + } diff --git a/src/main/java/forge/quest/QuestController.java b/src/main/java/forge/quest/QuestController.java index 9e37a281d7d..e16d68e8dcd 100644 --- a/src/main/java/forge/quest/QuestController.java +++ b/src/main/java/forge/quest/QuestController.java @@ -221,7 +221,7 @@ public class QuestController { final GameFormat formatPrizes, final boolean allowSetUnlocks, final Deck startingCards, final GameFormat formatStartingPool) { - this.load(new QuestData(name, difficulty, mode, formatPrizes)); // pass awards and unlocks here + this.load(new QuestData(name, difficulty, mode, formatPrizes, allowSetUnlocks)); // pass awards and unlocks here if ( null != startingCards ) this.myCards.addDeck(startingCards); @@ -349,8 +349,8 @@ public class QuestController { } int toUnlock = this.questFormat.getExcludedSetCodes().size(); - if (toUnlock > (wins + 50) / 50) { - toUnlock = (wins + 50) / 50; + if (toUnlock > 1 + wins / 50) { + toUnlock = 1 + wins / 50; } if (toUnlock > 8) { toUnlock = 8; diff --git a/src/main/java/forge/quest/data/GameFormatQuest.java b/src/main/java/forge/quest/data/GameFormatQuest.java index 00ab56be056..c27746a4e5d 100644 --- a/src/main/java/forge/quest/data/GameFormatQuest.java +++ b/src/main/java/forge/quest/data/GameFormatQuest.java @@ -36,6 +36,8 @@ import forge.game.GameFormat; */ public final class GameFormatQuest extends GameFormat { + private boolean allowUnlocks = true; + /** * Instantiates a new game format based on two lists. * @@ -50,14 +52,20 @@ public final class GameFormatQuest extends GameFormat { super(newName, setsToAllow, cardsToBan); } + public GameFormatQuest(final String newName, final List setsToAllow, final List cardsToBan, boolean allowSetUnlocks) { + super(newName, setsToAllow, cardsToBan); + allowUnlocks = allowSetUnlocks; + } /** * Instantiates a new game format based on an existing format. * * @param toCopy * an existing format + * @param allowSetUnlocks */ - public GameFormatQuest(final GameFormat toCopy) { + public GameFormatQuest(final GameFormat toCopy, boolean allowSetUnlocks) { this(toCopy.getName(), toCopy.getAllowedSetCodes(), toCopy.getBannedCardNames()); + allowUnlocks = allowSetUnlocks; } @@ -82,17 +90,6 @@ public final class GameFormatQuest extends GameFormat { allowedSetCodes.clear(); } - /** - * @param setCode - * the set code to add - */ - public void addAllowedSet(final String setCode) { - if (!allowedSetCodes.contains(setCode)) { - allowedSetCodes.add(setCode); - } - } - - /** * Get the list of excluded sets. * @@ -137,6 +134,10 @@ public final class GameFormatQuest extends GameFormat { return (this.isSetLegal("ICE") || this.isSetLegal("CSP")); } + public boolean canUnlockSets() { + return allowUnlocks; + } + /** * The Class Predicates. */ diff --git a/src/main/java/forge/quest/data/QuestData.java b/src/main/java/forge/quest/data/QuestData.java index 2c873dd5077..af546e68fda 100644 --- a/src/main/java/forge/quest/data/QuestData.java +++ b/src/main/java/forge/quest/data/QuestData.java @@ -46,7 +46,7 @@ public final class QuestData { private GameFormatQuest format; private final String name; - + // Quest mode - there should be an enum :( /** The mode. */ private QuestMode mode; @@ -57,6 +57,8 @@ public final class QuestData { private final QuestAssets assets; private final QuestAchievements achievements; + + /** * Instantiates a new quest data. * @param mode2 @@ -69,15 +71,17 @@ public final class QuestData { * String, persistent format for the quest (null if none). * @param userFormat * user-defined format, if any (null if none). + * @param allowSetUnlocks */ - public QuestData(String name2, int diff, QuestMode mode2, GameFormat userFormat) { + public QuestData(String name2, int diff, QuestMode mode2, GameFormat userFormat, boolean allowSetUnlocks) { this.name = name2; if ( userFormat != null) - this.format = new GameFormatQuest(userFormat); + this.format = new GameFormatQuest(userFormat, allowSetUnlocks); this.mode = mode2; this.achievements = new QuestAchievements(diff); this.assets = new QuestAssets(format); + } /**