Improve Sealed Deck button usability and support canceling prompt for number of booster packs

This commit is contained in:
drdev
2014-01-07 04:08:31 +00:00
parent 0a9617b0c4
commit 5fe57fcb11
4 changed files with 91 additions and 86 deletions

View File

@@ -54,11 +54,19 @@ public enum CSubmenuDraft implements ICDoc {
view.getLstDecks().setSelectCommand(cmdDeckSelect); view.getLstDecks().setSelectCommand(cmdDeckSelect);
view.getBtnBuildDeck().setCommand(new Command() { @Override view.getBtnBuildDeck().setCommand(new Command() {
public void run() { setupDraft(); } }); @Override
public void run() {
setupDraft();
}
});
view.getBtnStart().addActionListener(new ActionListener() { view.getBtnStart().addActionListener(new ActionListener() {
@Override public void actionPerformed(final ActionEvent e) { startGame(GameType.Draft); } }); @Override
public void actionPerformed(final ActionEvent e) {
startGame(GameType.Draft);
}
});
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -143,12 +151,11 @@ public enum CSubmenuDraft implements ICDoc {
/** */ /** */
private void setupDraft() { private void setupDraft() {
// Determine what kind of booster draft to run // Determine what kind of booster draft to run
final String prompt = "Choose Draft Format:"; final LimitedPoolType poolType = GuiChoose.oneOrNone("Choose Draft Format", LimitedPoolType.values());
final LimitedPoolType o = GuiChoose.oneOrNone(prompt, LimitedPoolType.values()); if (poolType == null) { return; }
if (o == null) return;
final CEditorDraftingProcess draft = new CEditorDraftingProcess(); final CEditorDraftingProcess draft = new CEditorDraftingProcess();
draft.showGui(new BoosterDraft(o)); draft.showGui(new BoosterDraft(poolType));
Singletons.getControl().setCurrentScreen(FScreen.DRAFTING_PROCESS); Singletons.getControl().setCurrentScreen(FScreen.DRAFTING_PROCESS);
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(draft); CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(draft);

View File

@@ -1,7 +1,7 @@
package forge.gui.home.sanctioned; package forge.gui.home.sanctioned;
import java.awt.event.MouseAdapter; import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent; import java.awt.event.ActionListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -63,29 +63,28 @@ public enum CSubmenuSealed implements ICDoc {
*/ */
@Override @Override
public void initialize() { public void initialize() {
VSubmenuSealed.SINGLETON_INSTANCE.getLstDecks().setSelectCommand(cmdDeckSelect); final VSubmenuSealed view = VSubmenuSealed.SINGLETON_INSTANCE;
VSubmenuSealed.SINGLETON_INSTANCE.getBtnBuildDeck().addMouseListener( view.getLstDecks().setSelectCommand(cmdDeckSelect);
new MouseAdapter() { @Override
public void mousePressed(final MouseEvent e) { setupSealed(); } });
VSubmenuSealed.SINGLETON_INSTANCE.getBtnStart().addMouseListener( view.getBtnBuildDeck().setCommand(new Command() {
new MouseAdapter() {
@Override
public void mouseReleased(final MouseEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override @Override
public void run() { public void run() {
setupSealed();
}
});
view.getBtnStart().addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
startGame(GameType.Sealed); startGame(GameType.Sealed);
} }
}); });
}
});
VSubmenuSealed.SINGLETON_INSTANCE.getBtnDirections().addMouseListener(new MouseAdapter() { view.getBtnDirections().setCommand(new Command() {
@Override @Override
public void mouseClicked(final MouseEvent e) { public void run() {
VSubmenuSealed.SINGLETON_INSTANCE.showDirections(); view.showDirections();
} }
}); });
} }
@@ -142,12 +141,12 @@ public enum CSubmenuSealed implements ICDoc {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private <T extends DeckBase> void setupSealed() { private <T extends DeckBase> void setupSealed() {
final String prompt = "Choose Sealed Deck Format:"; final String prompt = "Choose Sealed Deck Format";
final LimitedPoolType o = GuiChoose.oneOrNone(prompt, LimitedPoolType.values()); final LimitedPoolType poolType = GuiChoose.oneOrNone(prompt, LimitedPoolType.values());
if (o == null) return; if (poolType == null) { return; }
SealedCardPoolGenerator sd = new SealedCardPoolGenerator(o); SealedCardPoolGenerator sd = new SealedCardPoolGenerator(poolType);
if (sd.isEmpty()) return; if (sd.isEmpty()) { return; }
final ItemPool<PaperCard> humanPool = sd.getCardpool(true); final ItemPool<PaperCard> humanPool = sd.getCardpool(true);

View File

@@ -6,7 +6,6 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JTextPane; import javax.swing.JTextPane;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
@@ -52,7 +51,7 @@ public enum VSubmenuSealed implements IVSubmenu<CSubmenuSealed> {
private final StartButton btnStart = new StartButton(); private final StartButton btnStart = new StartButton();
private final DeckLister lstDecks = new DeckLister(GameType.Sealed); private final DeckLister lstDecks = new DeckLister(GameType.Sealed);
private final JLabel lblInfo = new FLabel.Builder() private final FLabel lblInfo = new FLabel.Builder()
.fontAlign(SwingConstants.LEFT).fontSize(16).fontStyle(Font.BOLD) .fontAlign(SwingConstants.LEFT).fontSize(16).fontStyle(Font.BOLD)
.text("Select a game, or build a new one").build(); .text("Select a game, or build a new one").build();
@@ -70,7 +69,7 @@ public enum VSubmenuSealed implements IVSubmenu<CSubmenuSealed> {
private final FLabel btnBuildDeck = new FLabel.ButtonBuilder().text("Build New Sealed Deck").fontSize(16).build(); private final FLabel btnBuildDeck = new FLabel.ButtonBuilder().text("Build New Sealed Deck").fontSize(16).build();
private final JLabel btnDirections = new FLabel.Builder() private final FLabel btnDirections = new FLabel.Builder()
.fontSize(16).opaque(true).hoverable(true) .fontSize(16).opaque(true).hoverable(true)
.text("How To Play").fontAlign(SwingConstants.CENTER).build(); .text("How To Play").fontAlign(SwingConstants.CENTER).build();
@@ -129,13 +128,13 @@ public enum VSubmenuSealed implements IVSubmenu<CSubmenuSealed> {
return EDocID.HOME_SEALED; return EDocID.HOME_SEALED;
} }
/** @return {@link javax.swing.JLabel} */ /** @return {@link forge.gui.toolbox.FLabel} */
public JLabel getBtnDirections() { public FLabel getBtnDirections() {
return this.btnDirections; return this.btnDirections;
} }
/** @return {@link javax.swing.JLabel} */ /** @return {@link forge.gui.toolbox.FLabel} */
public JLabel getBtnBuildDeck() { public FLabel getBtnBuildDeck() {
return this.btnBuildDeck; return this.btnBuildDeck;
} }

View File

@@ -51,8 +51,6 @@ import forge.util.TextUtil;
public class SealedCardPoolGenerator { public class SealedCardPoolGenerator {
private final ArrayList<IUnOpenedProduct> product = new ArrayList<IUnOpenedProduct>(); private final ArrayList<IUnOpenedProduct> product = new ArrayList<IUnOpenedProduct>();
private static final Integer[] ints3to12 = {3,4,5,6,7,8,9,10,11,12};
/** The Land set code. */ /** The Land set code. */
private String landSetCode = null; private String landSetCode = null;
@@ -68,8 +66,9 @@ public class SealedCardPoolGenerator {
switch(poolType) { switch(poolType) {
case Full: case Full:
// Choose number of boosters // Choose number of boosters
if (!chooseNumberOfBoosters(new UnOpenedProduct(SealedProduct.Template.genericBooster))) {
chooseNumberOfBoosters(new UnOpenedProduct(SealedProduct.Template.genericBooster)); return;
}
landSetCode = CardEdition.Predicates.getRandomSetWithAllBasicLands(Singletons.getMagicDb().getEditions()).getCode(); landSetCode = CardEdition.Predicates.getRandomSetWithAllBasicLands(Singletons.getMagicDb().getEditions()).getCode();
break; break;
@@ -82,7 +81,7 @@ public class SealedCardPoolGenerator {
} }
final CardBlock block = GuiChoose.oneOrNone("Choose Block", blocks); final CardBlock block = GuiChoose.oneOrNone("Choose Block", blocks);
if( null == block) return; if (block == null) { return; }
final int nPacks = block.getCntBoostersSealed(); final int nPacks = block.getCntBoostersSealed();
final Stack<String> sets = new Stack<String>(); final Stack<String> sets = new Stack<String>();
@@ -102,17 +101,18 @@ public class SealedCardPoolGenerator {
} }
final String p = setCombos.size() > 1 ? GuiChoose.oneOrNone("Choose packs to play with", setCombos) : setCombos.get(0); final String p = setCombos.size() > 1 ? GuiChoose.oneOrNone("Choose packs to play with", setCombos) : setCombos.get(0);
if( p == null ) if (p == null) { return; }
return;
for (String pz : TextUtil.split(p, ',')) { for (String pz : TextUtil.split(p, ',')) {
String[] pps = TextUtil.splitWithParenthesis(pz.trim(), ' '); String[] pps = TextUtil.splitWithParenthesis(pz.trim(), ' ');
String setCode = pps[pps.length - 1]; String setCode = pps[pps.length - 1];
int nBoosters = pps.length > 1 ? Integer.parseInt(pps[0]) : 1; int nBoosters = pps.length > 1 ? Integer.parseInt(pps[0]) : 1;
while(nBoosters-- > 0) while (nBoosters-- > 0) {
this.product.add(block.getBooster(setCode)); this.product.add(block.getBooster(setCode));
} }
} else { }
}
else {
IUnOpenedProduct prod = block.getBooster(sets.get(0)); IUnOpenedProduct prod = block.getBooster(sets.get(0));
for (int i = 0; i < nPacks; i++) { for (int i = 0; i < nPacks; i++) {
this.product.add(prod); this.product.add(prod);
@@ -152,30 +152,32 @@ public class SealedCardPoolGenerator {
// present list to user // present list to user
if (customs.isEmpty()) { if (customs.isEmpty()) {
FOptionPane.showMessageDialog("No custom sealed files found."); FOptionPane.showMessageDialog("No custom sealed files found.");
return;
} }
else {
final CustomLimited draft = GuiChoose.one("Choose Custom Sealed Pool", customs); final CustomLimited draft = GuiChoose.one("Choose Custom Sealed Pool", customs);
UnOpenedProduct toAdd = new UnOpenedProduct(draft.getSealedProductTemplate(), draft.getCardPool()); UnOpenedProduct toAdd = new UnOpenedProduct(draft.getSealedProductTemplate(), draft.getCardPool());
toAdd.setLimitedPool(draft.isSingleton()); toAdd.setLimitedPool(draft.isSingleton());
chooseNumberOfBoosters(toAdd); if (!chooseNumberOfBoosters(toAdd)) {
landSetCode = draft.getLandSetCode(); return;
} }
landSetCode = draft.getLandSetCode();
break; break;
} }
} }
private boolean chooseNumberOfBoosters(final IUnOpenedProduct product1) {
Integer boosterCount = GuiChoose.getInteger("How many booster packs?", 3, 12);
if (boosterCount == null) { return false; }
private void chooseNumberOfBoosters(final IUnOpenedProduct product1) { for (int i = 0; i < boosterCount; i++) {
Integer cntBoosters = GuiChoose.one("How many booster packs?", ints3to12);
for (int i = 0; i < cntBoosters; i++) {
this.product.add(product1); this.product.add(product1);
} }
return true;
} }
/** /**
* <p> * <p>
* getSetCombos. * getSetCombos.
@@ -270,7 +272,6 @@ public class SealedCardPoolGenerator {
setCombos.add(String.format("%s, %s, %s, %s, %s, %s, %s, %s", sets[2], sets[2], sets[2], sets[2], sets[0], sets[0], sets[0], sets[0])); setCombos.add(String.format("%s, %s, %s, %s, %s, %s, %s, %s", sets[2], sets[2], sets[2], sets[2], sets[0], sets[0], sets[0], sets[0]));
setCombos.add(String.format("%s, %s, %s, %s, %s, %s, %s, %s", sets[1], sets[1], sets[1], sets[1], sets[0], sets[0], sets[0], sets[0])); setCombos.add(String.format("%s, %s, %s, %s, %s, %s, %s, %s", sets[1], sets[1], sets[1], sets[1], sets[0], sets[0], sets[0], sets[0]));
setCombos.add(String.format("%s, %s, %s, %s, %s, %s, %s, %s", sets[0], sets[0], sets[0], sets[0], sets[0], sets[0], sets[0], sets[0])); setCombos.add(String.format("%s, %s, %s, %s, %s, %s, %s, %s", sets[0], sets[0], sets[0], sets[0], sets[0], sets[0], sets[0], sets[0]));
} }
else if (nPacks == 9 && sets.length >= 9) { else if (nPacks == 9 && sets.length >= 9) {
setCombos.add(String.format("%s, %s, %s, %s, %s, %s, %s, %s, %s", sets[8], sets[7], sets[6], sets[5], sets[4], sets[3], sets[2], sets[1], sets[0])); setCombos.add(String.format("%s, %s, %s, %s, %s, %s, %s, %s, %s", sets[8], sets[7], sets[6], sets[5], sets[4], sets[3], sets[2], sets[1], sets[0]));
@@ -309,7 +310,8 @@ public class SealedCardPoolGenerator {
if (sets.length >= 4) { if (sets.length >= 4) {
if ( sets[1].equals(sets[2]) && sets[1].equals(sets[0])) { if ( sets[1].equals(sets[2]) && sets[1].equals(sets[0])) {
setCombos.add(String.format("%s, 5 %s", sets[3], sets[0])); // for guild sealed setCombos.add(String.format("%s, 5 %s", sets[3], sets[0])); // for guild sealed
} else { }
else {
setCombos.add(String.format("%s, %s, %s, 3 %s", sets[3], sets[2], sets[1], sets[0])); setCombos.add(String.format("%s, %s, %s, 3 %s", sets[3], sets[2], sets[1], sets[0]));
setCombos.add(String.format("%s, %s, 2 %s, 2 %s", sets[3], sets[2], sets[1], sets[0])); setCombos.add(String.format("%s, %s, 2 %s, 2 %s", sets[3], sets[2], sets[1], sets[0]));
} }
@@ -320,12 +322,10 @@ public class SealedCardPoolGenerator {
if (sets.length >= 6) { if (sets.length >= 6) {
setCombos.add(String.format("%s, %s, %s, %s, %s, %s", sets[5], sets[4], sets[3], sets[2], sets[1], sets[0])); setCombos.add(String.format("%s, %s, %s, %s, %s, %s", sets[5], sets[4], sets[3], sets[2], sets[1], sets[0]));
} }
} }
return setCombos; return setCombos;
} }
/** /**
* <p> * <p>
* getCardpool. * getCardpool.
@@ -339,15 +339,16 @@ public class SealedCardPoolGenerator {
final CardPool pool = new CardPool(); final CardPool pool = new CardPool();
for (IUnOpenedProduct prod : product) { for (IUnOpenedProduct prod : product) {
if( prod instanceof UnOpenedMeta ) if (prod instanceof UnOpenedMeta) {
pool.addAllFlat(((UnOpenedMeta) prod).open(isHuman)); pool.addAllFlat(((UnOpenedMeta) prod).open(isHuman));
else }
else {
pool.addAllFlat(prod.get()); pool.addAllFlat(prod.get());
} }
}
return pool; return pool;
} }
/** /**
* Gets the land set code. * Gets the land set code.
* *
@@ -360,5 +361,4 @@ public class SealedCardPoolGenerator {
public boolean isEmpty() { public boolean isEmpty() {
return product.isEmpty(); return product.isEmpty();
} }
} }