- Moved Commander to Constructed match setup.

- Variants menu removed
This commit is contained in:
moomarc
2014-02-20 17:04:13 +00:00
parent 8edd870602
commit 3b571cb7ec
10 changed files with 187 additions and 50 deletions

View File

@@ -21,6 +21,7 @@ import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import forge.GameCommand; import forge.GameCommand;
import forge.card.CardCharacteristicName; import forge.card.CardCharacteristicName;
import forge.card.CardType; import forge.card.CardType;
@@ -1481,7 +1482,7 @@ public class GameAction {
p1.drawCards(p1.getMaxHandSize()); p1.drawCards(p1.getMaxHandSize());
} }
performMulligans(first, gameType == GameType.Commander); performMulligans(first, game.getRules().hasAppliedVariant(GameType.Commander));
if (game.isGameOver()) { break; } // conceded during "mulligan" prompt if (game.isGameOver()) { break; } // conceded during "mulligan" prompt
game.setAge(GameStage.Play); game.setAge(GameStage.Play);

View File

@@ -71,7 +71,7 @@ public class CostAddMana extends CostPart {
Card source = sa.getHostCard(); Card source = sa.getHostCard();
ColorSet cid = null; ColorSet cid = null;
if (ai.getGame().getRules().getGameType() == GameType.Commander) { if (ai.getGame().getRules().hasAppliedVariant(GameType.Commander)) {
cid = ai.getCommander().getRules().getColorIdentity(); cid = ai.getCommander().getRules().getColorIdentity();
} }
ArrayList<Mana> manaProduced = new ArrayList<Mana>(); ArrayList<Mana> manaProduced = new ArrayList<Mana>();

View File

@@ -21,6 +21,7 @@ import com.google.common.base.Function;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.card.mana.ManaCost; import forge.card.mana.ManaCost;
import forge.game.*; import forge.game.*;
@@ -2112,8 +2113,7 @@ public class Player extends GameEntity implements Comparable<Player> {
return this.loseConditionMet(GameLossReason.Poisoned, null); return this.loseConditionMet(GameLossReason.Poisoned, null);
} }
if(game.getRules().getGameType() == GameType.Commander) if (game.getRules().hasAppliedVariant(GameType.Commander)) {
{
Map<Card,Integer> cmdDmg = getCommanderDamage(); Map<Card,Integer> cmdDmg = getCommanderDamage();
for(Card c : cmdDmg.keySet()) for(Card c : cmdDmg.keySet())
{ {

View File

@@ -130,7 +130,7 @@ public class AbilityManaPart implements java.io.Serializable {
} }
ColorSet CID = null; ColorSet CID = null;
if (player.getGame().getRules().getGameType() == GameType.Commander) { if (player.getGame().getRules().hasAppliedVariant(GameType.Commander)) {
CID = player.getCommander().getRules().getColorIdentity(); CID = player.getCommander().getRules().getColorIdentity();
} }
//clear lastProduced //clear lastProduced

View File

@@ -1,11 +1,17 @@
package forge.gui.deckchooser; package forge.gui.deckchooser;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.Singletons; import forge.Singletons;
import forge.card.CardDb; import forge.card.CardDb;
import forge.card.CardRules;
import forge.card.CardRulesPredicates;
import forge.card.ColorSet;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSection;
import forge.deck.generation.*; import forge.deck.generation.*;
import forge.gui.toolbox.FOptionPane; import forge.gui.toolbox.FOptionPane;
import forge.gui.toolbox.itemmanager.DeckManager; import forge.gui.toolbox.itemmanager.DeckManager;
@@ -80,7 +86,6 @@ public class DeckgenUtil {
return deck; return deck;
} }
public static QuestEvent getQuestEvent(final String name) { public static QuestEvent getQuestEvent(final String name) {
QuestController qCtrl = Singletons.getModel().getQuest(); QuestController qCtrl = Singletons.getModel().getQuest();
for (QuestEventChallenge challenge : qCtrl.getChallenges()) { for (QuestEventChallenge challenge : qCtrl.getChallenges()) {
@@ -247,4 +252,44 @@ public class DeckgenUtil {
return res; return res;
} }
/** Generate a 2-color Commander deck. */
public static Deck generateCommanderDeck(boolean forAi) {
final Deck deck;
CardDb cardDb = Singletons.getMagicDb().getCommonCards();
PaperCard commander;
ColorSet colorID;
// Get random multicolor Legendary creature
Predicate<CardRules> canPlay = forAi ? DeckGeneratorBase.AI_CAN_PLAY : DeckGeneratorBase.HUMAN_CAN_PLAY;
Iterable<PaperCard> legends = cardDb.getAllCards(Predicates.compose(Predicates.and
(CardRulesPredicates.Presets.IS_CREATURE, CardRulesPredicates.Presets.IS_LEGENDARY), PaperCard.FN_GET_RULES));
legends = Iterables.filter(legends, Predicates.compose(Predicates.and
(CardRulesPredicates.Presets.IS_MULTICOLOR, canPlay), PaperCard.FN_GET_RULES));
do {
commander = Aggregates.random(legends);
colorID = commander.getRules().getColorIdentity();
} while (colorID.countColors() != 2);
List<String> comColors = new ArrayList<String>(2);
if (colorID.hasWhite()) { comColors.add("White"); }
if (colorID.hasBlue()) { comColors.add("Blue"); }
if (colorID.hasBlack()) { comColors.add("Black"); }
if (colorID.hasRed()) { comColors.add("Red"); }
if (colorID.hasGreen()) { comColors.add("Green"); }
DeckGeneratorBase gen = null;
gen = new DeckGenerator2Color(cardDb, comColors.get(0), comColors.get(1));
gen.setSingleton(true);
gen.setUseArtifacts(Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS));
CardPool cards = gen == null ? null : gen.getDeck(60, forAi);
// After generating card lists, build deck.
deck = new Deck("Generated Commander deck (" + commander.getName() + ")");
deck.getMain().addAll(cards);
deck.getOrCreate(DeckSection.Commander).add(commander);
return deck;
}
} }

View File

@@ -16,7 +16,6 @@ import forge.gui.home.settings.VSubmenuAvatars;
import forge.gui.home.settings.VSubmenuDownloaders; import forge.gui.home.settings.VSubmenuDownloaders;
import forge.gui.home.settings.VSubmenuPreferences; import forge.gui.home.settings.VSubmenuPreferences;
import forge.gui.home.settings.VSubmenuReleaseNotes; import forge.gui.home.settings.VSubmenuReleaseNotes;
import forge.gui.home.variant.VSubmenuCommander;
import forge.gui.match.views.*; import forge.gui.match.views.*;
import forge.gui.workshop.views.VCardDesigner; import forge.gui.workshop.views.VCardDesigner;
import forge.gui.workshop.views.VCardScript; import forge.gui.workshop.views.VCardScript;
@@ -53,7 +52,6 @@ public enum EDocID { /** */
HOME_GAUNTLETLOAD (VSubmenuGauntletLoad.SINGLETON_INSTANCE), /** */ HOME_GAUNTLETLOAD (VSubmenuGauntletLoad.SINGLETON_INSTANCE), /** */
HOME_GAUNTLETQUICK (VSubmenuGauntletQuick.SINGLETON_INSTANCE), /** */ HOME_GAUNTLETQUICK (VSubmenuGauntletQuick.SINGLETON_INSTANCE), /** */
HOME_GAUNTLETCONTESTS (VSubmenuGauntletContests.SINGLETON_INSTANCE), /** */ HOME_GAUNTLETCONTESTS (VSubmenuGauntletContests.SINGLETON_INSTANCE), /** */
HOME_COMMANDER (VSubmenuCommander.SINGLETON_INSTANCE), /** */
HOME_PREFERENCES (VSubmenuPreferences.SINGLETON_INSTANCE), /** */ HOME_PREFERENCES (VSubmenuPreferences.SINGLETON_INSTANCE), /** */
HOME_AVATARS (VSubmenuAvatars.SINGLETON_INSTANCE), /** */ HOME_AVATARS (VSubmenuAvatars.SINGLETON_INSTANCE), /** */
HOME_UTILITIES (VSubmenuDownloaders.SINGLETON_INSTANCE), /** */ HOME_UTILITIES (VSubmenuDownloaders.SINGLETON_INSTANCE), /** */

View File

@@ -11,7 +11,6 @@ public enum EMenuGroup { /** */
SANCTIONED ("Sanctioned Formats"), /** */ SANCTIONED ("Sanctioned Formats"), /** */
QUEST ("Quest Mode"), /** */ QUEST ("Quest Mode"), /** */
GAUNTLET ("Gauntlets"), /** */ GAUNTLET ("Gauntlets"), /** */
VARIANT ("Variant"), /** */
SETTINGS ("Game Settings"); SETTINGS ("Game Settings");
private final String strTitle; private final String strTitle;

View File

@@ -31,7 +31,6 @@ import forge.gui.home.settings.VSubmenuAvatars;
import forge.gui.home.settings.VSubmenuDownloaders; import forge.gui.home.settings.VSubmenuDownloaders;
import forge.gui.home.settings.VSubmenuPreferences; import forge.gui.home.settings.VSubmenuPreferences;
import forge.gui.home.settings.VSubmenuReleaseNotes; import forge.gui.home.settings.VSubmenuReleaseNotes;
import forge.gui.home.variant.VSubmenuCommander;
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;
@@ -130,8 +129,6 @@ public enum VHomeUI implements IVTopLevelUI {
allSubmenus.add(VSubmenuDownloaders.SINGLETON_INSTANCE); allSubmenus.add(VSubmenuDownloaders.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuReleaseNotes.SINGLETON_INSTANCE); allSubmenus.add(VSubmenuReleaseNotes.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuCommander.SINGLETON_INSTANCE);
// For each group: init its panel // For each group: init its panel
final SortedMap<EMenuGroup, JPanel> allGroupPanels = new TreeMap<EMenuGroup, JPanel>(); final SortedMap<EMenuGroup, JPanel> allGroupPanels = new TreeMap<EMenuGroup, JPanel>();
for (final EMenuGroup e : EMenuGroup.values()) { for (final EMenuGroup e : EMenuGroup.values()) {

View File

@@ -1,7 +1,5 @@
package forge.gui.home.sanctioned; package forge.gui.home.sanctioned;
import com.google.common.collect.Iterables;
import forge.UiCommand; import forge.UiCommand;
import forge.Singletons; import forge.Singletons;
import forge.deck.CardPool; import forge.deck.CardPool;
@@ -62,11 +60,32 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
@Override public void run() { @Override public void run() {
final CardCollections cColl = Singletons.getModel().getDecks(); final CardCollections cColl = Singletons.getModel().getDecks();
FList<Object> deckList; FList<Object> deckList;
Vector<Object> listData;
Object val;
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
// Commander: reinit deck list and restore last selections (if any)
deckList = view.getCommanderDeckLists().get(i);
listData = new Vector<Object>();
listData.add("Generate");
if (cColl.getCommander().size() > 0) {
listData.add("Random");
for (Deck comDeck : cColl.getCommander()) {
listData.add(comDeck);
}
}
val = deckList.getSelectedValue();
deckList.setListData(listData);
if (null != val) {
deckList.setSelectedValue(val, true);
}
if (-1 == deckList.getSelectedIndex()) {
deckList.setSelectedIndex(0);
} // End Commander
// Archenemy: reinit deck list and restore last selections (if any) // Archenemy: reinit deck list and restore last selections (if any)
deckList = view.getSchemeDeckLists().get(i); deckList = view.getSchemeDeckLists().get(i);
Vector<Object> listData = new Vector<Object>(); listData = new Vector<Object>();
listData.add("Use deck's scheme section (random if unavailable)"); listData.add("Use deck's scheme section (random if unavailable)");
listData.add("Generate"); listData.add("Generate");
if (cColl.getScheme().size() > 0) { if (cColl.getScheme().size() > 0) {
@@ -75,7 +94,7 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
listData.add(schemeDeck); listData.add(schemeDeck);
} }
} }
Object val = deckList.getSelectedValue(); val = deckList.getSelectedValue();
deckList.setListData(listData); deckList.setListData(listData);
if (null != val) { if (null != val) {
deckList.setSelectedValue(val, true); deckList.setSelectedValue(val, true);
@@ -166,12 +185,6 @@ 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.Commander)) {
FOptionPane.showMessageDialog("Commander matches cannot currently be started via the "
+ "Constructed match setup screen. Please this variant then restart the match");
return;
}
if (!view.isEnoughTeams()) { if (!view.isEnoughTeams()) {
FOptionPane.showMessageDialog("There are not enough teams! Please adjust team allocations."); FOptionPane.showMessageDialog("There are not enough teams! Please adjust team allocations.");
return; return;
@@ -185,7 +198,7 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
} // Is it even possible anymore? I think current implementation assigns decks automatically. } // Is it even possible anymore? I think current implementation assigns decks automatically.
boolean checkLegality = Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY); boolean checkLegality = Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY);
if (checkLegality) { if (checkLegality && !variantTypes.contains(GameType.Commander)) { //Commander deck replaces regular deck and is checked later
for (final int i : view.getParticipants()) { for (final int i : view.getParticipants()) {
String name = view.getPlayerName(i); String name = view.getPlayerName(i);
String errMsg = GameType.Constructed.getDecksFormat().getDeckConformanceProblem(view.getDeckChooser(i).getPlayer().getDeck()); String errMsg = GameType.Constructed.getDecksFormat().getDeckConformanceProblem(view.getDeckChooser(i).getPlayer().getDeck());
@@ -201,20 +214,44 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
for (final int i : view.getParticipants()) { for (final int i : view.getParticipants()) {
String name = view.getPlayerName(i); String name = view.getPlayerName(i);
LobbyPlayer lobbyPlayer = view.isPlayerAI(i) ? lobby.getAiPlayer(name, LobbyPlayer lobbyPlayer = view.isPlayerAI(i) ? lobby.getAiPlayer(name,
view.getPlayerAvatar(i)) : lobby.getGuiPlayer(); view.getPlayerAvatar(i)) : lobby.getGuiPlayer();
RegisteredPlayer rp = view.getDeckChooser(i).getPlayer(); RegisteredPlayer rp = view.getDeckChooser(i).getPlayer();
if (variantTypes.isEmpty()) { if (variantTypes.isEmpty()) {
rp.setTeamNumber(view.getTeam(i)); rp.setTeamNumber(view.getTeam(i));
players.add(rp.setPlayer(lobbyPlayer)); players.add(rp.setPlayer(lobbyPlayer));
} else { } else {
// Initialise Variant variables Deck deck = null;
Deck deck = rp.getDeck(); boolean isCommanderMatch = variantTypes.contains(GameType.Commander);
if (isCommanderMatch) {
Object selected = view.getCommanderDeckLists().get(i).getSelectedValue();
if (selected instanceof String) {
String sel = (String) selected;
IStorage<Deck> comDecks = Singletons.getModel().getDecks().getCommander();
if (sel.equals("Random") && comDecks.size() > 0) {
deck = Aggregates.random(comDecks);
}
} else {
deck = (Deck) selected;
}
if (deck == null) { //Can be null if player deselects the list selection or chose Generate
deck = DeckgenUtil.generateCommanderDeck(view.isPlayerAI(i));
}
if (checkLegality) {
String errMsg = GameType.Commander.getDecksFormat().getDeckConformanceProblem(deck);
if (null != errMsg) {
FOptionPane.showErrorDialog(name + "'s deck " + errMsg, "Invalid Commander Deck");
return;
}
}
}
// Initialise variables for other variants
deck = deck == null ? rp.getDeck() : deck;
Iterable<PaperCard> schemes = null; Iterable<PaperCard> schemes = null;
boolean playerIsArchenemy = view.isPlayerArchenemy(i); boolean playerIsArchenemy = view.isPlayerArchenemy(i);
Iterable<PaperCard> planes = null; Iterable<PaperCard> planes = null;
PaperCard vanguardAvatar = null; PaperCard vanguardAvatar = null;
Random randomSeed = new Random();
//Archenemy //Archenemy
if (variantTypes.contains(GameType.ArchenemyRumble) if (variantTypes.contains(GameType.ArchenemyRumble)
@@ -292,9 +329,9 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
vanguardAvatar = deck.get(DeckSection.Avatar).get(0); vanguardAvatar = deck.get(DeckSection.Avatar).get(0);
} else { //Only other string is "Random" } else { //Only other string is "Random"
if (!view.isPlayerAI(i)) { //Human if (!view.isPlayerAI(i)) { //Human
vanguardAvatar = Iterables.get(view.getAllAvatars(), randomSeed.nextInt(Iterables.size(view.getNonRandomHumanAvatars()))); vanguardAvatar = Aggregates.random(view.getNonRandomHumanAvatars());
} else { //AI } else { //AI
vanguardAvatar = Iterables.get(view.getAllAiAvatars(), randomSeed.nextInt(Iterables.size(view.getNonRandomAiAvatars()))); vanguardAvatar = Aggregates.random(view.getNonRandomAiAvatars());
} }
} }
} else { } else {
@@ -307,7 +344,7 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
} }
} }
rp = RegisteredPlayer.forVariants(variantTypes, rp.getDeck(), schemes, playerIsArchenemy, planes, vanguardAvatar); rp = RegisteredPlayer.forVariants(variantTypes, deck, schemes, playerIsArchenemy, planes, vanguardAvatar);
rp.setTeamNumber(view.getTeam(i)); rp.setTeamNumber(view.getTeam(i));
players.add(rp.setPlayer(lobbyPlayer)); players.add(rp.setPlayer(lobbyPlayer));
} }

View File

@@ -15,6 +15,7 @@ import forge.gui.deckchooser.FDeckChooser;
import forge.gui.deckchooser.IDecksComboBoxListener; import forge.gui.deckchooser.IDecksComboBoxListener;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.DeckProxy; import forge.gui.deckeditor.DeckProxy;
import forge.gui.deckeditor.controllers.CEditorCommander;
import forge.gui.deckeditor.controllers.CEditorVariant; import forge.gui.deckeditor.controllers.CEditorVariant;
import forge.gui.framework.DragCell; import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab; import forge.gui.framework.DragTab;
@@ -103,6 +104,9 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
private final List<FPanel> schemeDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS); private final List<FPanel> schemeDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS);
private int lastArchenemy = 0; private int lastArchenemy = 0;
private final List<FList<Object>> commanderDeckLists = new ArrayList<FList<Object>>();
private final List<FPanel> commanderDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS);
private final List<FList<Object>> planarDeckLists = new ArrayList<FList<Object>>(); private final List<FList<Object>> planarDeckLists = new ArrayList<FList<Object>>();
private final List<FPanel> planarDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS); private final List<FPanel> planarDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS);
@@ -126,7 +130,6 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
// Populate and add variants panel // Populate and add variants panel
vntVanguard.addItemListener(iListenerVariants); vntVanguard.addItemListener(iListenerVariants);
vntCommander.addItemListener(iListenerVariants); vntCommander.addItemListener(iListenerVariants);
vntCommander.setEnabled(false);
vntPlanechase.addItemListener(iListenerVariants); vntPlanechase.addItemListener(iListenerVariants);
vntArchenemy.addItemListener(iListenerVariants); vntArchenemy.addItemListener(iListenerVariants);
comboArchenemy.setSelectedIndex(0); comboArchenemy.setSelectedIndex(0);
@@ -277,6 +280,20 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
schemeDeckLists.add(schemeDeckList); schemeDeckLists.add(schemeDeckList);
schemeDeckPanels.add(schemeDeckPanel); schemeDeckPanels.add(schemeDeckPanel);
// Commander deck list
FPanel commanderDeckPanel = new FPanel();
commanderDeckPanel.setBorderToggle(false);
commanderDeckPanel.setLayout(new MigLayout(sectionConstraints));
commanderDeckPanel.add(new FLabel.Builder().text("Select Commander deck:").build(), labelConstraints);
FList<Object> commanderDeckList = new FList<Object>();
commanderDeckList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
FScrollPane scrCommander = new FScrollPane(commanderDeckList, true,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
commanderDeckPanel.add(scrCommander, "grow, push");
commanderDeckLists.add(commanderDeckList);
commanderDeckPanels.add(commanderDeckPanel);
// Planar deck list // Planar deck list
FPanel planarDeckPanel = new FPanel(); FPanel planarDeckPanel = new FPanel();
planarDeckPanel.setBorderToggle(false); planarDeckPanel.setBorderToggle(false);
@@ -338,6 +355,9 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
populateDeckPanel(GameType.Constructed); populateDeckPanel(GameType.Constructed);
} }
} }
else if (GameType.Commander == forGameType) {
decksFrame.add(commanderDeckPanels.get(playerWithFocus), "grow, push");
}
else if (GameType.Planechase == forGameType) { else if (GameType.Planechase == forGameType) {
decksFrame.add(planarDeckPanels.get(playerWithFocus), "grow, push"); decksFrame.add(planarDeckPanels.get(playerWithFocus), "grow, push");
} }
@@ -465,6 +485,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
private FComboBoxWrapper<Object> aeTeamComboBox = new FComboBoxWrapper<Object>(); private FComboBoxWrapper<Object> aeTeamComboBox = new FComboBoxWrapper<Object>();
private final FLabel deckBtn = new FLabel.ButtonBuilder().text("Select a deck").build(); private final FLabel deckBtn = new FLabel.ButtonBuilder().text("Select a deck").build();
private final FLabel deckLabel = newLabel("Deck:");
private final String variantBtnConstraints = "height 30px, hidemode 3"; private final String variantBtnConstraints = "height 30px, hidemode 3";
@@ -473,6 +494,10 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
private final FLabel scmDeckEditor = new FLabel.ButtonBuilder().text("Scheme Deck Editor").build(); private final FLabel scmDeckEditor = new FLabel.ButtonBuilder().text("Scheme Deck Editor").build();
private final FLabel scmLabel = newLabel("Scheme deck:"); private final FLabel scmLabel = newLabel("Scheme deck:");
private final FLabel cmdDeckSelectorBtn = new FLabel.ButtonBuilder().text("Select a Commander deck").build();
private final FLabel cmdDeckEditor = new FLabel.ButtonBuilder().text("Commander Deck Editor").build();
private final FLabel cmdLabel = newLabel("Commander deck:");
private final FLabel pchDeckSelectorBtn = new FLabel.ButtonBuilder().text("Select a planar deck").build(); private final FLabel pchDeckSelectorBtn = new FLabel.ButtonBuilder().text("Select a planar deck").build();
private final FLabel pchDeckEditor = new FLabel.ButtonBuilder().text("Planar Deck Editor").build(); private final FLabel pchDeckEditor = new FLabel.ButtonBuilder().text("Planar Deck Editor").build();
private final FLabel pchLabel = newLabel("Planar deck:"); private final FLabel pchLabel = newLabel("Planar deck:");
@@ -511,24 +536,28 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
populateTeamsComboBoxes(); populateTeamsComboBoxes();
teamComboBox.addActionListener(teamListener); teamComboBox.addActionListener(teamListener);
aeTeamComboBox.addActionListener(teamListener); aeTeamComboBox.addActionListener(teamListener);
teamComboBox.addTo(this, "h 30px, pushx, growx, gaptop 5px, hidemode 3"); teamComboBox.addTo(this, variantBtnConstraints + ", pushx, growx, gaptop 5px");
aeTeamComboBox.addTo(this, "h 30px, pushx, growx, gaptop 5px, hidemode 3"); aeTeamComboBox.addTo(this, variantBtnConstraints + ", pushx, growx, gaptop 5px");
this.add(newLabel("Deck:"), variantBtnConstraints + ", cell 0 2, sx 2, ax right"); this.add(deckLabel, variantBtnConstraints + ", cell 0 2, sx 2, ax right");
this.add(deckBtn, variantBtnConstraints + ", cell 2 2, pushx, growx, wmax 100%-153px, h 30px, spanx 4, wrap"); this.add(deckBtn, variantBtnConstraints + ", cell 2 2, pushx, growx, wmax 100%-153px, h 30px, spanx 4, wrap");
addHandlersDeckSelector(); addHandlersDeckSelector();
this.add(scmLabel, variantBtnConstraints + ", cell 0 3, sx 2, ax right"); this.add(cmdLabel, variantBtnConstraints + ", cell 0 3, sx 2, ax right");
this.add(scmDeckSelectorBtn, variantBtnConstraints + ", cell 2 3, growx, pushx"); this.add(cmdDeckSelectorBtn, variantBtnConstraints + ", cell 2 3, growx, pushx");
this.add(scmDeckEditor, variantBtnConstraints + ", cell 3 3, sx 3, growx, wrap"); this.add(cmdDeckEditor, variantBtnConstraints + ", cell 3 3, sx 3, growx, wrap");
this.add(pchLabel, variantBtnConstraints + ", cell 0 4, sx 2, ax right"); this.add(scmLabel, variantBtnConstraints + ", cell 0 4, sx 2, ax right");
this.add(pchDeckSelectorBtn, variantBtnConstraints + ", cell 2 4, growx, pushx"); this.add(scmDeckSelectorBtn, variantBtnConstraints + ", cell 2 4, growx, pushx");
this.add(pchDeckEditor, variantBtnConstraints + ", cell 3 4, sx 3, growx, wrap"); this.add(scmDeckEditor, variantBtnConstraints + ", cell 3 4, sx 3, growx, wrap");
this.add(vgdLabel, variantBtnConstraints + ", cell 0 5, sx 2, ax right"); this.add(pchLabel, variantBtnConstraints + ", cell 0 5, sx 2, ax right");
this.add(vgdSelectorBtn, variantBtnConstraints + ", cell 2 5, sx 4, growx, wrap"); this.add(pchDeckSelectorBtn, variantBtnConstraints + ", cell 2 5, growx, pushx");
this.add(pchDeckEditor, variantBtnConstraints + ", cell 3 5, sx 3, growx, wrap");
this.add(vgdLabel, variantBtnConstraints + ", cell 0 6, sx 2, ax right");
this.add(vgdSelectorBtn, variantBtnConstraints + ", cell 2 6, sx 4, growx, wrap");
addHandlersToVariantsControls(); addHandlersToVariantsControls();
updateVariantControlsVisibility(); updateVariantControlsVisibility();
@@ -613,7 +642,14 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
}; };
public void updateVariantControlsVisibility() { public void updateVariantControlsVisibility() {
boolean archenemyVisiblity = appliedVariants.contains(GameType.ArchenemyRumble) // Commander deck replaces basic deck, so hide that
deckLabel.setVisible(!appliedVariants.contains(GameType.Commander));
deckBtn.setVisible(!appliedVariants.contains(GameType.Commander));
cmdDeckSelectorBtn.setVisible(appliedVariants.contains(GameType.Commander));
cmdDeckEditor.setVisible(appliedVariants.contains(GameType.Commander));
cmdLabel.setVisible(appliedVariants.contains(GameType.Commander));
boolean archenemyVisiblity = appliedVariants.contains(GameType.ArchenemyRumble)
|| (appliedVariants.contains(GameType.Archenemy) && playerIsArchenemy); || (appliedVariants.contains(GameType.Archenemy) && playerIsArchenemy);
scmDeckSelectorBtn.setVisible(archenemyVisiblity); scmDeckSelectorBtn.setVisible(archenemyVisiblity);
scmDeckEditor.setVisible(archenemyVisiblity); scmDeckEditor.setVisible(archenemyVisiblity);
@@ -736,7 +772,26 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_ARCHENEMY); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_ARCHENEMY);
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController( CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(
new CEditorVariant(Singletons.getModel().getDecks().getScheme(), predSchemes, DeckSection.Schemes, FScreen.DECK_EDITOR_PLANECHASE)); new CEditorVariant(Singletons.getModel().getDecks().getScheme(), predSchemes, DeckSection.Schemes, FScreen.DECK_EDITOR_PLANECHASE));
}
});
// Commander buttons
cmdDeckSelectorBtn.setCommand(new Runnable() {
@Override
public void run() {
currentGameMode = GameType.Commander;
cmdDeckSelectorBtn.requestFocusInWindow();
changePlayerFocus(index, currentGameMode);
}
});
cmdDeckEditor.setCommand(new UiCommand() {
@Override
public void run() {
currentGameMode = GameType.Commander;
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_COMMANDER);
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander());
} }
}); });
@@ -1203,7 +1258,12 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
return planarDeckLists; return planarDeckLists;
} }
/** Gets the list of planar deck lists. */ /** Gets the list of commander deck lists. */
public List<FList<Object>> getCommanderDeckLists() {
return commanderDeckLists;
}
/** Gets the list of scheme deck lists. */
public List<FList<Object>> getSchemeDeckLists() { public List<FList<Object>> getSchemeDeckLists() {
return schemeDeckLists; return schemeDeckLists;
} }