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.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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user