mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
Improve Sealed Deck button usability and support canceling prompt for number of booster packs
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
view.getBtnBuildDeck().setCommand(new Command() {
|
||||
@Override
|
||||
public void run() {
|
||||
setupSealed();
|
||||
}
|
||||
});
|
||||
|
||||
view.getBtnStart().addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent e) {
|
||||
startGame(GameType.Sealed);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
VSubmenuSealed.SINGLETON_INSTANCE.getBtnDirections().addMouseListener(new MouseAdapter() {
|
||||
view.getBtnDirections().setCommand(new Command() {
|
||||
@Override
|
||||
public void mouseClicked(final MouseEvent e) {
|
||||
VSubmenuSealed.SINGLETON_INSTANCE.showDirections();
|
||||
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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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,8 +66,9 @@ 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;
|
||||
|
||||
@@ -82,7 +81,7 @@ public class SealedCardPoolGenerator {
|
||||
}
|
||||
|
||||
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>();
|
||||
@@ -102,17 +101,18 @@ 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)
|
||||
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);
|
||||
@@ -152,30 +152,32 @@ 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();
|
||||
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.
|
||||
@@ -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]));
|
||||
@@ -309,7 +310,8 @@ public class SealedCardPoolGenerator {
|
||||
if (sets.length >= 4) {
|
||||
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.
|
||||
*
|
||||
@@ -360,5 +361,4 @@ public class SealedCardPoolGenerator {
|
||||
public boolean isEmpty() {
|
||||
return product.isEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user