Support viewing and editing variant deck types on Deck Manager

This commit is contained in:
drdev
2015-04-25 14:14:42 +00:00
parent f4ce1d67ef
commit 6a8c0ddece
2 changed files with 119 additions and 52 deletions

View File

@@ -97,21 +97,6 @@ public class FDeckChooser extends FScreen {
btnNewDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
EditorType editorType;
switch (lstDecks.getGameType()) {
case Commander:
editorType = EditorType.Commander;
break;
case Archenemy:
editorType = EditorType.Archenemy;
break;
case Planechase:
editorType = EditorType.Planechase;
break;
default:
editorType = EditorType.Constructed;
break;
}
FDeckEditor editor;
switch (selectedDeckType) {
case COLOR_DECK:
@@ -123,7 +108,7 @@ public class FDeckChooser extends FScreen {
if (generatedDeck == null) { return; }
generatedDeck = (Deck)generatedDeck.copyTo(""); //prevent deck having a name by default
editor = new FDeckEditor(editorType, generatedDeck, true);
editor = new FDeckEditor(getEditorType(), generatedDeck, true);
}
else {
FOptionPane.showErrorDialog("You must select something before you can generate a new deck.");
@@ -131,16 +116,29 @@ public class FDeckChooser extends FScreen {
}
break;
default:
editor = new FDeckEditor(editorType, "", false);
editor = new FDeckEditor(getEditorType(), "", false);
break;
}
editor.setSaveHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
//ensure user returns to custom user deck and that list is refreshed if new deck is saved
//ensure user returns to proper deck type and that list is refreshed if new deck is saved
if (!needRefreshOnActivate) {
needRefreshOnActivate = true;
setSelectedDeckType(DeckType.CUSTOM_DECK);
if (lstDecks.getGameType() == GameType.DeckManager) {
switch (selectedDeckType) {
case COMMANDER_DECK:
case SCHEME_DECKS:
case PLANAR_DECKS:
break;
default:
setSelectedDeckType(DeckType.CONSTRUCTED_DECK);
break;
}
}
else {
setSelectedDeckType(DeckType.CUSTOM_DECK);
}
}
}
});
@@ -183,9 +181,11 @@ public class FDeckChooser extends FScreen {
break; //delay initialize for constructed until saved decks can be reloaded
case Commander:
case Gauntlet:
case DeckManager:
initialize(null, DeckType.CUSTOM_DECK);
break;
case DeckManager:
initialize(null, DeckType.CONSTRUCTED_DECK);
break;
default:
initialize(null, DeckType.RANDOM_DECK);
break;
@@ -204,7 +204,7 @@ public class FDeckChooser extends FScreen {
public void onActivate() {
if (needRefreshOnActivate) {
needRefreshOnActivate = false;
refreshDecksList(DeckType.CUSTOM_DECK, true, null);
refreshDecksList(selectedDeckType, true, null);
switch (lstDecks.getGameType()) {
case Commander:
lstDecks.setSelectedString(DeckPreferences.getCommanderDeck());
@@ -215,6 +215,22 @@ public class FDeckChooser extends FScreen {
case Planechase:
lstDecks.setSelectedString(DeckPreferences.getPlanarDeck());
break;
case DeckManager:
switch (selectedDeckType) {
case COMMANDER_DECK:
lstDecks.setSelectedString(DeckPreferences.getCommanderDeck());
break;
case SCHEME_DECKS:
lstDecks.setSelectedString(DeckPreferences.getSchemeDeck());
break;
case PLANAR_DECKS:
lstDecks.setSelectedString(DeckPreferences.getPlanarDeck());
break;
default:
lstDecks.setSelectedString(DeckPreferences.getCurrentDeck());
break;
}
break;
default:
lstDecks.setSelectedString(DeckPreferences.getCurrentDeck());
break;
@@ -226,52 +242,80 @@ public class FDeckChooser extends FScreen {
final DeckProxy deck = lstDecks.getSelectedItem();
if (deck == null) { return; }
if (selectedDeckType == DeckType.CUSTOM_DECK) {
switch (selectedDeckType) {
case CUSTOM_DECK:
case CONSTRUCTED_DECK:
case COMMANDER_DECK:
case SCHEME_DECKS:
case PLANAR_DECKS:
editDeck(deck);
return;
}
break;
default:
final DeckType fallbackType = lstDecks.getGameType() == GameType.DeckManager ? DeckType.CONSTRUCTED_DECK : DeckType.CUSTOM_DECK;
//see if deck with selected name exists already
final IStorage<Deck> decks = FModel.getDecks().getConstructed();
Deck existingDeck = decks.get(deck.getName());
if (existingDeck != null) {
setSelectedDeckType(DeckType.CUSTOM_DECK);
editDeck(new DeckProxy(existingDeck, "Constructed", lstDecks.getGameType(), decks));
return;
}
//prompt to duplicate deck if deck doesn't exist already
FOptionPane.showConfirmDialog(selectedDeckType + " cannot be edited directly. Would you like to duplicate " + deck.getName() + " for editing as a custom user deck?",
"Duplicate Deck?", "Duplicate", "Cancel", new Callback<Boolean>() {
@Override
public void run(Boolean result) {
if (result) {
Deck copiedDeck = (Deck)deck.getDeck().copyTo(deck.getName());
decks.add(copiedDeck);
setSelectedDeckType(DeckType.CUSTOM_DECK);
editDeck(new DeckProxy(copiedDeck, "Constructed", lstDecks.getGameType(), decks));
}
//see if deck with selected name exists already
final IStorage<Deck> decks = FModel.getDecks().getConstructed();
Deck existingDeck = decks.get(deck.getName());
if (existingDeck != null) {
setSelectedDeckType(fallbackType);
editDeck(new DeckProxy(existingDeck, "Constructed", lstDecks.getGameType(), decks));
return;
}
});
//prompt to duplicate deck if deck doesn't exist already
FOptionPane.showConfirmDialog(selectedDeckType + " cannot be edited directly. Would you like to duplicate " + deck.getName() + " for editing as a custom user deck?",
"Duplicate Deck?", "Duplicate", "Cancel", new Callback<Boolean>() {
@Override
public void run(Boolean result) {
if (result) {
Deck copiedDeck = (Deck)deck.getDeck().copyTo(deck.getName());
decks.add(copiedDeck);
setSelectedDeckType(fallbackType);
editDeck(new DeckProxy(copiedDeck, "Constructed", lstDecks.getGameType(), decks));
}
}
});
break;
}
}
private EditorType getEditorType() {
switch (lstDecks.getGameType()) {
case DeckManager:
switch (selectedDeckType) {
case COMMANDER_DECK:
return EditorType.Commander;
case SCHEME_DECKS:
return EditorType.Archenemy;
case PLANAR_DECKS:
return EditorType.Planechase;
default:
return EditorType.Constructed;
}
case Commander:
return EditorType.Commander;
case Archenemy:
return EditorType.Archenemy;
case Planechase:
return EditorType.Planechase;
default:
return EditorType.Constructed;
}
}
private void editDeck(DeckProxy deck) {
EditorType editorType;
switch (lstDecks.getGameType()) {
EditorType editorType = getEditorType();
switch (editorType) {
case Commander:
editorType = EditorType.Commander;
DeckPreferences.setCommanderDeck(deck.getName());
break;
case Archenemy:
editorType = EditorType.Archenemy;
DeckPreferences.setSchemeDeck(deck.getName());
break;
case Planechase:
editorType = EditorType.Planechase;
DeckPreferences.setPlanarDeck(deck.getName());
break;
default:
editorType = EditorType.Constructed;
DeckPreferences.setCurrentDeck(deck.getName());
break;
}
@@ -302,7 +346,10 @@ public class FDeckChooser extends FScreen {
cmbDeckTypes.addItem(DeckType.NET_DECK);
break;
case DeckManager:
cmbDeckTypes.addItem(DeckType.CUSTOM_DECK);
cmbDeckTypes.addItem(DeckType.CONSTRUCTED_DECK);
cmbDeckTypes.addItem(DeckType.COMMANDER_DECK);
cmbDeckTypes.addItem(DeckType.SCHEME_DECKS);
cmbDeckTypes.addItem(DeckType.PLANAR_DECKS);
cmbDeckTypes.addItem(DeckType.PRECONSTRUCTED_DECK);
cmbDeckTypes.addItem(DeckType.QUEST_OPPONENT_DECK);
cmbDeckTypes.addItem(DeckType.NET_DECK);
@@ -393,6 +440,22 @@ public class FDeckChooser extends FScreen {
break;
}
break;
case CONSTRUCTED_DECK:
pool = DeckProxy.getAllConstructedDecks();
config = ItemManagerConfig.CONSTRUCTED_DECKS;
break;
case COMMANDER_DECK:
pool = DeckProxy.getAllCommanderDecks();
config = ItemManagerConfig.COMMANDER_DECKS;
break;
case SCHEME_DECKS:
pool = DeckProxy.getAllSchemeDecks();
config = ItemManagerConfig.SCHEME_DECKS;
break;
case PLANAR_DECKS:
pool = DeckProxy.getAllPlanarDecks();
config = ItemManagerConfig.PLANAR_DECKS;
break;
case COLOR_DECK:
maxSelections = 3;
pool = ColorDeckGenerator.getColorDecks(lstDecks, isAi);

View File

@@ -2,6 +2,10 @@ package forge.deck;
public enum DeckType {
CUSTOM_DECK ("Custom User Decks"),
CONSTRUCTED_DECK ("Constructed Decks"),
COMMANDER_DECK ("Commander Decks"),
SCHEME_DECKS ("Scheme Decks"),
PLANAR_DECKS ("Planar Decks"),
PRECONSTRUCTED_DECK("Preconstructed Decks"),
QUEST_OPPONENT_DECK ("Quest Opponent Decks"),
COLOR_DECK ("Random Color Decks"),