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/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/CSubmenuVanguard.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/VSubmenuVanguard.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/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.VSubmenuCommander;
|
||||
//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.FScrollPanel;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
@@ -152,7 +152,7 @@ public enum VHomeUI implements IVTopLevelUI {
|
||||
allSubmenus.add(VSubmenuReleaseNotes.SINGLETON_INSTANCE);
|
||||
|
||||
allSubmenus.add(VSubmenuArchenemy.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuVanguard.SINGLETON_INSTANCE);
|
||||
//allSubmenus.add(VSubmenuVanguard.SINGLETON_INSTANCE);
|
||||
//allSubmenus.add(VSubmenuPlanechase.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuCommander.SINGLETON_INSTANCE);
|
||||
|
||||
|
||||
@@ -4,11 +4,14 @@ import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.deck.CardPool;
|
||||
@@ -17,9 +20,11 @@ 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.deckchooser.DeckgenUtil;
|
||||
import forge.gui.deckchooser.DecksComboBox.DeckType;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.home.variant.VSubmenuVanguard;
|
||||
import forge.gui.menus.IMenuProvider;
|
||||
import forge.gui.menus.MenuUtil;
|
||||
import forge.gui.toolbox.FList;
|
||||
@@ -78,6 +83,10 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
||||
}
|
||||
} // End Planechase
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
view.updateVanguardList(i);
|
||||
}
|
||||
|
||||
// General updates when switching back to this view
|
||||
view.updatePlayersFromPrefs();
|
||||
view.getBtnStart().requestFocusInWindow();
|
||||
@@ -135,9 +144,9 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
||||
/** Starts a match with the applied variants. */
|
||||
private void startGame(final List<GameType> variantTypes) {
|
||||
if (variantTypes.contains(GameType.Archenemy) || variantTypes.contains(GameType.ArchenemyRumble)
|
||||
|| variantTypes.contains(GameType.Commander)|| variantTypes.contains(GameType.Vanguard)) {
|
||||
FOptionPane.showMessageDialog("Archenemy, Commander and Vanguard matches cannot currently be started via "
|
||||
+ "the Constructed match setup screen. Please disable any of those variants then restart the match");
|
||||
|| variantTypes.contains(GameType.Commander)) {
|
||||
FOptionPane.showMessageDialog("Archenemy and Commander matches cannot currently be started via the "
|
||||
+ "Constructed match setup screen. Please disable any of those variants then restart the match");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -177,11 +186,12 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
||||
boolean isPlayerArchenemy = false;
|
||||
Iterable<PaperCard> planes = null;
|
||||
PaperCard vanguardAvatar = null;
|
||||
Random randomSeed = new Random();
|
||||
|
||||
//Planechase
|
||||
if (variantTypes.contains(GameType.Planechase)) {
|
||||
Object selected = view.getPlanarDeckLists().get(i).getSelectedValue();
|
||||
CardPool planePool;
|
||||
CardPool planePool = null;
|
||||
if (selected instanceof String) {
|
||||
String sel = (String) selected;
|
||||
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();
|
||||
if (sel.equals("Random") && pDecks.size() != 0) {
|
||||
planePool = Aggregates.random(pDecks).get(DeckSection.Planes);
|
||||
} else { //Generate
|
||||
} else if (planePool == null) {
|
||||
planePool = DeckgenUtil.generatePlanarDeck();
|
||||
}
|
||||
} else {
|
||||
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) {
|
||||
String errMsg = GameType.Planechase.getDecksFormat().getPlaneSectionConformanceProblem(planePool);
|
||||
if (null != errMsg) {
|
||||
@@ -210,6 +225,30 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
||||
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),
|
||||
schemes, isPlayerArchenemy, planes, vanguardAvatar).setPlayer(lobbyPlayer));
|
||||
}
|
||||
|
||||
@@ -15,11 +15,14 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
import java.util.TreeSet;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.swing.ButtonGroup;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.ScrollPaneConstants;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
@@ -31,6 +34,8 @@ import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.game.GameType;
|
||||
import forge.game.card.Card;
|
||||
import forge.gui.CardDetailPanel;
|
||||
import forge.gui.deckchooser.DecksComboBox.DeckType;
|
||||
import forge.gui.deckchooser.DecksComboBoxEvent;
|
||||
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.SkinImage;
|
||||
import forge.gui.toolbox.FTextField;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.item.PaperCard;
|
||||
import forge.properties.ForgePreferences;
|
||||
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> 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
|
||||
private VSubmenuConstructed() {
|
||||
lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
||||
@@ -381,6 +398,20 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
||||
plnDeckSelectorBtns.add(plnDeckSelectorBtn);
|
||||
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);
|
||||
|
||||
return playerPanel;
|
||||
@@ -446,6 +477,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
||||
@SuppressWarnings("serial")
|
||||
private void buildDeckPanel(final int playerIndex) {
|
||||
String sectionConstraints = "insets 8";
|
||||
String componentConstraints = "gap 0px 0px 10px 10px, wrap";
|
||||
|
||||
// Main deck
|
||||
final FDeckChooser mainChooser = new FDeckChooser(isPlayerAI(playerIndex));
|
||||
@@ -461,15 +493,36 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
||||
// Planar deck list
|
||||
FPanel planarDeckPanel = new FPanel();
|
||||
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>();
|
||||
planarDeckList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||
|
||||
FScrollPane scrPlanes = new FScrollPane(planarDeckList, false,
|
||||
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);
|
||||
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) {
|
||||
@@ -490,8 +543,11 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
||||
}
|
||||
} else if (GameType.Planechase == forGameType) {
|
||||
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)
|
||||
@@ -544,6 +600,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
||||
});
|
||||
}
|
||||
populateDeckPanel(GameType.Constructed);
|
||||
populateVanguardLists();
|
||||
|
||||
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");
|
||||
@@ -722,8 +779,16 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
||||
variantType = GameType.Vanguard;
|
||||
if (arg0.getStateChange() == ItemEvent.SELECTED) {
|
||||
appliedVariants.add(variantType);
|
||||
for (int i = 0; i < 8; i++) {
|
||||
vgdSelectorBtns.get(i).setVisible(true);
|
||||
changePlayerFocus(playerWithFocus, variantType);
|
||||
}
|
||||
} else {
|
||||
appliedVariants.remove(variantType);
|
||||
for (int i = 0; i < 8; i++) {
|
||||
vgdSelectorBtns.get(i).setVisible(false);
|
||||
changePlayerFocus(playerWithFocus, GameType.Constructed);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (cb == vntCommander) {
|
||||
@@ -876,6 +941,22 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
||||
int radioID = playerTypeRadios.indexOf((FRadioButton)e.getSource());
|
||||
int radioOwnerID = (int) Math.floor(radioID / 2);
|
||||
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() {
|
||||
return appliedVariants;
|
||||
@@ -937,4 +1018,74 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
||||
public List<FList<Object>> getPlanarDeckLists() {
|
||||
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