Support selecting deck for gauntlet without one specified

This commit is contained in:
drdev
2014-08-07 22:44:48 +00:00
parent 8d2c402f47
commit 04c2e30dbd
3 changed files with 49 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
package forge.deckchooser;
import forge.FThreads;
import forge.UiCommand;
import forge.deck.ColorDeckGenerator;
import forge.deck.Deck;
@@ -20,12 +21,14 @@ import forge.quest.QuestEvent;
import forge.quest.QuestEventChallenge;
import forge.quest.QuestUtil;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import net.miginfocom.swing.MigLayout;
import org.apache.commons.lang3.StringUtils;
import javax.swing.*;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -45,6 +48,31 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
private final ForgePreferences prefs = FModel.getPreferences();
private FPref stateSetting = null;
//Show dialog to select a deck
public static Deck promptForDeck(String title, DeckType defaultDeckType, boolean forAi) {
FThreads.assertExecutedByEdt(true);
final FDeckChooser chooser = new FDeckChooser(forAi);
chooser.initialize(defaultDeckType);
chooser.populate();
Dimension parentSize = JOptionPane.getRootFrame().getSize();
chooser.setMinimumSize(new Dimension((int)(parentSize.getWidth() / 2), (int)parentSize.getHeight() - 200));
final FOptionPane optionPane = new FOptionPane(null, title, null, chooser, new String[] { "OK", "Cancel" }, 0);
optionPane.setDefaultFocus(chooser);
chooser.lstDecks.setItemActivateCommand(new UiCommand() {
@Override
public void run() {
optionPane.setResult(0); //accept selected deck on double click or Enter
}
});
optionPane.setVisible(true);
int dialogResult = optionPane.getResult();
optionPane.dispose();
if (dialogResult == 0) {
return chooser.getDeck();
}
return null;
}
public FDeckChooser(boolean forAi) {
setOpaque(false);
isAi = forAi;

View File

@@ -3,6 +3,8 @@ package forge.screens.home.gauntlet;
import forge.GuiBase;
import forge.UiCommand;
import forge.deck.Deck;
import forge.deck.DeckType;
import forge.deckchooser.FDeckChooser;
import forge.game.GameType;
import forge.game.player.RegisteredPlayer;
import forge.gauntlet.GauntletData;
@@ -11,6 +13,7 @@ import forge.gui.SOverlayUtils;
import forge.gui.framework.ICDoc;
import forge.interfaces.IGuiBase;
import forge.model.FModel;
import javax.swing.*;
import java.awt.event.ActionEvent;
@@ -91,6 +94,18 @@ public enum CSubmenuGauntletLoad implements ICDoc {
FModel.setGauntletData(
GauntletIO.loadGauntlet(view.getGauntletLister().getSelectedGauntletFile()));
final GauntletData gd = FModel.getGauntletData();
final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
Deck userDeck = gd.getUserDeck();
if (userDeck == null) {
//give user a chance to select a deck if none saved with gauntlet
userDeck = FDeckChooser.promptForDeck("Select a deck to play for this gauntlet", DeckType.CUSTOM_DECK, false);
if (userDeck == null) { return; } //prevent crash if user doesn't select a deck
gd.setUserDeck(userDeck);
GauntletIO.saveGauntlet(gd);
updateData(); //show deck in row
}
// Start game
SwingUtilities.invokeLater(new Runnable() {
@Override
@@ -100,14 +115,11 @@ public enum CSubmenuGauntletLoad implements ICDoc {
}
});
final GauntletData gd = FModel.getGauntletData();
final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
IGuiBase fc = GuiBase.getInterface();
starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(fc.getGuiPlayer()));
starter.add(new RegisteredPlayer(userDeck).setPlayer(fc.getGuiPlayer()));
starter.add(new RegisteredPlayer(aiDeck).setPlayer(fc.createAiPlayer()));
fc.startMatch(GameType.Gauntlet, starter);
}