mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28: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", ""),
|
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."),
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
@Override
|
||||||
lstGauntlets.setBounds(0, y, width, height - y - buttonHeight - PADDING);
|
protected void startMatch() {
|
||||||
y += lstGauntlets.getHeight() + PADDING;
|
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;
|
switch (result) {
|
||||||
btnNewGauntlet.setBounds(x, y, buttonWidth, buttonHeight);
|
case "Quick Gauntlet":
|
||||||
x += buttonWidth + PADDING;
|
createQuickGauntlet();
|
||||||
btnRenameGauntlet.setBounds(x, y, buttonWidth, buttonHeight);
|
break;
|
||||||
x += buttonWidth + PADDING;
|
case "Custom Gauntlet":
|
||||||
btnDeleteGauntlet.setBounds(x, y, buttonWidth, buttonHeight);
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user