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.getBtnBuildDeck().setCommand(new Command() { @Override
public void run() { setupDraft(); } });
view.getBtnBuildDeck().setCommand(new Command() {
@Override
public void run() {
setupDraft();
}
});
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)
@@ -143,12 +151,11 @@ public enum CSubmenuDraft implements ICDoc {
/** */
private void setupDraft() {
// Determine what kind of booster draft to run
final String prompt = "Choose Draft Format:";
final LimitedPoolType o = GuiChoose.oneOrNone(prompt, LimitedPoolType.values());
if (o == null) return;
final LimitedPoolType poolType = GuiChoose.oneOrNone("Choose Draft Format", LimitedPoolType.values());
if (poolType == null) { return; }
final CEditorDraftingProcess draft = new CEditorDraftingProcess();
draft.showGui(new BoosterDraft(o));
draft.showGui(new BoosterDraft(poolType));
Singletons.getControl().setCurrentScreen(FScreen.DRAFTING_PROCESS);
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(draft);

View File

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

View File

@@ -6,7 +6,6 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.SwingConstants;
@@ -52,7 +51,7 @@ public enum VSubmenuSealed implements IVSubmenu<CSubmenuSealed> {
private final StartButton btnStart = new StartButton();
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)
.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 JLabel btnDirections = new FLabel.Builder()
private final FLabel btnDirections = new FLabel.Builder()
.fontSize(16).opaque(true).hoverable(true)
.text("How To Play").fontAlign(SwingConstants.CENTER).build();
@@ -129,13 +128,13 @@ public enum VSubmenuSealed implements IVSubmenu<CSubmenuSealed> {
return EDocID.HOME_SEALED;
}
/** @return {@link javax.swing.JLabel} */
public JLabel getBtnDirections() {
/** @return {@link forge.gui.toolbox.FLabel} */
public FLabel getBtnDirections() {
return this.btnDirections;
}
/** @return {@link javax.swing.JLabel} */
public JLabel getBtnBuildDeck() {
/** @return {@link forge.gui.toolbox.FLabel} */
public FLabel getBtnBuildDeck() {
return this.btnBuildDeck;
}

View File

@@ -51,8 +51,6 @@ import forge.util.TextUtil;
public class SealedCardPoolGenerator {
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. */
private String landSetCode = null;
@@ -68,21 +66,22 @@ public class SealedCardPoolGenerator {
switch(poolType) {
case Full:
// Choose number of boosters
chooseNumberOfBoosters(new UnOpenedProduct(SealedProduct.Template.genericBooster));
if (!chooseNumberOfBoosters(new UnOpenedProduct(SealedProduct.Template.genericBooster))) {
return;
}
landSetCode = CardEdition.Predicates.getRandomSetWithAllBasicLands(Singletons.getMagicDb().getEditions()).getCode();
break;
case Block:
case Block:
case FantasyBlock:
List<CardBlock> blocks = new ArrayList<CardBlock>();
Iterable<CardBlock> src = poolType == LimitedPoolType.Block ? Singletons.getModel().getBlocks() : Singletons.getModel().getFantasyBlocks();
for (CardBlock b : src) {
blocks.add(b);
}
final CardBlock block = GuiChoose.oneOrNone("Choose Block", blocks);
if( null == block) return;
if (block == null) { return; }
final int nPacks = block.getCntBoostersSealed();
final Stack<String> sets = new Stack<String>();
@@ -91,7 +90,7 @@ public class SealedCardPoolGenerator {
sets.add(edition.getCode());
}
for(String ms : block.getMetaSetNames()) {
for (String ms : block.getMetaSetNames()) {
sets.push(ms);
}
@@ -102,43 +101,44 @@ public class SealedCardPoolGenerator {
}
final String p = setCombos.size() > 1 ? GuiChoose.oneOrNone("Choose packs to play with", setCombos) : setCombos.get(0);
if( p == null )
return;
if (p == null) { return; }
for (String pz : TextUtil.split(p, ',')) {
String[] pps = TextUtil.splitWithParenthesis(pz.trim(), ' ');
String setCode = pps[pps.length - 1];
int nBoosters = pps.length > 1 ? Integer.parseInt(pps[0]) : 1;
while(nBoosters-- > 0)
int nBoosters = pps.length > 1 ? Integer.parseInt(pps[0]) : 1;
while (nBoosters-- > 0) {
this.product.add(block.getBooster(setCode));
}
}
} else {
}
else {
IUnOpenedProduct prod = block.getBooster(sets.get(0));
for (int i = 0; i < nPacks; i++) {
this.product.add(prod);
}
}
landSetCode = block.getLandSet().getCode();
break;
case Custom:
String[] dList;
final ArrayList<CustomLimited> customs = new ArrayList<CustomLimited>();
// get list of custom draft files
final File dFolder = new File("res/sealed/");
if (!dFolder.exists()) {
throw new RuntimeException("GenerateSealed : folder not found -- folder is "
+ dFolder.getAbsolutePath());
}
if (!dFolder.isDirectory()) {
throw new RuntimeException("GenerateSealed : not a folder -- " + dFolder.getAbsolutePath());
}
dList = dFolder.list();
for (final String element : dList) {
if (element.endsWith(".sealed")) {
final List<String> dfData = FileUtil.readFile("res/sealed/" + element);
@@ -148,34 +148,36 @@ public class SealedCardPoolGenerator {
}
}
}
// present list to user
if (customs.isEmpty()) {
FOptionPane.showMessageDialog("No custom sealed files found.");
return;
}
else {
final CustomLimited draft = GuiChoose.one("Choose Custom Sealed Pool", customs);
UnOpenedProduct toAdd = new UnOpenedProduct(draft.getSealedProductTemplate(), draft.getCardPool());
toAdd.setLimitedPool(draft.isSingleton());
chooseNumberOfBoosters(toAdd);
landSetCode = draft.getLandSetCode();
final CustomLimited draft = GuiChoose.one("Choose Custom Sealed Pool", customs);
UnOpenedProduct toAdd = new UnOpenedProduct(draft.getSealedProductTemplate(), draft.getCardPool());
toAdd.setLimitedPool(draft.isSingleton());
if (!chooseNumberOfBoosters(toAdd)) {
return;
}
landSetCode = draft.getLandSetCode();
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) {
Integer cntBoosters = GuiChoose.one("How many booster packs?", ints3to12);
for (int i = 0; i < cntBoosters; i++) {
for (int i = 0; i < boosterCount; i++) {
this.product.add(product1);
}
return true;
}
/**
* <p>
* getSetCombos.
@@ -199,7 +201,7 @@ public class SealedCardPoolGenerator {
setCombos.add(String.format("%s, %s, %s", sets[0], sets[2], sets[0]));
setCombos.add(String.format("%s, %s, %s", sets[2], sets[2], sets[2]));
setCombos.add(String.format("%s, %s, %s", sets[2], sets[1], sets[0]));
}
}
}
else if (nPacks == 4) {
if (sets.length >= 2) {
@@ -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[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]));
}
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]));
@@ -307,9 +308,10 @@ public class SealedCardPoolGenerator {
setCombos.add(String.format("2 %s, 2 %s, 2 %s", sets[0], sets[1], sets[2]));
}
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
} 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, 2 %s, 2 %s", sets[3], sets[2], sets[1], sets[0]));
}
@@ -320,12 +322,10 @@ public class SealedCardPoolGenerator {
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]));
}
}
return setCombos;
}
/**
* <p>
* getCardpool.
@@ -339,15 +339,16 @@ public class SealedCardPoolGenerator {
final CardPool pool = new CardPool();
for (IUnOpenedProduct prod : product) {
if( prod instanceof UnOpenedMeta )
if (prod instanceof UnOpenedMeta) {
pool.addAllFlat(((UnOpenedMeta) prod).open(isHuman));
else
}
else {
pool.addAllFlat(prod.get());
}
}
return pool;
}
/**
* Gets the land set code.
*
@@ -356,9 +357,8 @@ public class SealedCardPoolGenerator {
public String getLandSetCode() {
return this.landSetCode;
}
public boolean isEmpty() {
public boolean isEmpty() {
return product.isEmpty();
}
}