mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
Support opening Deck Editor from home screen directly
Cleanup logic that builds deck lists
This commit is contained in:
@@ -17,6 +17,7 @@ public enum GameType {
|
||||
QuestDraft (DeckFormat.Limited, true, true, true, "Quest Draft", ""),
|
||||
PlanarConquest (DeckFormat.PlanarConquest, true, false, false, "Planar Conquest", ""),
|
||||
Constructed (DeckFormat.Constructed, false, true, true, "Constructed", ""),
|
||||
DeckEditor (DeckFormat.Constructed, false, true, true, "Deck Editor", ""),
|
||||
Vanguard (DeckFormat.Vanguard, true, true, true, "Vanguard", "Each player has a special \"Avatar\" card that affects the game."),
|
||||
Commander (DeckFormat.Commander, false, false, false, "Commander", "Each player has a legendary \"General\" card which can be cast at any time and determines deck colors."),
|
||||
TinyLeaders (DeckFormat.TinyLeaders, false, false, false, "Tiny Leaders", "Each player has a legendary \"General\" card which can be cast at any time and determines deck colors. Each card must have CMC less than 4."),
|
||||
|
||||
@@ -131,14 +131,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
private void updateColors() {
|
||||
lstDecks.setAllowMultipleSelections(true);
|
||||
|
||||
String[] colors = new String[] { "Random 1", "Random 2", "Random 3",
|
||||
"White", "Blue", "Black", "Red", "Green" };
|
||||
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
for (int i = 0; i < colors.length; i++) {
|
||||
decks.add(new ColorDeckGenerator(colors[i], i, lstDecks, isAi));
|
||||
}
|
||||
|
||||
lstDecks.setPool(decks);
|
||||
lstDecks.setPool(ColorDeckGenerator.getColorDecks(lstDecks, isAi));
|
||||
lstDecks.setup(ItemManagerConfig.STRING_ONLY);
|
||||
|
||||
btnRandom.setText("Random Colors");
|
||||
|
||||
@@ -5,6 +5,7 @@ import forge.Forge;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.FDeckEditor.EditorType;
|
||||
import forge.deck.io.DeckPreferences;
|
||||
import forge.error.BugReporter;
|
||||
import forge.game.GameType;
|
||||
import forge.game.player.RegisteredPlayer;
|
||||
import forge.itemmanager.DeckManager;
|
||||
@@ -79,6 +80,11 @@ public class FDeckChooser extends FScreen {
|
||||
lstDecks.setItemActivateHandler(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
if (lstDecks.getGameType() == GameType.DeckEditor) {
|
||||
//for Deck Editor, edit deck instead of accepting
|
||||
editSelectedDeck();
|
||||
return;
|
||||
}
|
||||
accept();
|
||||
}
|
||||
});
|
||||
@@ -149,11 +155,29 @@ public class FDeckChooser extends FScreen {
|
||||
}
|
||||
}
|
||||
});
|
||||
btnRandom.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
if (lstDecks.getGameType() == GameType.DeckEditor) {
|
||||
//for Deck Editor, play deck instead of randomly selecting deck
|
||||
editSelectedDeck();
|
||||
return;
|
||||
}
|
||||
if (selectedDeckType == DeckType.COLOR_DECK) {
|
||||
DeckgenUtil.randomSelectColors(lstDecks);
|
||||
}
|
||||
else {
|
||||
DeckgenUtil.randomSelect(lstDecks);
|
||||
}
|
||||
accept();
|
||||
}
|
||||
});
|
||||
switch (lstDecks.getGameType()) {
|
||||
case Constructed:
|
||||
break; //delay initialize for constructed until saved decks can be reloaded
|
||||
case Commander:
|
||||
case Gauntlet:
|
||||
case DeckEditor:
|
||||
initialize(null, DeckType.CUSTOM_DECK);
|
||||
break;
|
||||
default:
|
||||
@@ -174,7 +198,7 @@ public class FDeckChooser extends FScreen {
|
||||
public void onActivate() {
|
||||
if (needRefreshOnActivate) {
|
||||
needRefreshOnActivate = false;
|
||||
updateCustom();
|
||||
refreshDecksList(DeckType.CUSTOM_DECK, true, null);
|
||||
switch (lstDecks.getGameType()) {
|
||||
case Commander:
|
||||
lstDecks.setSelectedString(DeckPreferences.getCommanderDeck());
|
||||
@@ -271,6 +295,12 @@ public class FDeckChooser extends FScreen {
|
||||
cmbDeckTypes.addItem(DeckType.RANDOM_DECK);
|
||||
cmbDeckTypes.addItem(DeckType.NET_DECK);
|
||||
break;
|
||||
case DeckEditor:
|
||||
cmbDeckTypes.addItem(DeckType.CUSTOM_DECK);
|
||||
cmbDeckTypes.addItem(DeckType.PRECONSTRUCTED_DECK);
|
||||
cmbDeckTypes.addItem(DeckType.QUEST_OPPONENT_DECK);
|
||||
cmbDeckTypes.addItem(DeckType.NET_DECK);
|
||||
break;
|
||||
default:
|
||||
cmbDeckTypes.addItem(DeckType.CUSTOM_DECK);
|
||||
cmbDeckTypes.addItem(DeckType.RANDOM_DECK);
|
||||
@@ -321,6 +351,129 @@ public class FDeckChooser extends FScreen {
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshDecksList(DeckType deckType, boolean forceRefresh, FEvent e) {
|
||||
if (selectedDeckType == deckType && !forceRefresh) { return; }
|
||||
selectedDeckType = deckType;
|
||||
|
||||
if (e == null) {
|
||||
refreshingDeckType = true;
|
||||
cmbDeckTypes.setSelectedItem(deckType);
|
||||
refreshingDeckType = false;
|
||||
}
|
||||
if (deckType == null) { return; }
|
||||
|
||||
int maxSelections = 1;
|
||||
Iterable<DeckProxy> pool;
|
||||
ItemManagerConfig config;
|
||||
|
||||
switch (deckType) {
|
||||
case CUSTOM_DECK:
|
||||
switch (lstDecks.getGameType()) {
|
||||
case Commander:
|
||||
pool = DeckProxy.getAllCommanderDecks();
|
||||
config = ItemManagerConfig.COMMANDER_DECKS;
|
||||
break;
|
||||
case Archenemy:
|
||||
pool = DeckProxy.getAllSchemeDecks();
|
||||
config = ItemManagerConfig.SCHEME_DECKS;
|
||||
break;
|
||||
case Planechase:
|
||||
pool = DeckProxy.getAllPlanarDecks();
|
||||
config = ItemManagerConfig.PLANAR_DECKS;
|
||||
break;
|
||||
default:
|
||||
pool = DeckProxy.getAllConstructedDecks();
|
||||
config = ItemManagerConfig.CONSTRUCTED_DECKS;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case COLOR_DECK:
|
||||
maxSelections = 3;
|
||||
pool = ColorDeckGenerator.getColorDecks(lstDecks, isAi);
|
||||
config = ItemManagerConfig.STRING_ONLY;
|
||||
break;
|
||||
case THEME_DECK:
|
||||
pool = DeckProxy.getAllThemeDecks();
|
||||
config = ItemManagerConfig.STRING_ONLY;
|
||||
break;
|
||||
case QUEST_OPPONENT_DECK:
|
||||
pool = DeckProxy.getAllQuestEventAndChallenges();
|
||||
config = ItemManagerConfig.QUEST_EVENT_DECKS;
|
||||
break;
|
||||
case PRECONSTRUCTED_DECK:
|
||||
pool = DeckProxy.getAllPreconstructedDecks(QuestController.getPrecons());
|
||||
config = ItemManagerConfig.PRECON_DECKS;
|
||||
break;
|
||||
case RANDOM_DECK:
|
||||
pool = RandomDeckGenerator.getRandomDecks(lstDecks, isAi);
|
||||
config = ItemManagerConfig.STRING_ONLY;
|
||||
break;
|
||||
case NET_DECK:
|
||||
if (netDeckCategory != null) {
|
||||
cmbDeckTypes.setText(netDeckCategory.getDeckType());
|
||||
}
|
||||
pool = DeckProxy.getNetDecks(netDeckCategory);
|
||||
config = ItemManagerConfig.NET_DECKS;
|
||||
break;
|
||||
default:
|
||||
BugReporter.reportBug("Unsupported deck type: " + deckType);
|
||||
return;
|
||||
}
|
||||
|
||||
lstDecks.setSelectionSupport(1, maxSelections);
|
||||
lstDecks.setPool(pool);
|
||||
lstDecks.setup(config);
|
||||
|
||||
if (config == ItemManagerConfig.STRING_ONLY) {
|
||||
//hide edit/view buttons for string-only lists
|
||||
btnNewDeck.setWidth(getWidth() - 2 * PADDING);
|
||||
btnEditDeck.setVisible(false);
|
||||
btnViewDeck.setVisible(false);
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
|
||||
btnNewDeck.setText("Generate New Deck");
|
||||
switch (deckType) {
|
||||
case COLOR_DECK:
|
||||
btnRandom.setText("Random Colors");
|
||||
break;
|
||||
case THEME_DECK:
|
||||
btnRandom.setText("Random Theme");
|
||||
break;
|
||||
default:
|
||||
btnRandom.setText("Random Deck");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
btnNewDeck.setWidth(btnEditDeck.getWidth());
|
||||
btnEditDeck.setVisible(true);
|
||||
btnViewDeck.setVisible(true);
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
|
||||
btnNewDeck.setText("New Deck");
|
||||
|
||||
if (lstDecks.getGameType() == GameType.DeckEditor) {
|
||||
//handle special case of Deck Editor screen where this button will start a game with the deck
|
||||
btnRandom.setText("Test Deck");
|
||||
}
|
||||
else {
|
||||
btnRandom.setText("Random Deck");
|
||||
}
|
||||
}
|
||||
|
||||
btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth());
|
||||
|
||||
if (e != null) { //set default list selection if from combo box change event
|
||||
if (deckType == DeckType.COLOR_DECK) {
|
||||
// default selection = basic two color deck
|
||||
lstDecks.setSelectedIndices(new Integer[]{0, 1});
|
||||
}
|
||||
else {
|
||||
lstDecks.setSelectedIndex(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLayout(float startY, float width, float height) {
|
||||
float x = PADDING;
|
||||
@@ -362,193 +515,6 @@ public class FDeckChooser extends FScreen {
|
||||
|
||||
public DeckManager getLstDecks() { return lstDecks; }
|
||||
|
||||
private void updateCustom() {
|
||||
lstDecks.setSelectionSupport(1, 1);
|
||||
|
||||
switch (lstDecks.getGameType()) {
|
||||
case Commander:
|
||||
lstDecks.setPool(DeckProxy.getAllCommanderDecks());
|
||||
lstDecks.setup(ItemManagerConfig.COMMANDER_DECKS);
|
||||
break;
|
||||
case Archenemy:
|
||||
lstDecks.setPool(DeckProxy.getAllSchemeDecks());
|
||||
lstDecks.setup(ItemManagerConfig.SCHEME_DECKS);
|
||||
break;
|
||||
case Planechase:
|
||||
lstDecks.setPool(DeckProxy.getAllPlanarDecks());
|
||||
lstDecks.setup(ItemManagerConfig.PLANAR_DECKS);
|
||||
break;
|
||||
default:
|
||||
lstDecks.setPool(DeckProxy.getAllConstructedDecks());
|
||||
lstDecks.setup(ItemManagerConfig.CONSTRUCTED_DECKS);
|
||||
break;
|
||||
}
|
||||
|
||||
btnNewDeck.setText("New Deck");
|
||||
btnNewDeck.setWidth(btnEditDeck.getWidth());
|
||||
btnEditDeck.setVisible(true);
|
||||
|
||||
btnViewDeck.setVisible(true);
|
||||
btnRandom.setText("Random Deck");
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth());
|
||||
btnRandom.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
DeckgenUtil.randomSelect(lstDecks);
|
||||
accept();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateColors() {
|
||||
lstDecks.setSelectionSupport(1, 3); //TODO: Consider supporting more than 3 color random decks
|
||||
|
||||
String[] colors = new String[] { "Random 1", "Random 2", "Random 3",
|
||||
"White", "Blue", "Black", "Red", "Green" };
|
||||
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
for (int i = 0; i < colors.length; i++) {
|
||||
decks.add(new ColorDeckGenerator(colors[i], i, lstDecks, isAi));
|
||||
}
|
||||
|
||||
lstDecks.setPool(decks);
|
||||
lstDecks.setup(ItemManagerConfig.STRING_ONLY);
|
||||
|
||||
btnNewDeck.setText("Generate New Deck");
|
||||
btnNewDeck.setWidth(getWidth() - 2 * PADDING);
|
||||
btnEditDeck.setVisible(false);
|
||||
|
||||
btnViewDeck.setVisible(false);
|
||||
btnRandom.setText("Random Colors");
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth());
|
||||
btnRandom.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
DeckgenUtil.randomSelectColors(lstDecks);
|
||||
accept();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateThemes() {
|
||||
lstDecks.setSelectionSupport(1, 1);
|
||||
|
||||
lstDecks.setPool(DeckProxy.getAllThemeDecks());
|
||||
lstDecks.setup(ItemManagerConfig.STRING_ONLY);
|
||||
|
||||
btnNewDeck.setText("Generate New Deck");
|
||||
btnNewDeck.setWidth(getWidth() - 2 * PADDING);
|
||||
btnEditDeck.setVisible(false);
|
||||
|
||||
btnViewDeck.setVisible(false);
|
||||
btnRandom.setText("Random Theme");
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth());
|
||||
btnRandom.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
DeckgenUtil.randomSelect(lstDecks);
|
||||
accept();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateRandom() {
|
||||
lstDecks.setSelectionSupport(1, 1);
|
||||
|
||||
lstDecks.setPool(RandomDeckGenerator.getRandomDecks(lstDecks, isAi));
|
||||
lstDecks.setup(ItemManagerConfig.STRING_ONLY);
|
||||
|
||||
btnNewDeck.setText("Generate New Deck");
|
||||
btnNewDeck.setWidth(getWidth() - 2 * PADDING);
|
||||
btnEditDeck.setVisible(false);
|
||||
|
||||
btnViewDeck.setVisible(false);
|
||||
btnRandom.setText("Random Deck");
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth());
|
||||
btnRandom.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
DeckgenUtil.randomSelect(lstDecks);
|
||||
accept();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updatePrecons() {
|
||||
lstDecks.setSelectionSupport(1, 1);
|
||||
|
||||
lstDecks.setPool(DeckProxy.getAllPreconstructedDecks(QuestController.getPrecons()));
|
||||
lstDecks.setup(ItemManagerConfig.PRECON_DECKS);
|
||||
|
||||
btnNewDeck.setText("New Deck");
|
||||
btnNewDeck.setWidth(btnEditDeck.getWidth());
|
||||
btnEditDeck.setVisible(true);
|
||||
|
||||
btnViewDeck.setVisible(true);
|
||||
btnRandom.setText("Random Deck");
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth());
|
||||
btnRandom.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
DeckgenUtil.randomSelect(lstDecks);
|
||||
accept();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateQuestEvents() {
|
||||
lstDecks.setSelectionSupport(1, 1);
|
||||
|
||||
lstDecks.setPool(DeckProxy.getAllQuestEventAndChallenges());
|
||||
lstDecks.setup(ItemManagerConfig.QUEST_EVENT_DECKS);
|
||||
|
||||
btnNewDeck.setText("New Deck");
|
||||
btnNewDeck.setWidth(btnEditDeck.getWidth());
|
||||
btnEditDeck.setVisible(true);
|
||||
|
||||
btnViewDeck.setVisible(true);
|
||||
btnRandom.setText("Random Deck");
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth());
|
||||
btnRandom.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
DeckgenUtil.randomSelect(lstDecks);
|
||||
accept();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateNetDecks() {
|
||||
if (netDeckCategory != null) {
|
||||
cmbDeckTypes.setText(netDeckCategory.getDeckType());
|
||||
}
|
||||
lstDecks.setSelectionSupport(1, 1);
|
||||
|
||||
lstDecks.setPool(DeckProxy.getNetDecks(netDeckCategory));
|
||||
lstDecks.setup(ItemManagerConfig.NET_DECKS);
|
||||
|
||||
btnNewDeck.setText("New Deck");
|
||||
btnNewDeck.setWidth(btnEditDeck.getWidth());
|
||||
btnEditDeck.setVisible(true);
|
||||
|
||||
btnViewDeck.setVisible(true);
|
||||
btnRandom.setText("Random Deck");
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth());
|
||||
btnRandom.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
DeckgenUtil.randomSelect(lstDecks);
|
||||
accept();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Deck getDeck() {
|
||||
DeckProxy proxy = lstDecks.getSelectedItem();
|
||||
if (proxy == null) { return null; }
|
||||
@@ -587,52 +553,6 @@ public class FDeckChooser extends FScreen {
|
||||
isAi = isAiDeck;
|
||||
}
|
||||
|
||||
private void refreshDecksList(DeckType deckType, boolean forceRefresh, FEvent e) {
|
||||
if (selectedDeckType == deckType && !forceRefresh) { return; }
|
||||
selectedDeckType = deckType;
|
||||
|
||||
if (e == null) {
|
||||
refreshingDeckType = true;
|
||||
cmbDeckTypes.setSelectedItem(deckType);
|
||||
refreshingDeckType = false;
|
||||
}
|
||||
if (deckType == null) { return; }
|
||||
|
||||
switch (deckType) {
|
||||
case CUSTOM_DECK:
|
||||
updateCustom();
|
||||
break;
|
||||
case COLOR_DECK:
|
||||
updateColors();
|
||||
break;
|
||||
case THEME_DECK:
|
||||
updateThemes();
|
||||
break;
|
||||
case QUEST_OPPONENT_DECK:
|
||||
updateQuestEvents();
|
||||
break;
|
||||
case PRECONSTRUCTED_DECK:
|
||||
updatePrecons();
|
||||
break;
|
||||
case RANDOM_DECK:
|
||||
updateRandom();
|
||||
break;
|
||||
case NET_DECK:
|
||||
updateNetDecks();
|
||||
break;
|
||||
}
|
||||
|
||||
if (e != null) { //set default list selection if from combo box change event
|
||||
if (deckType == DeckType.COLOR_DECK) {
|
||||
// default selection = basic two color deck
|
||||
lstDecks.setSelectedIndices(new Integer[]{0, 1});
|
||||
}
|
||||
else {
|
||||
lstDecks.setSelectedIndex(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final String SELECTED_DECK_DELIMITER = "::";
|
||||
|
||||
public void saveState() {
|
||||
|
||||
@@ -7,12 +7,22 @@ import forge.itemmanager.IItemManager;
|
||||
|
||||
|
||||
public class ColorDeckGenerator extends DeckProxy implements Comparable<ColorDeckGenerator> {
|
||||
public static List<DeckProxy> getColorDecks(IItemManager<DeckProxy> lstDecks0, boolean isAi0) {
|
||||
String[] colors = new String[] { "Random 1", "Random 2", "Random 3",
|
||||
"White", "Blue", "Black", "Red", "Green" };
|
||||
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
for (int i = 0; i < colors.length; i++) {
|
||||
decks.add(new ColorDeckGenerator(colors[i], i, lstDecks0, isAi0));
|
||||
}
|
||||
return decks;
|
||||
}
|
||||
|
||||
private String name;
|
||||
private int index;
|
||||
private final IItemManager<DeckProxy> lstDecks;
|
||||
private final boolean isAi;
|
||||
|
||||
public ColorDeckGenerator(String name0, int index0, IItemManager<DeckProxy> lstDecks0, boolean isAi0) {
|
||||
private ColorDeckGenerator(String name0, int index0, IItemManager<DeckProxy> lstDecks0, boolean isAi0) {
|
||||
super();
|
||||
name = name0;
|
||||
index = index0;
|
||||
|
||||
@@ -34,7 +34,7 @@ public class RandomDeckGenerator extends DeckProxy implements Comparable<RandomD
|
||||
private final IHasGameType lstDecks;
|
||||
private final boolean isAi;
|
||||
|
||||
public RandomDeckGenerator(String name0, RandomDeckType type0, IHasGameType lstDecks0, boolean isAi0) {
|
||||
private RandomDeckGenerator(String name0, RandomDeckType type0, IHasGameType lstDecks0, boolean isAi0) {
|
||||
super();
|
||||
name = name0;
|
||||
type = type0;
|
||||
|
||||
Reference in New Issue
Block a user