From f216c8821b07b71e44c6df88a1bb98f8d6e05421 Mon Sep 17 00:00:00 2001 From: Sol Date: Sat, 10 Oct 2015 02:40:49 +0000 Subject: [PATCH] - Allow Draft to play a specific drafted opponent instead of just a random one. --- .../home/sanctioned/CSubmenuDraft.java | 54 ++++++++++++++++--- .../home/sanctioned/VSubmenuDraft.java | 21 ++++---- 2 files changed, 57 insertions(+), 18 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java index 1bf05b681f1..687236440eb 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java @@ -5,8 +5,7 @@ import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; -import javax.swing.JButton; -import javax.swing.SwingUtilities; +import javax.swing.*; import forge.GuiBase; import forge.Singletons; @@ -44,6 +43,14 @@ public enum CSubmenuDraft implements ICDoc { @Override public void run() { VSubmenuDraft.SINGLETON_INSTANCE.getBtnStart().setEnabled(true); + fillOpponentComboBox(); + } + }; + + private final ActionListener radioAction = new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + fillOpponentComboBox(); } }; @@ -73,6 +80,10 @@ public enum CSubmenuDraft implements ICDoc { startGame(GameType.Draft); } }); + + view.getRadSingle().addActionListener(radioAction); + + view.getRadAll().addActionListener(radioAction); } /* (non-Javadoc) @@ -88,6 +99,7 @@ public enum CSubmenuDraft implements ICDoc { if (!view.getLstDecks().getPool().isEmpty()) { btnStart.setEnabled(true); + fillOpponentComboBox(); } SwingUtilities.invokeLater(new Runnable() { @@ -104,7 +116,6 @@ public enum CSubmenuDraft implements ICDoc { private void startGame(final GameType gameType) { final boolean gauntlet = !VSubmenuDraft.SINGLETON_INSTANCE.isSingleSelected(); final DeckProxy humanDeck = VSubmenuDraft.SINGLETON_INSTANCE.getLstDecks().getSelectedItem(); - final int aiIndex = (int) Math.floor(Math.random() * 7); if (humanDeck == null) { FOptionPane.showErrorDialog("No deck selected for human.\n(You may need to build a new deck)", "No Deck"); @@ -120,10 +131,15 @@ public enum CSubmenuDraft implements ICDoc { } FModel.getGauntletMini().resetGauntletDraft(); - + String duelType = (String)VSubmenuDraft.SINGLETON_INSTANCE.getCbOpponent().getSelectedItem(); + final DeckGroup opponentDecks = FModel.getDecks().getDraft().get(humanDeck.getName()); if (gauntlet) { - final int rounds = FModel.getDecks().getDraft().get(humanDeck.getName()).getAiDecks().size(); - FModel.getGauntletMini().launch(rounds, humanDeck.getDeck(), gameType); + if ("Gauntlet".equals(duelType)) { + final int rounds = opponentDecks.getAiDecks().size(); + FModel.getGauntletMini().launch(rounds, humanDeck.getDeck(), gameType); + } else if ("Tournament".equals(duelType)) { + // TODO Allow for tournament style draft, instead of always a gauntlet + } return; } @@ -135,7 +151,8 @@ public enum CSubmenuDraft implements ICDoc { } }); - final DeckGroup opponentDecks = FModel.getDecks().getDraft().get(humanDeck.getName()); + // Restore Zero Indexing + final int aiIndex = Integer.parseInt(duelType)-1; final Deck aiDeck = opponentDecks.getAiDecks().get(aiIndex); if (aiDeck == null) { throw new IllegalStateException("Draft: Computer deck is null!"); @@ -176,4 +193,27 @@ public enum CSubmenuDraft implements ICDoc { CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(draftController); } + private void fillOpponentComboBox() { + final VSubmenuDraft view = VSubmenuDraft.SINGLETON_INSTANCE; + JComboBox combo = view.getCbOpponent(); + combo.removeAllItems(); + + final DeckProxy humanDeck = view.getLstDecks().getSelectedItem(); + + if (VSubmenuDraft.SINGLETON_INSTANCE.isSingleSelected()) { + // Single opponent + final DeckGroup opponentDecks = FModel.getDecks().getDraft().get(humanDeck.getName()); + int indx = 0; + for (Deck d : opponentDecks.getAiDecks()) { + indx++; + // 1-7 instead of 0-6 + combo.addItem(String.valueOf(indx)); + } + } else { + // Gauntlet/Tournament + combo.addItem("Gauntlet"); + //combo.addItem("Tournament"); + } + } + } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuDraft.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuDraft.java index cbc071511aa..aaab54d356a 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuDraft.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuDraft.java @@ -2,12 +2,9 @@ package forge.screens.home.sanctioned; import java.awt.Font; -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.SwingConstants; +import javax.swing.*; +import forge.toolbox.*; import net.miginfocom.swing.MigLayout; import forge.game.GameType; import forge.gui.framework.DragCell; @@ -22,10 +19,6 @@ import forge.screens.home.LblHeader; import forge.screens.home.StartButton; import forge.screens.home.VHomeUI; import forge.screens.home.VHomeUI.PnlDisplay; -import forge.toolbox.FLabel; -import forge.toolbox.FRadioButton; -import forge.toolbox.FSkin; -import forge.toolbox.JXButtonPanel; /** * Assembles Swing components of draft submenu singleton. @@ -48,9 +41,11 @@ public enum VSubmenuDraft implements IVSubmenu { private final DeckManager lstDecks = new DeckManager(GameType.Draft, CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture()); - private final JRadioButton radSingle = new FRadioButton("Play one opponent"); + private final JRadioButton radSingle = new FRadioButton("Play an opponent"); private final JRadioButton radAll = new FRadioButton("Play all 7 opponents"); + private final JComboBox cbOpponent = new JComboBox(); + private final JLabel lblInfo = new FLabel.Builder() .fontAlign(SwingConstants.LEFT).fontSize(16).fontStyle(Font.BOLD) .text("Build or select a deck").build(); @@ -82,6 +77,7 @@ public enum VSubmenuDraft implements IVSubmenu { grpPanel.add(radSingle, "w 200px!, h 30px!"); grpPanel.add(radAll, "w 200px!, h 30px!"); radSingle.setSelected(true); + grpPanel.add(cbOpponent, "w 200px!, h 30px!"); pnlStart.setLayout(new MigLayout("insets 0, gap 0, wrap 2")); pnlStart.setOpaque(false); @@ -113,7 +109,6 @@ public enum VSubmenuDraft implements IVSubmenu { return EDocID.HOME_DRAFT; } - /** @return {@link forge.gui.toolbox.ExperimentalLabel} */ public FLabel getBtnBuildDeck() { return this.btnBuildDeck; } @@ -133,6 +128,10 @@ public enum VSubmenuDraft implements IVSubmenu { return lstDecks; } + public JComboBox getCbOpponent() { return cbOpponent; } + public JRadioButton getRadSingle() { return radSingle; } + public JRadioButton getRadAll() { return radAll; } + //========== Overridden from IVDoc /* (non-Javadoc)