mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
- Vanguard matches now launched via constructed match screen
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -15390,10 +15390,8 @@ forge-gui/src/main/java/forge/gui/home/settings/VSubmenuReleaseNotes.java -text
|
|||||||
forge-gui/src/main/java/forge/gui/home/settings/package-info.java svneol=native#text/plain
|
forge-gui/src/main/java/forge/gui/home/settings/package-info.java svneol=native#text/plain
|
||||||
forge-gui/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java -text
|
forge-gui/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java -text
|
||||||
forge-gui/src/main/java/forge/gui/home/variant/CSubmenuCommander.java -text
|
forge-gui/src/main/java/forge/gui/home/variant/CSubmenuCommander.java -text
|
||||||
forge-gui/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java -text
|
|
||||||
forge-gui/src/main/java/forge/gui/home/variant/VSubmenuArchenemy.java -text
|
forge-gui/src/main/java/forge/gui/home/variant/VSubmenuArchenemy.java -text
|
||||||
forge-gui/src/main/java/forge/gui/home/variant/VSubmenuCommander.java -text
|
forge-gui/src/main/java/forge/gui/home/variant/VSubmenuCommander.java -text
|
||||||
forge-gui/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java -text
|
|
||||||
forge-gui/src/main/java/forge/gui/input/Input.java -text
|
forge-gui/src/main/java/forge/gui/input/Input.java -text
|
||||||
forge-gui/src/main/java/forge/gui/input/InputAttack.java svneol=native#text/plain
|
forge-gui/src/main/java/forge/gui/input/InputAttack.java svneol=native#text/plain
|
||||||
forge-gui/src/main/java/forge/gui/input/InputBase.java svneol=native#text/plain
|
forge-gui/src/main/java/forge/gui/input/InputBase.java svneol=native#text/plain
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ import forge.gui.home.settings.VSubmenuReleaseNotes;
|
|||||||
import forge.gui.home.variant.VSubmenuArchenemy;
|
import forge.gui.home.variant.VSubmenuArchenemy;
|
||||||
import forge.gui.home.variant.VSubmenuCommander;
|
import forge.gui.home.variant.VSubmenuCommander;
|
||||||
//import forge.gui.home.variant.VSubmenuPlanechase;
|
//import forge.gui.home.variant.VSubmenuPlanechase;
|
||||||
import forge.gui.home.variant.VSubmenuVanguard;
|
//import forge.gui.home.variant.VSubmenuVanguard;
|
||||||
import forge.gui.toolbox.FLabel;
|
import forge.gui.toolbox.FLabel;
|
||||||
import forge.gui.toolbox.FScrollPanel;
|
import forge.gui.toolbox.FScrollPanel;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
@@ -152,7 +152,7 @@ public enum VHomeUI implements IVTopLevelUI {
|
|||||||
allSubmenus.add(VSubmenuReleaseNotes.SINGLETON_INSTANCE);
|
allSubmenus.add(VSubmenuReleaseNotes.SINGLETON_INSTANCE);
|
||||||
|
|
||||||
allSubmenus.add(VSubmenuArchenemy.SINGLETON_INSTANCE);
|
allSubmenus.add(VSubmenuArchenemy.SINGLETON_INSTANCE);
|
||||||
allSubmenus.add(VSubmenuVanguard.SINGLETON_INSTANCE);
|
//allSubmenus.add(VSubmenuVanguard.SINGLETON_INSTANCE);
|
||||||
//allSubmenus.add(VSubmenuPlanechase.SINGLETON_INSTANCE);
|
//allSubmenus.add(VSubmenuPlanechase.SINGLETON_INSTANCE);
|
||||||
allSubmenus.add(VSubmenuCommander.SINGLETON_INSTANCE);
|
allSubmenus.add(VSubmenuCommander.SINGLETON_INSTANCE);
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,14 @@ import java.awt.event.ActionEvent;
|
|||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import javax.swing.JMenu;
|
import javax.swing.JMenu;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.deck.CardPool;
|
import forge.deck.CardPool;
|
||||||
@@ -17,9 +20,11 @@ import forge.deck.DeckSection;
|
|||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.game.player.LobbyPlayer;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
|
import forge.gui.GuiDialog;
|
||||||
import forge.gui.deckchooser.DeckgenUtil;
|
import forge.gui.deckchooser.DeckgenUtil;
|
||||||
import forge.gui.deckchooser.DecksComboBox.DeckType;
|
import forge.gui.deckchooser.DecksComboBox.DeckType;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.home.variant.VSubmenuVanguard;
|
||||||
import forge.gui.menus.IMenuProvider;
|
import forge.gui.menus.IMenuProvider;
|
||||||
import forge.gui.menus.MenuUtil;
|
import forge.gui.menus.MenuUtil;
|
||||||
import forge.gui.toolbox.FList;
|
import forge.gui.toolbox.FList;
|
||||||
@@ -78,6 +83,10 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
|||||||
}
|
}
|
||||||
} // End Planechase
|
} // End Planechase
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
view.updateVanguardList(i);
|
||||||
|
}
|
||||||
|
|
||||||
// General updates when switching back to this view
|
// General updates when switching back to this view
|
||||||
view.updatePlayersFromPrefs();
|
view.updatePlayersFromPrefs();
|
||||||
view.getBtnStart().requestFocusInWindow();
|
view.getBtnStart().requestFocusInWindow();
|
||||||
@@ -135,9 +144,9 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
|||||||
/** Starts a match with the applied variants. */
|
/** Starts a match with the applied variants. */
|
||||||
private void startGame(final List<GameType> variantTypes) {
|
private void startGame(final List<GameType> variantTypes) {
|
||||||
if (variantTypes.contains(GameType.Archenemy) || variantTypes.contains(GameType.ArchenemyRumble)
|
if (variantTypes.contains(GameType.Archenemy) || variantTypes.contains(GameType.ArchenemyRumble)
|
||||||
|| variantTypes.contains(GameType.Commander)|| variantTypes.contains(GameType.Vanguard)) {
|
|| variantTypes.contains(GameType.Commander)) {
|
||||||
FOptionPane.showMessageDialog("Archenemy, Commander and Vanguard matches cannot currently be started via "
|
FOptionPane.showMessageDialog("Archenemy and Commander matches cannot currently be started via the "
|
||||||
+ "the Constructed match setup screen. Please disable any of those variants then restart the match");
|
+ "Constructed match setup screen. Please disable any of those variants then restart the match");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,11 +186,12 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
|||||||
boolean isPlayerArchenemy = false;
|
boolean isPlayerArchenemy = false;
|
||||||
Iterable<PaperCard> planes = null;
|
Iterable<PaperCard> planes = null;
|
||||||
PaperCard vanguardAvatar = null;
|
PaperCard vanguardAvatar = null;
|
||||||
|
Random randomSeed = new Random();
|
||||||
|
|
||||||
//Planechase
|
//Planechase
|
||||||
if (variantTypes.contains(GameType.Planechase)) {
|
if (variantTypes.contains(GameType.Planechase)) {
|
||||||
Object selected = view.getPlanarDeckLists().get(i).getSelectedValue();
|
Object selected = view.getPlanarDeckLists().get(i).getSelectedValue();
|
||||||
CardPool planePool;
|
CardPool planePool = null;
|
||||||
if (selected instanceof String) {
|
if (selected instanceof String) {
|
||||||
String sel = (String) selected;
|
String sel = (String) selected;
|
||||||
if (sel.contains("Use deck's planes section")) {
|
if (sel.contains("Use deck's planes section")) {
|
||||||
@@ -194,12 +204,17 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
|||||||
IStorage<Deck> pDecks = Singletons.getModel().getDecks().getPlane();
|
IStorage<Deck> pDecks = Singletons.getModel().getDecks().getPlane();
|
||||||
if (sel.equals("Random") && pDecks.size() != 0) {
|
if (sel.equals("Random") && pDecks.size() != 0) {
|
||||||
planePool = Aggregates.random(pDecks).get(DeckSection.Planes);
|
planePool = Aggregates.random(pDecks).get(DeckSection.Planes);
|
||||||
} else { //Generate
|
} else if (planePool == null) {
|
||||||
planePool = DeckgenUtil.generatePlanarDeck();
|
planePool = DeckgenUtil.generatePlanarDeck();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
planePool = ((Deck) selected).get(DeckSection.Planes);
|
planePool = ((Deck) selected).get(DeckSection.Planes);
|
||||||
}
|
}
|
||||||
|
if (planePool == null) { //ERROR! Can be null if player deselects the list selection
|
||||||
|
GuiDialog.message("No Planar deck selected for " + name
|
||||||
|
+ ". Please choose one or disable the Planechase variant");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (checkLegality) {
|
if (checkLegality) {
|
||||||
String errMsg = GameType.Planechase.getDecksFormat().getPlaneSectionConformanceProblem(planePool);
|
String errMsg = GameType.Planechase.getDecksFormat().getPlaneSectionConformanceProblem(planePool);
|
||||||
if (null != errMsg) {
|
if (null != errMsg) {
|
||||||
@@ -210,6 +225,30 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
|||||||
planes = planePool.toFlatList();
|
planes = planePool.toFlatList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Vanguard
|
||||||
|
if (variantTypes.contains(GameType.Vanguard)) {
|
||||||
|
Object selected = view.getVanguardLists().get(i).getSelectedValue();
|
||||||
|
if (selected instanceof String) {
|
||||||
|
String sel = (String) selected;
|
||||||
|
if (sel.contains("Use deck's default Vanguard") && deck.has(DeckSection.Avatar)) {
|
||||||
|
vanguardAvatar = deck.get(DeckSection.Avatar).get(0);
|
||||||
|
} else { //Only other string is "Random"
|
||||||
|
if (!view.isPlayerAI(i)) { //Human
|
||||||
|
vanguardAvatar = Iterables.get(view.getAllAvatars(), randomSeed.nextInt(Iterables.size(view.getNonRandomHumanAvatars())));
|
||||||
|
} else { //AI
|
||||||
|
vanguardAvatar = Iterables.get(view.getAllAiAvatars(), randomSeed.nextInt(Iterables.size(view.getNonRandomAiAvatars())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vanguardAvatar = (PaperCard)selected;
|
||||||
|
}
|
||||||
|
if (vanguardAvatar == null) { //ERROR!
|
||||||
|
GuiDialog.message("No Vanguard avatar selected for " + name
|
||||||
|
+ ". Please choose one or disable the Vanguard variant");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
players.add(RegisteredPlayer.forVariants(variantTypes, rp.getDeck(), view.getTeam(i),
|
players.add(RegisteredPlayer.forVariants(variantTypes, rp.getDeck(), view.getTeam(i),
|
||||||
schemes, isPlayerArchenemy, planes, vanguardAvatar).setPlayer(lobbyPlayer));
|
schemes, isPlayerArchenemy, planes, vanguardAvatar).setPlayer(lobbyPlayer));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,11 +15,14 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
import javax.swing.ButtonGroup;
|
import javax.swing.ButtonGroup;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.ScrollPaneConstants;
|
import javax.swing.ScrollPaneConstants;
|
||||||
|
import javax.swing.event.ListSelectionEvent;
|
||||||
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
|
||||||
@@ -31,6 +34,8 @@ import forge.Command;
|
|||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.deck.DeckSection;
|
import forge.deck.DeckSection;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
|
import forge.game.card.Card;
|
||||||
|
import forge.gui.CardDetailPanel;
|
||||||
import forge.gui.deckchooser.DecksComboBox.DeckType;
|
import forge.gui.deckchooser.DecksComboBox.DeckType;
|
||||||
import forge.gui.deckchooser.DecksComboBoxEvent;
|
import forge.gui.deckchooser.DecksComboBoxEvent;
|
||||||
import forge.gui.deckchooser.FDeckChooser;
|
import forge.gui.deckchooser.FDeckChooser;
|
||||||
@@ -62,6 +67,7 @@ import forge.gui.toolbox.FSkin;
|
|||||||
import forge.gui.toolbox.FSkin.SkinColor;
|
import forge.gui.toolbox.FSkin.SkinColor;
|
||||||
import forge.gui.toolbox.FSkin.SkinImage;
|
import forge.gui.toolbox.FSkin.SkinImage;
|
||||||
import forge.gui.toolbox.FTextField;
|
import forge.gui.toolbox.FTextField;
|
||||||
|
import forge.item.IPaperCard;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
@@ -136,6 +142,17 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
private final List<FLabel> plnDeckSelectorBtns = new ArrayList<FLabel>(8);
|
private final List<FLabel> plnDeckSelectorBtns = new ArrayList<FLabel>(8);
|
||||||
private final List<FLabel> plnEditors = new ArrayList<FLabel>(8);
|
private final List<FLabel> plnEditors = new ArrayList<FLabel>(8);
|
||||||
|
|
||||||
|
private final List<FList<Object>> vgdAvatarLists = new ArrayList<FList<Object>>();
|
||||||
|
private final List<FPanel> vgdPanels = new ArrayList<FPanel>(8);
|
||||||
|
private final List<FLabel> vgdSelectorBtns = new ArrayList<FLabel>(8);
|
||||||
|
private final List<CardDetailPanel> vgdAvatarDetails = new ArrayList<CardDetailPanel>();
|
||||||
|
private final List<PaperCard> vgdAllAvatars = new ArrayList<PaperCard>();
|
||||||
|
private final List<PaperCard> vgdAllAiAvatars = new ArrayList<PaperCard>();
|
||||||
|
private final List<PaperCard> nonRandomHumanAvatars = new ArrayList<PaperCard>();
|
||||||
|
private final List<PaperCard> nonRandomAiAvatars = new ArrayList<PaperCard>();
|
||||||
|
private Vector<Object> humanListData = new Vector<Object>();
|
||||||
|
private Vector<Object> aiListData = new Vector<Object>();
|
||||||
|
|
||||||
// CTR
|
// CTR
|
||||||
private VSubmenuConstructed() {
|
private VSubmenuConstructed() {
|
||||||
lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
||||||
@@ -381,6 +398,20 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
plnDeckSelectorBtns.add(plnDeckSelectorBtn);
|
plnDeckSelectorBtns.add(plnDeckSelectorBtn);
|
||||||
plnEditors.add(plnDeckEditor);
|
plnEditors.add(plnDeckEditor);
|
||||||
|
|
||||||
|
// Vanguard buttons
|
||||||
|
final FLabel vgdSelectorBtn = new FLabel.ButtonBuilder().text("Select a Vanguard avatar").build();
|
||||||
|
vgdSelectorBtn.setVisible(appliedVariants.contains(GameType.Vanguard));
|
||||||
|
vgdSelectorBtn.setCommand(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
currentGameMode = GameType.Vanguard;
|
||||||
|
vgdSelectorBtn.requestFocusInWindow();
|
||||||
|
changePlayerFocus(vgdSelectorBtns.indexOf(vgdSelectorBtn), GameType.Vanguard);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
playerPanel.add(vgdSelectorBtn, variantBtnConstraints + ", spanx, growx, pushx, wrap");
|
||||||
|
vgdSelectorBtns.add(vgdSelectorBtn);
|
||||||
|
|
||||||
playerPanelList.add(playerPanel);
|
playerPanelList.add(playerPanel);
|
||||||
|
|
||||||
return playerPanel;
|
return playerPanel;
|
||||||
@@ -446,6 +477,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
private void buildDeckPanel(final int playerIndex) {
|
private void buildDeckPanel(final int playerIndex) {
|
||||||
String sectionConstraints = "insets 8";
|
String sectionConstraints = "insets 8";
|
||||||
|
String componentConstraints = "gap 0px 0px 10px 10px, wrap";
|
||||||
|
|
||||||
// Main deck
|
// Main deck
|
||||||
final FDeckChooser mainChooser = new FDeckChooser(isPlayerAI(playerIndex));
|
final FDeckChooser mainChooser = new FDeckChooser(isPlayerAI(playerIndex));
|
||||||
@@ -461,15 +493,36 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
// Planar deck list
|
// Planar deck list
|
||||||
FPanel planarDeckPanel = new FPanel();
|
FPanel planarDeckPanel = new FPanel();
|
||||||
planarDeckPanel.setLayout(new MigLayout(sectionConstraints));
|
planarDeckPanel.setLayout(new MigLayout(sectionConstraints));
|
||||||
planarDeckPanel.add(new FLabel.Builder().text("Select Planar deck:").build(), "gap 0px 0px 10px 10px, wrap");
|
planarDeckPanel.add(new FLabel.Builder().text("Select Planar deck:").build(), componentConstraints);
|
||||||
FList<Object> planarDeckList = new FList<Object>();
|
FList<Object> planarDeckList = new FList<Object>();
|
||||||
planarDeckList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
planarDeckList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
|
||||||
FScrollPane scrPlanes = new FScrollPane(planarDeckList, false,
|
FScrollPane scrPlanes = new FScrollPane(planarDeckList, false,
|
||||||
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
||||||
planarDeckPanel.add(scrPlanes, "h 95%, gap 0px 10px 0px 10px, grow, push, wrap");
|
planarDeckPanel.add(scrPlanes, componentConstraints + ", h 95%, grow, push");
|
||||||
planarDeckLists.add(planarDeckList);
|
planarDeckLists.add(planarDeckList);
|
||||||
planarDeckPanels.add(planarDeckPanel);
|
planarDeckPanels.add(planarDeckPanel);
|
||||||
|
|
||||||
|
// Vanguard avatar list
|
||||||
|
FPanel vgdDeckPanel = new FPanel();
|
||||||
|
|
||||||
|
FList<Object> vgdAvatarList = new FList<Object>();
|
||||||
|
vgdAvatarList.setListData(isPlayerAI(playerIndex) ? aiListData : humanListData);
|
||||||
|
vgdAvatarList.setSelectedIndex(0);
|
||||||
|
vgdAvatarList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
vgdAvatarList.addListSelectionListener(vgdLSListener);
|
||||||
|
FScrollPane scrAvatars = new FScrollPane(vgdAvatarList, false,
|
||||||
|
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
||||||
|
|
||||||
|
CardDetailPanel vgdDetail = new CardDetailPanel(null);
|
||||||
|
vgdAvatarDetails.add(vgdDetail);
|
||||||
|
|
||||||
|
vgdDeckPanel.setLayout(new MigLayout(sectionConstraints));
|
||||||
|
vgdDeckPanel.add(new FLabel.Builder().text("Select a Vanguard avatar:").build(), componentConstraints);
|
||||||
|
vgdDeckPanel.add(scrAvatars, componentConstraints + ", grow, push");
|
||||||
|
vgdDeckPanel.add(vgdDetail, componentConstraints + ", growx, pushx");
|
||||||
|
vgdAvatarLists.add(vgdAvatarList);
|
||||||
|
vgdPanels.add(vgdDeckPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onDeckClicked(int iPlayer, DeckType type, Collection<DeckProxy> selectedDecks) {
|
protected void onDeckClicked(int iPlayer, DeckType type, Collection<DeckProxy> selectedDecks) {
|
||||||
@@ -490,8 +543,11 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
}
|
}
|
||||||
} else if (GameType.Planechase == forGameType) {
|
} else if (GameType.Planechase == forGameType) {
|
||||||
decksFrame.add(planarDeckPanels.get(playerWithFocus), "grow, push");
|
decksFrame.add(planarDeckPanels.get(playerWithFocus), "grow, push");
|
||||||
refreshPanels(false, true);
|
} else if (GameType.Vanguard == forGameType) {
|
||||||
|
updateVanguardList(playerWithFocus);
|
||||||
|
decksFrame.add(vgdPanels.get(playerWithFocus), "grow, push");
|
||||||
}
|
}
|
||||||
|
refreshPanels(false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@@ -544,6 +600,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
populateDeckPanel(GameType.Constructed);
|
populateDeckPanel(GameType.Constructed);
|
||||||
|
populateVanguardLists();
|
||||||
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(constructedFrame, "gap 20px 20px 20px 0px, push, grow");
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(constructedFrame, "gap 20px 20px 20px 0px, push, grow");
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlStart, "gap 0 0 3.5%! 3.5%!, ax center");
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlStart, "gap 0 0 3.5%! 3.5%!, ax center");
|
||||||
@@ -722,8 +779,16 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
variantType = GameType.Vanguard;
|
variantType = GameType.Vanguard;
|
||||||
if (arg0.getStateChange() == ItemEvent.SELECTED) {
|
if (arg0.getStateChange() == ItemEvent.SELECTED) {
|
||||||
appliedVariants.add(variantType);
|
appliedVariants.add(variantType);
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
vgdSelectorBtns.get(i).setVisible(true);
|
||||||
|
changePlayerFocus(playerWithFocus, variantType);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
appliedVariants.remove(variantType);
|
appliedVariants.remove(variantType);
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
vgdSelectorBtns.get(i).setVisible(false);
|
||||||
|
changePlayerFocus(playerWithFocus, GameType.Constructed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (cb == vntCommander) {
|
else if (cb == vntCommander) {
|
||||||
@@ -876,6 +941,22 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
int radioID = playerTypeRadios.indexOf((FRadioButton)e.getSource());
|
int radioID = playerTypeRadios.indexOf((FRadioButton)e.getSource());
|
||||||
int radioOwnerID = (int) Math.floor(radioID / 2);
|
int radioOwnerID = (int) Math.floor(radioID / 2);
|
||||||
avatarList.get(radioOwnerID).requestFocusInWindow();
|
avatarList.get(radioOwnerID).requestFocusInWindow();
|
||||||
|
updateVanguardList(radioOwnerID);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** This listener will look for a vanguard avatar being selected in the lists
|
||||||
|
/ and update the corresponding detail panel. */
|
||||||
|
private ListSelectionListener vgdLSListener = new ListSelectionListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void valueChanged(ListSelectionEvent e) {
|
||||||
|
int index = vgdAvatarLists.indexOf(e.getSource());
|
||||||
|
Object obj = vgdAvatarLists.get(index).getSelectedValue();
|
||||||
|
|
||||||
|
if (obj instanceof PaperCard) {
|
||||||
|
vgdAvatarDetails.get(index).setCard(Card.getCardForUi((IPaperCard) obj));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -923,7 +1004,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
//========== STUFF FOR VARIANTS
|
//========== METHODS FOR VARIANTS
|
||||||
|
|
||||||
public Set<GameType> getAppliedVariants() {
|
public Set<GameType> getAppliedVariants() {
|
||||||
return appliedVariants;
|
return appliedVariants;
|
||||||
@@ -937,4 +1018,74 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
public List<FList<Object>> getPlanarDeckLists() {
|
public List<FList<Object>> getPlanarDeckLists() {
|
||||||
return planarDeckLists;
|
return planarDeckLists;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets the list of Vanguard avatar lists. */
|
||||||
|
public List<FList<Object>> getVanguardLists() {
|
||||||
|
return vgdAvatarLists;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return all the Vanguard avatars. */
|
||||||
|
public Iterable<PaperCard> getAllAvatars() {
|
||||||
|
if (vgdAllAvatars.isEmpty()) {
|
||||||
|
for (PaperCard c : Singletons.getMagicDb().getVariantCards().getAllCards()) {
|
||||||
|
if (c.getRules().getType().isVanguard()) {
|
||||||
|
vgdAllAvatars.add(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return vgdAllAvatars;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return the Vanguard avatars not flagged RemAIDeck. */
|
||||||
|
public List<PaperCard> getAllAiAvatars() {
|
||||||
|
return vgdAllAiAvatars;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return the Vanguard avatars not flagged RemRandomDeck. */
|
||||||
|
public List<PaperCard> getNonRandomHumanAvatars() {
|
||||||
|
return nonRandomHumanAvatars;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return the Vanguard avatars not flagged RemAIDeck or RemRandomDeck. */
|
||||||
|
public List<PaperCard> getNonRandomAiAvatars() {
|
||||||
|
return nonRandomAiAvatars;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Populate vanguard lists. */
|
||||||
|
private void populateVanguardLists() {
|
||||||
|
humanListData.add("Random");
|
||||||
|
aiListData.add("Random");
|
||||||
|
for (PaperCard cp : getAllAvatars()) {
|
||||||
|
humanListData.add(cp);
|
||||||
|
if (!cp.getRules().getAiHints().getRemRandomDecks()) {
|
||||||
|
nonRandomHumanAvatars.add(cp);
|
||||||
|
}
|
||||||
|
if (!cp.getRules().getAiHints().getRemAIDecks()) {
|
||||||
|
aiListData.add(cp);
|
||||||
|
vgdAllAiAvatars.add(cp);
|
||||||
|
if (!cp.getRules().getAiHints().getRemRandomDecks()) {
|
||||||
|
nonRandomAiAvatars.add(cp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** update vanguard list. */
|
||||||
|
public void updateVanguardList(int playerIndex) {
|
||||||
|
FList<Object> vgdList = getVanguardLists().get(playerIndex);
|
||||||
|
Vector<Object> listData = new Vector<Object>();
|
||||||
|
|
||||||
|
listData.add("Use deck's default avatar (random if unavailable)");
|
||||||
|
listData.add("Random");
|
||||||
|
|
||||||
|
Object lastSelection = vgdList.getSelectedValue();
|
||||||
|
vgdList.setListData(isPlayerAI(playerIndex) ? aiListData : humanListData);
|
||||||
|
if (null != lastSelection) {
|
||||||
|
vgdList.setSelectedValue(lastSelection, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-1 == vgdList.getSelectedIndex()) {
|
||||||
|
vgdList.setSelectedIndex(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,190 +0,0 @@
|
|||||||
package forge.gui.home.variant;
|
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
|
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
|
|
||||||
import forge.Command;
|
|
||||||
import forge.Singletons;
|
|
||||||
import forge.deck.Deck;
|
|
||||||
import forge.deck.DeckSection;
|
|
||||||
import forge.game.GameType;
|
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.RegisteredPlayer;
|
|
||||||
import forge.gui.GuiDialog;
|
|
||||||
import forge.gui.SOverlayUtils;
|
|
||||||
import forge.gui.deckchooser.FDeckChooser;
|
|
||||||
import forge.gui.framework.ICDoc;
|
|
||||||
import forge.item.PaperCard;
|
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
import forge.properties.ForgePreferences;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controls the constructed submenu in the home UI.
|
|
||||||
*
|
|
||||||
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public enum CSubmenuVanguard implements ICDoc {
|
|
||||||
/** */
|
|
||||||
SINGLETON_INSTANCE;
|
|
||||||
private final VSubmenuVanguard view = VSubmenuVanguard.SINGLETON_INSTANCE;
|
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.home.ICSubmenu#initialize()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
SwingUtilities.invokeLater(new Runnable() {
|
|
||||||
@Override public void run() { view.getBtnStart().requestFocusInWindow(); }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.home.ICSubmenu#initialize()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void initialize() {
|
|
||||||
final ForgePreferences prefs = Singletons.getModel().getPreferences();
|
|
||||||
for (FDeckChooser fdc : view.getDeckChoosers()) {
|
|
||||||
fdc.initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Checkbox event handling
|
|
||||||
view.getBtnStart().addActionListener(new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
startGame();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Checkbox event handling
|
|
||||||
view.getCbSingletons().addActionListener(new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
prefs.setPref(FPref.DECKGEN_SINGLETONS,
|
|
||||||
String.valueOf(view.getCbSingletons().isSelected()));
|
|
||||||
prefs.save();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
view.getCbArtifacts().addActionListener(new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
prefs.setPref(
|
|
||||||
FPref.DECKGEN_ARTIFACTS, String.valueOf(view.getCbArtifacts().isSelected()));
|
|
||||||
prefs.save();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
view.getCbRemoveSmall().addActionListener(new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
prefs.setPref(
|
|
||||||
FPref.DECKGEN_NOSMALL, String.valueOf(view.getCbRemoveSmall().isSelected()));
|
|
||||||
prefs.save();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Pre-select checkboxes
|
|
||||||
view.getCbSingletons().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_SINGLETONS));
|
|
||||||
view.getCbArtifacts().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_ARTIFACTS));
|
|
||||||
view.getCbRemoveSmall().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_NOSMALL));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** @param lists0   {@link java.util.List}<{@link javax.swing.JList}> */
|
|
||||||
private void startGame() {
|
|
||||||
SwingUtilities.invokeLater(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
SOverlayUtils.startGameOverlay();
|
|
||||||
SOverlayUtils.showOverlay();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
Random rnd = new Random();
|
|
||||||
String nl = System.getProperty("line.separator");
|
|
||||||
boolean usedDefaults = false;
|
|
||||||
StringBuilder defaultAvatarInfo = new StringBuilder("The following decks will use a default avatar:" + nl);
|
|
||||||
|
|
||||||
List<Deck> playerDecks = new ArrayList<Deck>();
|
|
||||||
for (int i = 0; i < view.getNumPlayers(); i++) {
|
|
||||||
RegisteredPlayer d = view.getDeckChoosers().get(i).getPlayer();
|
|
||||||
|
|
||||||
if (d == null) {
|
|
||||||
//ERROR!
|
|
||||||
GuiDialog.message("No deck selected for player " + (i + 1));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
playerDecks.add(d.getDeck());
|
|
||||||
}
|
|
||||||
|
|
||||||
List<PaperCard> playerAvatars = new ArrayList<PaperCard>();
|
|
||||||
for (int i = 0; i < view.getNumPlayers(); i++) {
|
|
||||||
PaperCard avatar = null;
|
|
||||||
Object obj = view.getAvatarLists().get(i).getSelectedValue();
|
|
||||||
|
|
||||||
boolean useDefault = VSubmenuVanguard.SINGLETON_INSTANCE.getCbDefaultAvatars().isSelected();
|
|
||||||
useDefault &= playerDecks.get(i).get(DeckSection.Avatar) != null;
|
|
||||||
|
|
||||||
if (useDefault) {
|
|
||||||
avatar = playerDecks.get(i).get(DeckSection.Avatar).get(0);
|
|
||||||
defaultAvatarInfo.append("Player " + (i + 1) + ": ");
|
|
||||||
defaultAvatarInfo.append(avatar.getName() + nl);
|
|
||||||
usedDefaults = true;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (obj instanceof String) {
|
|
||||||
//Random is the only string in the list so grab a random avatar.
|
|
||||||
if (i == 0) {
|
|
||||||
//HUMAN
|
|
||||||
avatar = Iterables.get(view.getAllAvatars(), rnd.nextInt(Iterables.size(view.getNonRandomHumanAvatars())));
|
|
||||||
} else {
|
|
||||||
//AI
|
|
||||||
avatar = Iterables.get(view.getAllAiAvatars(), rnd.nextInt(Iterables.size(view.getNonRandomAiAvatars())));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
avatar = (PaperCard) obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (avatar == null) {
|
|
||||||
//ERROR!
|
|
||||||
GuiDialog.message("No avatar selected for player " + (i + 1));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
playerAvatars.add(avatar);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (usedDefaults) {
|
|
||||||
GuiDialog.message(defaultAvatarInfo.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
Lobby lobby = FServer.instance.getLobby();
|
|
||||||
List<RegisteredPlayer> helper = new ArrayList<RegisteredPlayer>();
|
|
||||||
for (int i = 0; i < view.getNumPlayers(); i++) {
|
|
||||||
LobbyPlayer player = view.isPlayerAI(i) ? lobby.getAiPlayer() : lobby.getGuiPlayer();
|
|
||||||
helper.add(RegisteredPlayer.forVanguard(playerDecks.get(i), playerAvatars.get(i)).setPlayer(player));
|
|
||||||
}
|
|
||||||
Singletons.getControl().startMatch(GameType.Vanguard, helper);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Command getCommandOnSelect() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,422 +0,0 @@
|
|||||||
package forge.gui.home.variant;
|
|
||||||
|
|
||||||
import java.awt.event.ItemEvent;
|
|
||||||
import java.awt.event.ItemListener;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Vector;
|
|
||||||
|
|
||||||
import javax.swing.ButtonGroup;
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JCheckBox;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.JRadioButton;
|
|
||||||
import javax.swing.ScrollPaneConstants;
|
|
||||||
import javax.swing.event.ListSelectionEvent;
|
|
||||||
import javax.swing.event.ListSelectionListener;
|
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
|
||||||
import forge.Singletons;
|
|
||||||
import forge.game.card.Card;
|
|
||||||
import forge.gui.CardDetailPanel;
|
|
||||||
import forge.gui.deckchooser.FDeckChooser;
|
|
||||||
import forge.gui.framework.DragCell;
|
|
||||||
import forge.gui.framework.DragTab;
|
|
||||||
import forge.gui.framework.EDocID;
|
|
||||||
import forge.gui.home.EMenuGroup;
|
|
||||||
import forge.gui.home.IVSubmenu;
|
|
||||||
import forge.gui.home.LblHeader;
|
|
||||||
import forge.gui.home.StartButton;
|
|
||||||
import forge.gui.home.VHomeUI;
|
|
||||||
import forge.gui.toolbox.FCheckBox;
|
|
||||||
import forge.gui.toolbox.FLabel;
|
|
||||||
import forge.gui.toolbox.FList;
|
|
||||||
import forge.gui.toolbox.FPanel;
|
|
||||||
import forge.gui.toolbox.FRadioButton;
|
|
||||||
import forge.gui.toolbox.FScrollPane;
|
|
||||||
import forge.gui.toolbox.FSkin;
|
|
||||||
import forge.gui.toolbox.FTabbedPane;
|
|
||||||
import forge.item.PaperCard;
|
|
||||||
import forge.item.IPaperCard;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Assembles Swing components of constructed submenu singleton.
|
|
||||||
*
|
|
||||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
|
|
||||||
/** */
|
|
||||||
SINGLETON_INSTANCE;
|
|
||||||
|
|
||||||
// Fields used with interface IVDoc
|
|
||||||
private DragCell parentCell;
|
|
||||||
private final DragTab tab = new DragTab("Vanguard Mode");
|
|
||||||
|
|
||||||
/** */
|
|
||||||
private final LblHeader lblTitle = new LblHeader("Variant: Vanguard");
|
|
||||||
|
|
||||||
private final JPanel pnlStart = new JPanel(new MigLayout("insets 0, gap 0, wrap 2"));
|
|
||||||
|
|
||||||
private final StartButton btnStart = new StartButton();
|
|
||||||
|
|
||||||
private final JCheckBox cbSingletons = new FCheckBox("Singleton Mode");
|
|
||||||
private final JCheckBox cbArtifacts = new FCheckBox("Remove Artifacts");
|
|
||||||
private final JCheckBox cbRemoveSmall = new FCheckBox("Remove Small Creatures");
|
|
||||||
|
|
||||||
private final List<PaperCard> allAvatars = new ArrayList<PaperCard>();
|
|
||||||
|
|
||||||
private final List<PaperCard> allAiAvatars = new ArrayList<PaperCard>();
|
|
||||||
private final List<PaperCard> nonRandomHumanAvatars = new ArrayList<PaperCard>();
|
|
||||||
private final List<PaperCard> nonRandomAiAvatars = new ArrayList<PaperCard>();
|
|
||||||
|
|
||||||
//////////////////////////////
|
|
||||||
|
|
||||||
private final FTabbedPane tabPane = new FTabbedPane();
|
|
||||||
private final List<FPanel> playerPanels = new ArrayList<FPanel>();
|
|
||||||
private final List<FDeckChooser> deckChoosers = new ArrayList<FDeckChooser>();
|
|
||||||
private final List<FList<Object>> avatarLists = new ArrayList<FList<Object>>();
|
|
||||||
|
|
||||||
private final List<JRadioButton> fieldRadios = new ArrayList<JRadioButton>();
|
|
||||||
private final List<JRadioButton> playerIsAIRadios = new ArrayList<JRadioButton>();
|
|
||||||
private final ButtonGroup grpFields = new ButtonGroup();
|
|
||||||
private final FCheckBox cbDefaultAvatars = new FCheckBox("Use deck-default avatars if possible.");
|
|
||||||
private final List<CardDetailPanel> cdpAvatarDetails = new ArrayList<CardDetailPanel>();
|
|
||||||
private int currentNumTabsShown = 8;
|
|
||||||
|
|
||||||
//////////////////////////////
|
|
||||||
|
|
||||||
private VSubmenuVanguard() {
|
|
||||||
|
|
||||||
lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
|
||||||
|
|
||||||
Vector<Object> humanListData = new Vector<Object>();
|
|
||||||
Vector<Object> aiListData = new Vector<Object>();
|
|
||||||
humanListData.add("Random");
|
|
||||||
aiListData.add("Random");
|
|
||||||
for (PaperCard cp : getAllAvatars()) {
|
|
||||||
humanListData.add(cp);
|
|
||||||
if (!cp.getRules().getAiHints().getRemRandomDecks()) {
|
|
||||||
nonRandomHumanAvatars.add(cp);
|
|
||||||
}
|
|
||||||
if (!cp.getRules().getAiHints().getRemAIDecks()) {
|
|
||||||
aiListData.add(cp);
|
|
||||||
allAiAvatars.add(cp);
|
|
||||||
if (!cp.getRules().getAiHints().getRemRandomDecks()) {
|
|
||||||
nonRandomAiAvatars.add(cp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//This listener will look for any of the radio buttons being selected
|
|
||||||
//and call the method that shows/hides tabs appropriately.
|
|
||||||
ItemListener iListener = new ItemListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void itemStateChanged(ItemEvent arg0) {
|
|
||||||
FRadioButton aButton = (FRadioButton) arg0.getSource();
|
|
||||||
|
|
||||||
if (arg0.getStateChange() == ItemEvent.SELECTED) {
|
|
||||||
changeTabs(Integer.parseInt(aButton.getText()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
//This listener will look for an avatar being selected in the lists and update
|
|
||||||
//the corresponding detail panel.
|
|
||||||
ListSelectionListener lsListener = new ListSelectionListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void valueChanged(ListSelectionEvent arg0) {
|
|
||||||
int index = avatarLists.indexOf(arg0.getSource());
|
|
||||||
Object obj = avatarLists.get(index).getSelectedValue();
|
|
||||||
|
|
||||||
if (obj instanceof PaperCard) {
|
|
||||||
cdpAvatarDetails.get(index).setCard(Card.getCardForUi((IPaperCard) obj));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
//Create all 8 player settings panel
|
|
||||||
FRadioButton tempRadio = null;
|
|
||||||
FPanel tempPanel;
|
|
||||||
FDeckChooser tempChooser;
|
|
||||||
FList<Object> tempList;
|
|
||||||
CardDetailPanel tempDetail;
|
|
||||||
|
|
||||||
//Settings panel
|
|
||||||
FPanel settingsPanel = new FPanel();
|
|
||||||
settingsPanel.setLayout(new MigLayout("wrap 2, ax center"));
|
|
||||||
FPanel radioPane = new FPanel();
|
|
||||||
radioPane.setLayout(new MigLayout("wrap 1"));
|
|
||||||
radioPane.setOpaque(false);
|
|
||||||
radioPane.add(new FLabel.Builder().text("Set number of opponents").build(), "wrap");
|
|
||||||
for (int i = 1; i < 8; i++) {
|
|
||||||
tempRadio = new FRadioButton();
|
|
||||||
tempRadio.setText(String.valueOf(i));
|
|
||||||
fieldRadios.add(tempRadio);
|
|
||||||
grpFields.add(tempRadio);
|
|
||||||
tempRadio.setSelected(true);
|
|
||||||
tempRadio.addItemListener(iListener);
|
|
||||||
radioPane.add(tempRadio, "wrap,align 50% 50%");
|
|
||||||
}
|
|
||||||
settingsPanel.add(radioPane, "span 1 2");
|
|
||||||
settingsPanel.add(cbDefaultAvatars);
|
|
||||||
tabPane.add("Settings", settingsPanel);
|
|
||||||
|
|
||||||
//Player panels (Human + 7 AIs)
|
|
||||||
for (int i = 0; i < 8; i++) {
|
|
||||||
tempPanel = new FPanel();
|
|
||||||
tempPanel.setLayout(new MigLayout("insets 0, gap 0 , wrap 2, flowy, ax center"));
|
|
||||||
|
|
||||||
tempChooser = new FDeckChooser(i != 0);
|
|
||||||
tempChooser.initialize();
|
|
||||||
|
|
||||||
tempList = new FList<Object>();
|
|
||||||
|
|
||||||
tempList.setListData(i == 0 ? humanListData : aiListData);
|
|
||||||
tempList.setSelectedIndex(0);
|
|
||||||
tempList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
|
||||||
tempList.addListSelectionListener(lsListener);
|
|
||||||
|
|
||||||
deckChoosers.add(tempChooser);
|
|
||||||
avatarLists.add(tempList);
|
|
||||||
|
|
||||||
ButtonGroup tempBtnGroup = new ButtonGroup();
|
|
||||||
FRadioButton tmpAI = new FRadioButton();
|
|
||||||
tmpAI.setText("AI");
|
|
||||||
tmpAI.setSelected(i != 0);
|
|
||||||
FRadioButton tmpHuman = new FRadioButton();
|
|
||||||
tmpHuman.setText("Human");
|
|
||||||
tmpHuman.setSelected(i == 0);
|
|
||||||
|
|
||||||
FPanel typeBtnPanel = new FPanel();
|
|
||||||
typeBtnPanel.add(tmpAI);
|
|
||||||
typeBtnPanel.add(tmpHuman,"wrap");
|
|
||||||
tempPanel.add(typeBtnPanel);
|
|
||||||
|
|
||||||
tempBtnGroup.add(tmpAI);
|
|
||||||
tempBtnGroup.add(tmpHuman);
|
|
||||||
playerIsAIRadios.add(tmpAI);
|
|
||||||
|
|
||||||
tempPanel.add(tempChooser, "span 1 2, w 33%, gap 10px 10px 0px 10px, growy, pushy, wrap");
|
|
||||||
|
|
||||||
tempPanel.add(new FLabel.Builder().text("Select Avatar:").build(), "gap 0px 0px 10px 10px, flowy");
|
|
||||||
|
|
||||||
FScrollPane scrAvatar = new FScrollPane(tempList, true, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
|
||||||
tempPanel.add(scrAvatar, "h 90%, w 33%, gap 0px 10px 0px 10px, growy, pushy, wrap");
|
|
||||||
|
|
||||||
tempDetail = new CardDetailPanel(null);
|
|
||||||
cdpAvatarDetails.add(tempDetail);
|
|
||||||
|
|
||||||
tempPanel.add(tempDetail, "span 1 2, w 33%, gap 0px 10px 10px 10px, growy, pushy, growx");
|
|
||||||
|
|
||||||
playerPanels.add(tempPanel);
|
|
||||||
|
|
||||||
tabPane.add("Player " + (i+1), tempPanel);
|
|
||||||
}
|
|
||||||
|
|
||||||
final String strCheckboxConstraints = "h 30px!, gap 0 20px 0 0";
|
|
||||||
pnlStart.setOpaque(false);
|
|
||||||
pnlStart.add(cbSingletons, strCheckboxConstraints);
|
|
||||||
pnlStart.add(btnStart, "span 1 3, growx, pushx, align center");
|
|
||||||
pnlStart.add(cbArtifacts, strCheckboxConstraints);
|
|
||||||
pnlStart.add(cbRemoveSmall, strCheckboxConstraints);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isPlayerAI(int playernum) {
|
|
||||||
return playerIsAIRadios.get(playernum).isSelected();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void changeTabs(int toShow) {
|
|
||||||
if (toShow < currentNumTabsShown) {
|
|
||||||
for (int i = currentNumTabsShown; i > toShow + 1; i--) {
|
|
||||||
tabPane.remove(i);
|
|
||||||
}
|
|
||||||
currentNumTabsShown = tabPane.getComponentCount() - 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for (int i = currentNumTabsShown; i <= toShow; i++) {
|
|
||||||
tabPane.add("Player " + i, playerPanels.get(i));
|
|
||||||
}
|
|
||||||
currentNumTabsShown = tabPane.getComponentCount() - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.home.IVSubmenu#getGroupEnum()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public EMenuGroup getGroupEnum() {
|
|
||||||
return EMenuGroup.VARIANT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.home.IVSubmenu#getMenuTitle()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public String getMenuTitle() {
|
|
||||||
return "Vanguard";
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.home.IVSubmenu#getItemEnum()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public EDocID getItemEnum() {
|
|
||||||
return EDocID.HOME_VANGUARD;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.home.IVSubmenu#populate()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void populate() {
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().removeAll();
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0, wrap 1, ax right"));
|
|
||||||
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblTitle, "w 80%!, h 40px!, gap 0 0 15px 15px, ax right");
|
|
||||||
|
|
||||||
for (FDeckChooser fdc : deckChoosers) {
|
|
||||||
fdc.populate();
|
|
||||||
}
|
|
||||||
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(tabPane, "gap 20px 20px 20px 0px, pushx, pushy, growx, growy");
|
|
||||||
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlStart, "gap 0 0 3.5%! 3.5%!, ax center");
|
|
||||||
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JButton} */
|
|
||||||
public JButton getBtnStart() {
|
|
||||||
return this.btnStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JCheckBox} */
|
|
||||||
public JCheckBox getCbSingletons() {
|
|
||||||
return cbSingletons;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JCheckBox} */
|
|
||||||
public JCheckBox getCbArtifacts() {
|
|
||||||
return cbArtifacts;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JCheckBox} */
|
|
||||||
public JCheckBox getCbRemoveSmall() {
|
|
||||||
return cbRemoveSmall;
|
|
||||||
}
|
|
||||||
|
|
||||||
//========== Overridden from IVDoc
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getDocumentID()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public EDocID getDocumentID() {
|
|
||||||
return EDocID.HOME_VANGUARD;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getTabLabel()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public DragTab getTabLabel() {
|
|
||||||
return tab;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getLayoutControl()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public CSubmenuVanguard getLayoutControl() {
|
|
||||||
return CSubmenuVanguard.SINGLETON_INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#setParentCell(forge.gui.framework.DragCell)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void setParentCell(DragCell cell0) {
|
|
||||||
this.parentCell = cell0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.framework.IVDoc#getParentCell()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public DragCell getParentCell() {
|
|
||||||
return parentCell;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @return a deckchooser for every player
|
|
||||||
*/
|
|
||||||
public List<FDeckChooser> getDeckChoosers() {
|
|
||||||
return deckChoosers;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the avatarLists
|
|
||||||
*/
|
|
||||||
public List<FList<Object>> getAvatarLists() {
|
|
||||||
return avatarLists;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the currentNumTabsShown
|
|
||||||
*/
|
|
||||||
public int getNumPlayers() {
|
|
||||||
return currentNumTabsShown;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the allAvatars
|
|
||||||
*/
|
|
||||||
public Iterable<PaperCard> getAllAvatars() {
|
|
||||||
if (allAvatars.isEmpty()) {
|
|
||||||
for (PaperCard c : Singletons.getMagicDb().getVariantCards().getAllCards()) {
|
|
||||||
if (c.getRules().getType().isVanguard()) {
|
|
||||||
allAvatars.add(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return allAvatars;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the allAiAvatars
|
|
||||||
*/
|
|
||||||
public List<PaperCard> getAllAiAvatars() {
|
|
||||||
return allAiAvatars;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the non-random human Avatars
|
|
||||||
*/
|
|
||||||
public List<PaperCard> getNonRandomHumanAvatars() {
|
|
||||||
return nonRandomHumanAvatars;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the non-random AI Avatars
|
|
||||||
*/
|
|
||||||
public List<PaperCard> getNonRandomAiAvatars() {
|
|
||||||
return nonRandomAiAvatars;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the cbDefaultAvatars
|
|
||||||
*/
|
|
||||||
public FCheckBox getCbDefaultAvatars() {
|
|
||||||
return cbDefaultAvatars;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user