Rename Deck Editor to Deck Manager

This commit is contained in:
drdev
2015-04-24 13:41:38 +00:00
parent f1cd05e703
commit bd13f48890
8 changed files with 50 additions and 497 deletions

View File

@@ -17,7 +17,7 @@ public enum GameType {
QuestDraft (DeckFormat.Limited, true, true, true, "Quest Draft", ""), QuestDraft (DeckFormat.Limited, true, true, true, "Quest Draft", ""),
PlanarConquest (DeckFormat.PlanarConquest, true, false, false, "Planar Conquest", ""), PlanarConquest (DeckFormat.PlanarConquest, true, false, false, "Planar Conquest", ""),
Constructed (DeckFormat.Constructed, false, true, true, "Constructed", ""), 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."), 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."), 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."), 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."),

View File

@@ -86,7 +86,7 @@ public class FDeckChooser extends FScreen {
lstDecks.setItemActivateHandler(new FEventHandler() { lstDecks.setItemActivateHandler(new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
if (lstDecks.getGameType() == GameType.DeckEditorTest) { if (lstDecks.getGameType() == GameType.DeckManager) {
//for Deck Editor, edit deck instead of accepting //for Deck Editor, edit deck instead of accepting
editSelectedDeck(); editSelectedDeck();
return; return;
@@ -164,7 +164,7 @@ public class FDeckChooser extends FScreen {
btnRandom.setCommand(new FEventHandler() { btnRandom.setCommand(new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { 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 //for Deck Editor, test deck instead of randomly selecting deck
testSelectedDeck(); testSelectedDeck();
return; return;
@@ -183,7 +183,7 @@ public class FDeckChooser extends FScreen {
break; //delay initialize for constructed until saved decks can be reloaded break; //delay initialize for constructed until saved decks can be reloaded
case Commander: case Commander:
case Gauntlet: case Gauntlet:
case DeckEditorTest: case DeckManager:
initialize(null, DeckType.CUSTOM_DECK); initialize(null, DeckType.CUSTOM_DECK);
break; break;
default: default:
@@ -301,7 +301,7 @@ public class FDeckChooser extends FScreen {
cmbDeckTypes.addItem(DeckType.RANDOM_DECK); cmbDeckTypes.addItem(DeckType.RANDOM_DECK);
cmbDeckTypes.addItem(DeckType.NET_DECK); cmbDeckTypes.addItem(DeckType.NET_DECK);
break; break;
case DeckEditorTest: case DeckManager:
cmbDeckTypes.addItem(DeckType.CUSTOM_DECK); cmbDeckTypes.addItem(DeckType.CUSTOM_DECK);
cmbDeckTypes.addItem(DeckType.PRECONSTRUCTED_DECK); cmbDeckTypes.addItem(DeckType.PRECONSTRUCTED_DECK);
cmbDeckTypes.addItem(DeckType.QUEST_OPPONENT_DECK); cmbDeckTypes.addItem(DeckType.QUEST_OPPONENT_DECK);
@@ -458,7 +458,7 @@ public class FDeckChooser extends FScreen {
btnNewDeck.setText("New Deck"); 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 //handle special case of Deck Editor screen where this button will start a game with the deck
btnRandom.setText("Test Deck"); btnRandom.setText("Test Deck");
} }

View File

@@ -3,7 +3,6 @@ package forge.screens.gauntlet;
import java.io.File; import java.io.File;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
@@ -17,25 +16,22 @@ import forge.assets.FSkinColor.Colors;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
import forge.card.CardRenderer; import forge.card.CardRenderer;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckType;
import forge.deck.FDeckChooser; import forge.deck.FDeckChooser;
import forge.game.GameType; import forge.game.GameType;
import forge.game.player.RegisteredPlayer; import forge.game.player.RegisteredPlayer;
import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletData;
import forge.gauntlet.GauntletIO; import forge.gauntlet.GauntletIO;
import forge.gauntlet.GauntletUtil;
import forge.model.FModel; import forge.model.FModel;
import forge.player.GamePlayerUtil; import forge.player.GamePlayerUtil;
import forge.quest.QuestUtil; import forge.quest.QuestUtil;
import forge.screens.LaunchScreen; import forge.screens.LaunchScreen;
import forge.screens.home.LoadGameMenu; import forge.screens.home.LoadGameMenu;
import forge.screens.home.NewGameMenu.NewGameScreen;
import forge.screens.settings.SettingsScreen; import forge.screens.settings.SettingsScreen;
import forge.toolbox.FButton; import forge.toolbox.FButton;
import forge.toolbox.FEvent; import forge.toolbox.FEvent;
import forge.toolbox.FList; import forge.toolbox.FList;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.toolbox.GuiChoose;
import forge.toolbox.ListChooser;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.util.Callback; import forge.util.Callback;
import forge.util.ThreadUtil; import forge.util.ThreadUtil;
@@ -58,28 +54,7 @@ public class LoadGauntletScreen extends LaunchScreen {
btnNewGauntlet.setCommand(new FEventHandler() { btnNewGauntlet.setCommand(new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
GuiChoose.oneOrNone("Select a Gauntlet Type", new String[] { NewGameScreen.Gauntlet.open();
"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.setFont(btnNewGauntlet.getFont());
@@ -96,7 +71,9 @@ public class LoadGauntletScreen extends LaunchScreen {
deleteGauntlet(lstGauntlets.getSelectedGauntlet()); deleteGauntlet(lstGauntlets.getSelectedGauntlet());
} }
}); });
}
public void onActivate() {
final File[] files = GauntletIO.getGauntletFilesUnlocked(null); final File[] files = GauntletIO.getGauntletFilesUnlocked(null);
final List<GauntletData> data = new ArrayList<GauntletData>(); final List<GauntletData> data = new ArrayList<GauntletData>();
@@ -134,120 +111,6 @@ public class LoadGauntletScreen extends LaunchScreen {
btnDeleteGauntlet.setBounds(x, y, buttonWidth, buttonHeight); 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 @Override
protected void startMatch() { protected void startMatch() {
final GauntletData gauntlet = lstGauntlets.getSelectedGauntlet(); final GauntletData gauntlet = lstGauntlets.getSelectedGauntlet();
@@ -421,14 +284,6 @@ public class LoadGauntletScreen extends LaunchScreen {
updateButtons(); updateButtons();
} }
public void addGauntlet(GauntletData gauntlet) {
if (gauntlets == null) { return; }
gauntlets.add(gauntlet);
refresh();
setSelectedGauntlet(gauntlet);
updateButtons();
}
public void removeGauntlet(GauntletData gauntlet) { public void removeGauntlet(GauntletData gauntlet) {
if (gauntlets == null) { return; } if (gauntlets == null) { return; }
removeItem(gauntlet); removeItem(gauntlet);

View File

@@ -1,137 +1,68 @@
package forge.screens.gauntlet; package forge.screens.gauntlet;
import java.io.File; import java.io.File;
import java.text.NumberFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import forge.Forge;
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.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckType; import forge.deck.DeckType;
import forge.deck.FDeckChooser; import forge.deck.FDeckChooser;
import forge.game.GameType; import forge.game.GameType;
import forge.game.player.RegisteredPlayer;
import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletData;
import forge.gauntlet.GauntletIO; import forge.gauntlet.GauntletIO;
import forge.gauntlet.GauntletUtil; import forge.gauntlet.GauntletUtil;
import forge.model.FModel; import forge.model.FModel;
import forge.player.GamePlayerUtil;
import forge.quest.QuestUtil;
import forge.screens.LaunchScreen; import forge.screens.LaunchScreen;
import forge.screens.home.NewGameMenu; import forge.screens.home.NewGameMenu;
import forge.screens.settings.SettingsScreen; import forge.screens.home.LoadGameMenu.LoadGameScreen;
import forge.toolbox.FButton;
import forge.toolbox.FEvent;
import forge.toolbox.FList;
import forge.toolbox.FOptionPane;
import forge.toolbox.GuiChoose; import forge.toolbox.GuiChoose;
import forge.toolbox.ListChooser; import forge.toolbox.ListChooser;
import forge.toolbox.FEvent.FEventHandler;
import forge.util.Callback; import forge.util.Callback;
import forge.util.ThreadUtil;
import forge.util.Utils;
import forge.util.gui.SOptionPane;
public class NewGauntletScreen extends LaunchScreen { 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() { public NewGauntletScreen() {
super(null, NewGameMenu.getMenu()); 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 @Override
protected void doLayoutAboveBtnStart(float startY, float width, float height) { 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;
float x = 0; @Override
btnNewGauntlet.setBounds(x, y, buttonWidth, buttonHeight); protected void startMatch() {
x += buttonWidth + PADDING; GuiChoose.oneOrNone("Select a Gauntlet Type", new String[] {
btnRenameGauntlet.setBounds(x, y, buttonWidth, buttonHeight); "Quick Gauntlet",
x += buttonWidth + PADDING; "Custom Gauntlet",
btnDeleteGauntlet.setBounds(x, y, buttonWidth, buttonHeight); "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;
}
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() { private void createQuickGauntlet() {
@@ -157,8 +88,7 @@ public class NewGauntletScreen extends LaunchScreen {
public void run(Deck userDeck) { public void run(Deck userDeck) {
if (userDeck == null) { return; } if (userDeck == null) { return; }
lstGauntlets.addGauntlet(GauntletUtil.createQuickGauntlet( GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes);
userDeck, numOpponents, allowedDeckTypes));
} }
}); });
} }
@@ -205,7 +135,6 @@ public class NewGauntletScreen extends LaunchScreen {
GauntletUtil.setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_CUSTOM); GauntletUtil.setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_CUSTOM);
FModel.setGauntletData(gauntlet); FModel.setGauntletData(gauntlet);
gauntlet.reset(); gauntlet.reset();
lstGauntlets.addGauntlet(gauntlet);
} }
}); });
} }
@@ -241,240 +170,9 @@ public class NewGauntletScreen extends LaunchScreen {
GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_"); GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_");
FModel.setGauntletData(gauntlet); FModel.setGauntletData(gauntlet);
gauntlet.reset(); 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;
}
}
} }

View File

@@ -41,10 +41,10 @@ public class HomeScreen extends FScreen {
} }
}); });
buttons.get(buttons.size() - 1).setEnabled(false); buttons.get(buttons.size() - 1).setEnabled(false);
addButton("Deck Editor", new FEventHandler() { addButton("Deck Manager", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { 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() { addButton("Achievements", new FEventHandler() {

View File

@@ -78,7 +78,7 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
control = new LimitedWinLose(this, game0); control = new LimitedWinLose(this, game0);
break; break;
case Gauntlet: case Gauntlet:
case DeckEditorTest: case DeckManager:
control = new GauntletWinLose(this, game0); control = new GauntletWinLose(this, game0);
break; break;
default: // will catch it after switch default: // will catch it after switch

View File

@@ -81,7 +81,7 @@ public class LoadConquestScreen extends LaunchScreen {
@Override @Override
public void onActivate() { public void onActivate() {
lblOldConquests.setText("Loading Existing Quests..."); lblOldConquests.setText("Loading Existing Conquests...");
lstConquests.clear(); lstConquests.clear();
revalidate(); revalidate();

View File

@@ -47,7 +47,7 @@ public class NetDeckCategory extends StorageBase<Deck> {
switch (gameType) { switch (gameType) {
case Constructed: case Constructed:
case Gauntlet: case Gauntlet:
case DeckEditorTest: case DeckManager:
if (constructed == null) { if (constructed == null) {
constructed = loadCategories(ForgeConstants.NET_DECKS_LIST_FILE); constructed = loadCategories(ForgeConstants.NET_DECKS_LIST_FILE);
} }