mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Rename Deck Editor to Deck Manager
This commit is contained in:
@@ -17,7 +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", ""),
|
||||
DeckEditorTest (DeckFormat.Constructed, false, true, true, "Deck Editor Test", ""),
|
||||
DeckManager (DeckFormat.Constructed, false, true, true, "Deck Manager", ""),
|
||||
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."),
|
||||
|
||||
@@ -86,7 +86,7 @@ public class FDeckChooser extends FScreen {
|
||||
lstDecks.setItemActivateHandler(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
if (lstDecks.getGameType() == GameType.DeckEditorTest) {
|
||||
if (lstDecks.getGameType() == GameType.DeckManager) {
|
||||
//for Deck Editor, edit deck instead of accepting
|
||||
editSelectedDeck();
|
||||
return;
|
||||
@@ -164,7 +164,7 @@ public class FDeckChooser extends FScreen {
|
||||
btnRandom.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
if (lstDecks.getGameType() == GameType.DeckEditorTest) {
|
||||
if (lstDecks.getGameType() == GameType.DeckManager) {
|
||||
//for Deck Editor, test deck instead of randomly selecting deck
|
||||
testSelectedDeck();
|
||||
return;
|
||||
@@ -183,7 +183,7 @@ public class FDeckChooser extends FScreen {
|
||||
break; //delay initialize for constructed until saved decks can be reloaded
|
||||
case Commander:
|
||||
case Gauntlet:
|
||||
case DeckEditorTest:
|
||||
case DeckManager:
|
||||
initialize(null, DeckType.CUSTOM_DECK);
|
||||
break;
|
||||
default:
|
||||
@@ -301,7 +301,7 @@ public class FDeckChooser extends FScreen {
|
||||
cmbDeckTypes.addItem(DeckType.RANDOM_DECK);
|
||||
cmbDeckTypes.addItem(DeckType.NET_DECK);
|
||||
break;
|
||||
case DeckEditorTest:
|
||||
case DeckManager:
|
||||
cmbDeckTypes.addItem(DeckType.CUSTOM_DECK);
|
||||
cmbDeckTypes.addItem(DeckType.PRECONSTRUCTED_DECK);
|
||||
cmbDeckTypes.addItem(DeckType.QUEST_OPPONENT_DECK);
|
||||
@@ -458,7 +458,7 @@ public class FDeckChooser extends FScreen {
|
||||
|
||||
btnNewDeck.setText("New Deck");
|
||||
|
||||
if (lstDecks.getGameType() == GameType.DeckEditorTest) {
|
||||
if (lstDecks.getGameType() == GameType.DeckManager) {
|
||||
//handle special case of Deck Editor screen where this button will start a game with the deck
|
||||
btnRandom.setText("Test Deck");
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package forge.screens.gauntlet;
|
||||
import java.io.File;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
@@ -17,25 +16,22 @@ import forge.assets.FSkinColor.Colors;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckType;
|
||||
import forge.deck.FDeckChooser;
|
||||
import forge.game.GameType;
|
||||
import forge.game.player.RegisteredPlayer;
|
||||
import forge.gauntlet.GauntletData;
|
||||
import forge.gauntlet.GauntletIO;
|
||||
import forge.gauntlet.GauntletUtil;
|
||||
import forge.model.FModel;
|
||||
import forge.player.GamePlayerUtil;
|
||||
import forge.quest.QuestUtil;
|
||||
import forge.screens.LaunchScreen;
|
||||
import forge.screens.home.LoadGameMenu;
|
||||
import forge.screens.home.NewGameMenu.NewGameScreen;
|
||||
import forge.screens.settings.SettingsScreen;
|
||||
import forge.toolbox.FButton;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FList;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.toolbox.GuiChoose;
|
||||
import forge.toolbox.ListChooser;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.util.Callback;
|
||||
import forge.util.ThreadUtil;
|
||||
@@ -58,28 +54,7 @@ public class LoadGauntletScreen extends LaunchScreen {
|
||||
btnNewGauntlet.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
GuiChoose.oneOrNone("Select a Gauntlet Type", new String[] {
|
||||
"Quick Gauntlet",
|
||||
"Custom Gauntlet",
|
||||
"Gauntlet Contest",
|
||||
}, new Callback<String>() {
|
||||
@Override
|
||||
public void run(String result) {
|
||||
if (result == null) { return; }
|
||||
|
||||
switch (result) {
|
||||
case "Quick Gauntlet":
|
||||
createQuickGauntlet();
|
||||
break;
|
||||
case "Custom Gauntlet":
|
||||
createCustomGauntlet();
|
||||
break;
|
||||
default:
|
||||
createGauntletContest();
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
NewGameScreen.Gauntlet.open();
|
||||
}
|
||||
});
|
||||
btnRenameGauntlet.setFont(btnNewGauntlet.getFont());
|
||||
@@ -96,7 +71,9 @@ public class LoadGauntletScreen extends LaunchScreen {
|
||||
deleteGauntlet(lstGauntlets.getSelectedGauntlet());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onActivate() {
|
||||
final File[] files = GauntletIO.getGauntletFilesUnlocked(null);
|
||||
final List<GauntletData> data = new ArrayList<GauntletData>();
|
||||
|
||||
@@ -134,120 +111,6 @@ public class LoadGauntletScreen extends LaunchScreen {
|
||||
btnDeleteGauntlet.setBounds(x, y, buttonWidth, buttonHeight);
|
||||
}
|
||||
|
||||
private void createQuickGauntlet() {
|
||||
GuiChoose.getInteger("How many opponents are you willing to face?", 3, 50, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(final Integer numOpponents) {
|
||||
if (numOpponents == null) { return; }
|
||||
|
||||
ListChooser<DeckType> chooser = new ListChooser<DeckType>(
|
||||
"Choose allowed deck types for opponents", 0, 5, Arrays.asList(new DeckType[] {
|
||||
DeckType.CUSTOM_DECK,
|
||||
DeckType.PRECONSTRUCTED_DECK,
|
||||
DeckType.QUEST_OPPONENT_DECK,
|
||||
DeckType.COLOR_DECK,
|
||||
DeckType.THEME_DECK
|
||||
}), null, new Callback<List<DeckType>>() {
|
||||
@Override
|
||||
public void run(final List<DeckType> allowedDeckTypes) {
|
||||
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) { return; }
|
||||
|
||||
FDeckChooser.promptForDeck("Select Your Deck", GameType.Gauntlet, false, new Callback<Deck>() {
|
||||
@Override
|
||||
public void run(Deck userDeck) {
|
||||
if (userDeck == null) { return; }
|
||||
|
||||
lstGauntlets.addGauntlet(GauntletUtil.createQuickGauntlet(
|
||||
userDeck, numOpponents, allowedDeckTypes));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
chooser.show(null, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void createCustomGauntlet() {
|
||||
GuiChoose.getInteger("How many opponents are you willing to face?", 3, 50, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(final Integer numOpponents) {
|
||||
if (numOpponents == null) { return; }
|
||||
|
||||
GauntletData gauntlet = new GauntletData();
|
||||
gauntlet.setDecks(new ArrayList<Deck>());
|
||||
promptForAiDeck(gauntlet, numOpponents);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void promptForAiDeck(final GauntletData gauntlet, final int numOpponents) {
|
||||
final int opponentNum = gauntlet.getDecks().size() + 1;
|
||||
FDeckChooser.promptForDeck("Select Deck for Opponent " + opponentNum + " / " + numOpponents, GameType.Gauntlet, true, new Callback<Deck>() {
|
||||
@Override
|
||||
public void run(Deck aiDeck) {
|
||||
if (aiDeck == null) { return; }
|
||||
|
||||
gauntlet.getDecks().add(aiDeck);
|
||||
gauntlet.getEventNames().add(aiDeck.getName());
|
||||
|
||||
if (opponentNum < numOpponents) {
|
||||
promptForAiDeck(gauntlet, numOpponents);
|
||||
}
|
||||
else {
|
||||
//once all ai decks have been selected, prompt for user deck
|
||||
FDeckChooser.promptForDeck("Select Your Deck", GameType.Gauntlet, false, new Callback<Deck>() {
|
||||
@Override
|
||||
public void run(Deck userDeck) {
|
||||
if (userDeck == null) { return; }
|
||||
|
||||
gauntlet.setUserDeck(userDeck);
|
||||
GauntletUtil.setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_CUSTOM);
|
||||
FModel.setGauntletData(gauntlet);
|
||||
gauntlet.reset();
|
||||
lstGauntlets.addGauntlet(gauntlet);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void createGauntletContest() {
|
||||
final File[] files = GauntletIO.getGauntletFilesLocked();
|
||||
final List<GauntletData> contests = new ArrayList<GauntletData>();
|
||||
for (final File f : files) {
|
||||
GauntletData gd = GauntletIO.loadGauntlet(f);
|
||||
if (gd != null) {
|
||||
contests.add(gd);
|
||||
}
|
||||
}
|
||||
|
||||
GuiChoose.oneOrNone("Select Gauntlet Contest", contests, new Callback<GauntletData>() {
|
||||
@Override
|
||||
public void run(final GauntletData contest) {
|
||||
if (contest == null) { return; }
|
||||
|
||||
FDeckChooser.promptForDeck("Select Your Deck", GameType.Gauntlet, false, new Callback<Deck>() {
|
||||
@Override
|
||||
public void run(final Deck userDeck) {
|
||||
if (userDeck == null) { return; }
|
||||
|
||||
//create copy of contest to use as gauntlet
|
||||
GauntletData gauntlet = new GauntletData();
|
||||
gauntlet.setDecks(new ArrayList<Deck>(contest.getDecks()));
|
||||
gauntlet.setEventNames(new ArrayList<String>(contest.getEventNames()));
|
||||
gauntlet.setUserDeck(userDeck);
|
||||
GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_");
|
||||
FModel.setGauntletData(gauntlet);
|
||||
gauntlet.reset();
|
||||
lstGauntlets.addGauntlet(gauntlet);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void startMatch() {
|
||||
final GauntletData gauntlet = lstGauntlets.getSelectedGauntlet();
|
||||
@@ -421,14 +284,6 @@ public class LoadGauntletScreen extends LaunchScreen {
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
public void addGauntlet(GauntletData gauntlet) {
|
||||
if (gauntlets == null) { return; }
|
||||
gauntlets.add(gauntlet);
|
||||
refresh();
|
||||
setSelectedGauntlet(gauntlet);
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
public void removeGauntlet(GauntletData gauntlet) {
|
||||
if (gauntlets == null) { return; }
|
||||
removeItem(gauntlet);
|
||||
|
||||
@@ -1,137 +1,68 @@
|
||||
package forge.screens.gauntlet;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||
|
||||
import forge.FThreads;
|
||||
import forge.Graphics;
|
||||
import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinColor.Colors;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.Forge;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckType;
|
||||
import forge.deck.FDeckChooser;
|
||||
import forge.game.GameType;
|
||||
import forge.game.player.RegisteredPlayer;
|
||||
import forge.gauntlet.GauntletData;
|
||||
import forge.gauntlet.GauntletIO;
|
||||
import forge.gauntlet.GauntletUtil;
|
||||
import forge.model.FModel;
|
||||
import forge.player.GamePlayerUtil;
|
||||
import forge.quest.QuestUtil;
|
||||
import forge.screens.LaunchScreen;
|
||||
import forge.screens.home.NewGameMenu;
|
||||
import forge.screens.settings.SettingsScreen;
|
||||
import forge.toolbox.FButton;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FList;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.screens.home.LoadGameMenu.LoadGameScreen;
|
||||
import forge.toolbox.GuiChoose;
|
||||
import forge.toolbox.ListChooser;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.util.Callback;
|
||||
import forge.util.ThreadUtil;
|
||||
import forge.util.Utils;
|
||||
import forge.util.gui.SOptionPane;
|
||||
|
||||
public class NewGauntletScreen extends LaunchScreen {
|
||||
private static final float PADDING = Utils.AVG_FINGER_HEIGHT * 0.1f;
|
||||
private static final FSkinColor SEL_COLOR = FSkinColor.get(Colors.CLR_ACTIVE);
|
||||
|
||||
private final GauntletFileLister lstGauntlets = add(new GauntletFileLister());
|
||||
private final FButton btnNewGauntlet = add(new FButton("New"));
|
||||
private final FButton btnRenameGauntlet = add(new FButton("Rename"));
|
||||
private final FButton btnDeleteGauntlet = add(new FButton("Delete"));
|
||||
|
||||
public NewGauntletScreen() {
|
||||
super(null, NewGameMenu.getMenu());
|
||||
|
||||
btnNewGauntlet.setFont(FSkinFont.get(16));
|
||||
btnNewGauntlet.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
GuiChoose.oneOrNone("Select a Gauntlet Type", new String[] {
|
||||
"Quick Gauntlet",
|
||||
"Custom Gauntlet",
|
||||
"Gauntlet Contest",
|
||||
}, new Callback<String>() {
|
||||
@Override
|
||||
public void run(String result) {
|
||||
if (result == null) { return; }
|
||||
|
||||
switch (result) {
|
||||
case "Quick Gauntlet":
|
||||
createQuickGauntlet();
|
||||
break;
|
||||
case "Custom Gauntlet":
|
||||
createCustomGauntlet();
|
||||
break;
|
||||
default:
|
||||
createGauntletContest();
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
btnRenameGauntlet.setFont(btnNewGauntlet.getFont());
|
||||
btnRenameGauntlet.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
renameGauntlet(lstGauntlets.getSelectedGauntlet());
|
||||
}
|
||||
});
|
||||
btnDeleteGauntlet.setFont(btnNewGauntlet.getFont());
|
||||
btnDeleteGauntlet.setCommand(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
deleteGauntlet(lstGauntlets.getSelectedGauntlet());
|
||||
}
|
||||
});
|
||||
|
||||
final File[] files = GauntletIO.getGauntletFilesUnlocked(null);
|
||||
final List<GauntletData> data = new ArrayList<GauntletData>();
|
||||
|
||||
for (final File f : files) {
|
||||
GauntletData gd = GauntletIO.loadGauntlet(f);
|
||||
if (gd != null) {
|
||||
data.add(gd);
|
||||
}
|
||||
}
|
||||
|
||||
lstGauntlets.setGauntlets(data);
|
||||
}
|
||||
|
||||
private void updateButtons() {
|
||||
boolean enabled = !lstGauntlets.isEmpty();
|
||||
btnRenameGauntlet.setEnabled(enabled);
|
||||
btnDeleteGauntlet.setEnabled(enabled);
|
||||
btnStart.setEnabled(enabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLayoutAboveBtnStart(float startY, float width, float height) {
|
||||
float buttonWidth = (width - 2 * PADDING) / 3;
|
||||
float buttonHeight = btnNewGauntlet.getAutoSizeBounds().height * 1.2f;
|
||||
|
||||
}
|
||||
|
||||
float y = startY;
|
||||
lstGauntlets.setBounds(0, y, width, height - y - buttonHeight - PADDING);
|
||||
y += lstGauntlets.getHeight() + PADDING;
|
||||
@Override
|
||||
protected void startMatch() {
|
||||
GuiChoose.oneOrNone("Select a Gauntlet Type", new String[] {
|
||||
"Quick Gauntlet",
|
||||
"Custom Gauntlet",
|
||||
"Gauntlet Contest",
|
||||
}, new Callback<String>() {
|
||||
@Override
|
||||
public void run(String result) {
|
||||
if (result == null) { return; }
|
||||
|
||||
float x = 0;
|
||||
btnNewGauntlet.setBounds(x, y, buttonWidth, buttonHeight);
|
||||
x += buttonWidth + PADDING;
|
||||
btnRenameGauntlet.setBounds(x, y, buttonWidth, buttonHeight);
|
||||
x += buttonWidth + PADDING;
|
||||
btnDeleteGauntlet.setBounds(x, y, buttonWidth, buttonHeight);
|
||||
switch (result) {
|
||||
case "Quick Gauntlet":
|
||||
createQuickGauntlet();
|
||||
break;
|
||||
case "Custom Gauntlet":
|
||||
createCustomGauntlet();
|
||||
break;
|
||||
default:
|
||||
createGauntletContest();
|
||||
break;
|
||||
}
|
||||
Forge.back(); //prevent going back to this screen from Load Gauntlet screen
|
||||
LoadGameScreen.Gauntlet.open();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean buildLaunchParams(LaunchParams launchParams) {
|
||||
return false; //this override isn't needed
|
||||
}
|
||||
|
||||
private void createQuickGauntlet() {
|
||||
@@ -157,8 +88,7 @@ public class NewGauntletScreen extends LaunchScreen {
|
||||
public void run(Deck userDeck) {
|
||||
if (userDeck == null) { return; }
|
||||
|
||||
lstGauntlets.addGauntlet(GauntletUtil.createQuickGauntlet(
|
||||
userDeck, numOpponents, allowedDeckTypes));
|
||||
GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -205,7 +135,6 @@ public class NewGauntletScreen extends LaunchScreen {
|
||||
GauntletUtil.setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_CUSTOM);
|
||||
FModel.setGauntletData(gauntlet);
|
||||
gauntlet.reset();
|
||||
lstGauntlets.addGauntlet(gauntlet);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -241,240 +170,9 @@ public class NewGauntletScreen extends LaunchScreen {
|
||||
GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_");
|
||||
FModel.setGauntletData(gauntlet);
|
||||
gauntlet.reset();
|
||||
lstGauntlets.addGauntlet(gauntlet);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void startMatch() {
|
||||
final GauntletData gauntlet = lstGauntlets.getSelectedGauntlet();
|
||||
if (gauntlet == null) {
|
||||
FOptionPane.showMessageDialog("You must create and select a gauntlet.");
|
||||
return;
|
||||
}
|
||||
FModel.setGauntletData(gauntlet);
|
||||
Deck userDeck = gauntlet.getUserDeck();
|
||||
if (userDeck == null) {
|
||||
//give user a chance to select a deck if none saved with gauntlet
|
||||
FDeckChooser.promptForDeck("Select Deck for Gauntlet", GameType.Gauntlet, false, new Callback<Deck>() {
|
||||
@Override
|
||||
public void run(Deck result) {
|
||||
if (result != null) {
|
||||
gauntlet.setUserDeck(result);
|
||||
GauntletIO.saveGauntlet(gauntlet);
|
||||
}
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
super.startMatch();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean buildLaunchParams(LaunchParams launchParams) {
|
||||
final GauntletData gauntlet = FModel.getGauntletData();
|
||||
launchParams.gameType = GameType.Gauntlet;
|
||||
RegisteredPlayer humanPlayer = new RegisteredPlayer(gauntlet.getUserDeck()).setPlayer(GamePlayerUtil.getGuiPlayer());
|
||||
launchParams.humanPlayers.add(humanPlayer);
|
||||
launchParams.players.add(humanPlayer);
|
||||
launchParams.players.add(new RegisteredPlayer(gauntlet.getDecks().get(gauntlet.getCompleted())).setPlayer(GamePlayerUtil.createAiPlayer()));
|
||||
gauntlet.startRound(launchParams.players, humanPlayer);
|
||||
return false; //return false since we're creating the match here
|
||||
}
|
||||
|
||||
private void renameGauntlet(final GauntletData gauntlet) {
|
||||
if (gauntlet == null) { return; }
|
||||
|
||||
ThreadUtil.invokeInGameThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
String gauntletName;
|
||||
String oldGauntletName = gauntlet.getName();
|
||||
while (true) {
|
||||
gauntletName = SOptionPane.showInputDialog("Enter new name for gauntlet:", "Rename Gauntlet", null, oldGauntletName);
|
||||
if (gauntletName == null) { return; }
|
||||
|
||||
gauntletName = QuestUtil.cleanString(gauntletName);
|
||||
if (gauntletName.equals(oldGauntletName)) { return; } //quit if chose same name
|
||||
|
||||
if (gauntletName.isEmpty()) {
|
||||
SOptionPane.showMessageDialog("Please specify a gauntlet name.");
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean exists = false;
|
||||
for (GauntletData gauntletData : lstGauntlets) {
|
||||
if (gauntletData.getName().equalsIgnoreCase(gauntletName)) {
|
||||
exists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (exists) {
|
||||
SOptionPane.showMessageDialog("A gauntlet already exists with that name. Please pick another gauntlet name.");
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
final String newGauntletName = gauntletName;
|
||||
FThreads.invokeInEdtLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
gauntlet.rename(newGauntletName);
|
||||
lstGauntlets.refresh();
|
||||
lstGauntlets.setSelectedGauntlet(gauntlet);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void deleteGauntlet(final GauntletData gauntlet) {
|
||||
if (gauntlet == null) { return; }
|
||||
|
||||
ThreadUtil.invokeInGameThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!SOptionPane.showConfirmDialog(
|
||||
"Are you sure you want to delete '" + gauntlet.getName() + "'?",
|
||||
"Delete Gauntlet", "Delete", "Cancel")) {
|
||||
return;
|
||||
}
|
||||
|
||||
GauntletIO.getGauntletFile(gauntlet).delete();
|
||||
|
||||
lstGauntlets.removeGauntlet(gauntlet);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private class GauntletFileLister extends FList<GauntletData> {
|
||||
private int selectedIndex = 0;
|
||||
private List<GauntletData> gauntlets;
|
||||
|
||||
private GauntletFileLister() {
|
||||
setListItemRenderer(new ListItemRenderer<GauntletData>() {
|
||||
@Override
|
||||
public boolean tap(Integer index, GauntletData value, float x, float y, int count) {
|
||||
if (count == 2) {
|
||||
startMatch();
|
||||
}
|
||||
else {
|
||||
selectedIndex = index;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getItemHeight() {
|
||||
return CardRenderer.getCardListItemHeight(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawValue(Graphics g, Integer index, GauntletData value, FSkinFont font, FSkinColor foreColor, FSkinColor backColor, boolean pressed, float x, float y, float w, float h) {
|
||||
float offset = w * SettingsScreen.INSETS_FACTOR - FList.PADDING; //increase padding for settings items
|
||||
x += offset;
|
||||
y += offset;
|
||||
w -= 2 * offset;
|
||||
h -= 2 * offset;
|
||||
|
||||
float totalHeight = h;
|
||||
String name = value.getName();
|
||||
h = font.getMultiLineBounds(name).height + SettingsScreen.SETTING_PADDING;
|
||||
|
||||
int completed = value.getCompleted();
|
||||
int opponents = value.getDecks().size();
|
||||
NumberFormat percent = NumberFormat.getPercentInstance();
|
||||
String progress = completed + " / " + opponents + " (" + percent.format((double)completed / (double)opponents) + ")";
|
||||
float progressWidth = font.getBounds(progress).width + SettingsScreen.SETTING_PADDING;
|
||||
|
||||
g.drawText(name, font, foreColor, x, y, w - progressWidth, h, false, HAlignment.LEFT, false);
|
||||
g.drawText(progress, font, foreColor, x, y, w, h, false, HAlignment.RIGHT, false);
|
||||
|
||||
h += SettingsScreen.SETTING_PADDING;
|
||||
y += h;
|
||||
h = totalHeight - h + w * SettingsScreen.INSETS_FACTOR;
|
||||
|
||||
String timestamp = value.getTimestamp();
|
||||
font = FSkinFont.get(12);
|
||||
float timestampWidth = font.getBounds(timestamp).width + SettingsScreen.SETTING_PADDING;
|
||||
g.drawText(value.getUserDeck() == null ? "(none)" : value.getUserDeck().getName(), font, SettingsScreen.DESC_COLOR, x, y, w - timestampWidth, h, false, HAlignment.LEFT, false);
|
||||
g.drawText(timestamp, font, SettingsScreen.DESC_COLOR, x + w - timestampWidth + SettingsScreen.SETTING_PADDING, y, w, h, false, HAlignment.LEFT, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FSkinColor getItemFillColor(int index) {
|
||||
if (index == selectedIndex) {
|
||||
return SEL_COLOR;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setGauntlets(List<GauntletData> gauntlets0) {
|
||||
gauntlets = gauntlets0;
|
||||
refresh();
|
||||
setSelectedIndex(0);
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
public void addGauntlet(GauntletData gauntlet) {
|
||||
if (gauntlets == null) { return; }
|
||||
gauntlets.add(gauntlet);
|
||||
refresh();
|
||||
setSelectedGauntlet(gauntlet);
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
public void removeGauntlet(GauntletData gauntlet) {
|
||||
if (gauntlets == null) { return; }
|
||||
removeItem(gauntlet);
|
||||
gauntlets.remove(gauntlet);
|
||||
if (selectedIndex == gauntlets.size()) {
|
||||
selectedIndex--;
|
||||
}
|
||||
revalidate();
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
public void refresh() {
|
||||
List<GauntletData> sorted = new ArrayList<GauntletData>();
|
||||
for (GauntletData gauntlet : gauntlets) {
|
||||
sorted.add(gauntlet);
|
||||
}
|
||||
Collections.sort(sorted, new Comparator<GauntletData>() {
|
||||
@Override
|
||||
public int compare(final GauntletData x, final GauntletData y) {
|
||||
return x.getName().toLowerCase().compareTo(y.getName().toLowerCase());
|
||||
}
|
||||
});
|
||||
setListData(sorted);
|
||||
}
|
||||
|
||||
public boolean setSelectedIndex(int i0) {
|
||||
if (i0 >= getCount()) { return false; }
|
||||
selectedIndex = i0;
|
||||
scrollIntoView(i0);
|
||||
return true;
|
||||
}
|
||||
|
||||
public GauntletData getSelectedGauntlet() {
|
||||
if (selectedIndex == -1) { return null; }
|
||||
return getItemAt(selectedIndex);
|
||||
}
|
||||
|
||||
public boolean setSelectedGauntlet(GauntletData gauntlet) {
|
||||
for (int i = 0; i < getCount(); i++) {
|
||||
if (getItemAt(i) == gauntlet) {
|
||||
selectedIndex = i;
|
||||
scrollIntoView(i);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,10 +41,10 @@ public class HomeScreen extends FScreen {
|
||||
}
|
||||
});
|
||||
buttons.get(buttons.size() - 1).setEnabled(false);
|
||||
addButton("Deck Editor", new FEventHandler() {
|
||||
addButton("Deck Manager", new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
FDeckChooser.promptForDeck("Deck Editor", GameType.DeckEditorTest, false, null);
|
||||
FDeckChooser.promptForDeck("Deck Manager", GameType.DeckManager, false, null);
|
||||
}
|
||||
});
|
||||
addButton("Achievements", new FEventHandler() {
|
||||
|
||||
@@ -78,7 +78,7 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
|
||||
control = new LimitedWinLose(this, game0);
|
||||
break;
|
||||
case Gauntlet:
|
||||
case DeckEditorTest:
|
||||
case DeckManager:
|
||||
control = new GauntletWinLose(this, game0);
|
||||
break;
|
||||
default: // will catch it after switch
|
||||
|
||||
@@ -81,7 +81,7 @@ public class LoadConquestScreen extends LaunchScreen {
|
||||
|
||||
@Override
|
||||
public void onActivate() {
|
||||
lblOldConquests.setText("Loading Existing Quests...");
|
||||
lblOldConquests.setText("Loading Existing Conquests...");
|
||||
lstConquests.clear();
|
||||
revalidate();
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ public class NetDeckCategory extends StorageBase<Deck> {
|
||||
switch (gameType) {
|
||||
case Constructed:
|
||||
case Gauntlet:
|
||||
case DeckEditorTest:
|
||||
case DeckManager:
|
||||
if (constructed == null) {
|
||||
constructed = loadCategories(ForgeConstants.NET_DECKS_LIST_FILE);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user