mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
Hook things up so new quest can be created
This commit is contained in:
@@ -4,7 +4,7 @@ import forge.screens.FScreen;
|
|||||||
|
|
||||||
public class LoadQuestScreen extends FScreen {
|
public class LoadQuestScreen extends FScreen {
|
||||||
public LoadQuestScreen() {
|
public LoadQuestScreen() {
|
||||||
super("Load Quest", new QuestMenu());
|
super("Load Quest", QuestMenu.getMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
package forge.screens.quest;
|
package forge.screens.quest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import org.apache.commons.lang3.text.WordUtils;
|
import org.apache.commons.lang3.text.WordUtils;
|
||||||
|
|
||||||
@@ -12,13 +17,21 @@ import forge.assets.FSkinImage;
|
|||||||
import forge.card.MagicColor;
|
import forge.card.MagicColor;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.DeckGroup;
|
import forge.deck.DeckGroup;
|
||||||
|
import forge.deck.DeckSection;
|
||||||
import forge.game.GameFormat;
|
import forge.game.GameFormat;
|
||||||
|
import forge.item.PaperCard;
|
||||||
import forge.item.PreconDeck;
|
import forge.item.PreconDeck;
|
||||||
import forge.model.CardCollections;
|
import forge.model.CardCollections;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
|
import forge.properties.ForgeConstants;
|
||||||
import forge.quest.QuestController;
|
import forge.quest.QuestController;
|
||||||
|
import forge.quest.QuestMode;
|
||||||
|
import forge.quest.QuestUtil;
|
||||||
import forge.quest.QuestWorld;
|
import forge.quest.QuestWorld;
|
||||||
|
import forge.quest.StartingPoolPreferences;
|
||||||
import forge.quest.StartingPoolType;
|
import forge.quest.StartingPoolType;
|
||||||
|
import forge.quest.data.GameFormatQuest;
|
||||||
|
import forge.quest.data.QuestPreferences.QPref;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.toolbox.FCheckBox;
|
import forge.toolbox.FCheckBox;
|
||||||
import forge.toolbox.FComboBox;
|
import forge.toolbox.FComboBox;
|
||||||
@@ -28,13 +41,19 @@ import forge.toolbox.FEvent.FEventHandler;
|
|||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.toolbox.FScrollPane;
|
import forge.toolbox.FScrollPane;
|
||||||
|
import forge.util.FileUtil;
|
||||||
|
import forge.util.ThreadUtil;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
import forge.util.gui.SOptionPane;
|
||||||
import forge.util.storage.IStorage;
|
import forge.util.storage.IStorage;
|
||||||
|
|
||||||
public class NewQuestScreen extends FScreen {
|
public class NewQuestScreen extends FScreen {
|
||||||
private static final float EMBARK_BTN_HEIGHT = 2 * Utils.AVG_FINGER_HEIGHT;
|
private static final float EMBARK_BTN_HEIGHT = 2 * Utils.AVG_FINGER_HEIGHT;
|
||||||
private static final float PADDING = FOptionPane.PADDING;
|
private static final float PADDING = FOptionPane.PADDING;
|
||||||
|
|
||||||
|
private final List<String> customFormatCodes = new ArrayList<String>();
|
||||||
|
private final List<String> customPrizeFormatCodes = new ArrayList<String>();
|
||||||
|
|
||||||
private final FScrollPane scroller = add(new FScrollPane() {
|
private final FScrollPane scroller = add(new FScrollPane() {
|
||||||
@Override
|
@Override
|
||||||
protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) {
|
protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) {
|
||||||
@@ -110,7 +129,18 @@ public class NewQuestScreen extends FScreen {
|
|||||||
private final FCheckBox cbFantasy = scroller.add(new FCheckBox("Fantasy Mode"));
|
private final FCheckBox cbFantasy = scroller.add(new FCheckBox("Fantasy Mode"));
|
||||||
|
|
||||||
private final FLabel btnEmbark = add(new FLabel.ButtonBuilder()
|
private final FLabel btnEmbark = add(new FLabel.ButtonBuilder()
|
||||||
.font(FSkinFont.get(22)).text("Embark!").icon(FSkinImage.QUEST_ZEP).build());
|
.font(FSkinFont.get(22)).text("Embark!").icon(FSkinImage.QUEST_ZEP).command(new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
//create new quest in game thread so option panes can wait for input
|
||||||
|
ThreadUtil.invokeInGameThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
newQuest();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).build());
|
||||||
|
|
||||||
public NewQuestScreen() {
|
public NewQuestScreen() {
|
||||||
super("Start a New Quest");
|
super("Start a New Quest");
|
||||||
@@ -190,6 +220,43 @@ public class NewQuestScreen extends FScreen {
|
|||||||
preconDescriptions.put(name, description);
|
preconDescriptions.put(name, description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// disable the very powerful sets -- they can be unlocked later for a high price
|
||||||
|
final List<String> unselectableSets = new ArrayList<String>();
|
||||||
|
unselectableSets.add("LEA");
|
||||||
|
unselectableSets.add("LEB");
|
||||||
|
unselectableSets.add("MBP");
|
||||||
|
unselectableSets.add("VAN");
|
||||||
|
unselectableSets.add("ARC");
|
||||||
|
unselectableSets.add("PC2");
|
||||||
|
|
||||||
|
btnDefineCustomFormat.setCommand(new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
/*final DialogChooseSets dialog = new DialogChooseSets(customFormatCodes, unselectableSets, false);
|
||||||
|
dialog.setOkCallback(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
customFormatCodes.clear();
|
||||||
|
customFormatCodes.addAll(dialog.getSelectedSets());
|
||||||
|
}
|
||||||
|
});*/
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
btnPrizeDefineCustomFormat.setCommand(new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
/*final DialogChooseSets dialog = new DialogChooseSets(customPrizeFormatCodes, unselectableSets, false);
|
||||||
|
dialog.setOkCallback(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
customPrizeFormatCodes.clear();
|
||||||
|
customPrizeFormatCodes.addAll(dialog.getSelectedSets());
|
||||||
|
}
|
||||||
|
});*/
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Fantasy box enabled by Default
|
// Fantasy box enabled by Default
|
||||||
cbFantasy.setSelected(true);
|
cbFantasy.setSelected(true);
|
||||||
cbFantasy.setEnabled(true);
|
cbFantasy.setEnabled(true);
|
||||||
@@ -330,4 +397,125 @@ public class NewQuestScreen extends FScreen {
|
|||||||
btnEmbark.setBounds(PADDING, height - EMBARK_BTN_HEIGHT - PADDING, width - 2 * PADDING, EMBARK_BTN_HEIGHT);
|
btnEmbark.setBounds(PADDING, height - EMBARK_BTN_HEIGHT - PADDING, width - 2 * PADDING, EMBARK_BTN_HEIGHT);
|
||||||
scroller.setBounds(0, startY, width, btnEmbark.getTop() - startY);
|
scroller.setBounds(0, startY, width, btnEmbark.getTop() - startY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The actuator for new quests.
|
||||||
|
*/
|
||||||
|
private void newQuest() {
|
||||||
|
final QuestController qc = FModel.getQuest();
|
||||||
|
final QuestMode mode = isFantasy() ? QuestMode.Fantasy : QuestMode.Classic;
|
||||||
|
|
||||||
|
Deck dckStartPool = null;
|
||||||
|
GameFormat fmtStartPool = null;
|
||||||
|
int difficulty = getSelectedDifficulty();
|
||||||
|
QuestWorld startWorld = FModel.getWorlds().get(getStartingWorldName());
|
||||||
|
GameFormat worldFormat = (startWorld == null ? null : startWorld.getFormat());
|
||||||
|
|
||||||
|
if (worldFormat == null) {
|
||||||
|
switch(getStartingPoolType()) {
|
||||||
|
case Rotating:
|
||||||
|
fmtStartPool = getRotatingFormat();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CustomFormat:
|
||||||
|
if (customFormatCodes.isEmpty()) {
|
||||||
|
if (!SOptionPane.showConfirmDialog("You have defined a custom format that doesn't contain any sets.\nThis will start a game without restriction.\n\nContinue?")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmtStartPool = customFormatCodes.isEmpty() ? null : new GameFormatQuest("Custom", customFormatCodes, null); // chosen sets and no banend cards
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DraftDeck:
|
||||||
|
case SealedDeck:
|
||||||
|
case Cube:
|
||||||
|
dckStartPool = getSelectedDeck();
|
||||||
|
if (null == dckStartPool) {
|
||||||
|
FOptionPane.showMessageDialog("You have not selected a deck to start.", "Cannot start a quest", FOptionPane.ERROR_ICON);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Precon:
|
||||||
|
dckStartPool = QuestController.getPrecons().get(getSelectedPrecon()).getDeck();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Complete:
|
||||||
|
default:
|
||||||
|
// leave everything as nulls
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fmtStartPool = worldFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameFormat fmtPrizes = null;
|
||||||
|
|
||||||
|
// The starting QuestWorld format should NOT affect what you get if you travel to a world that doesn't have one...
|
||||||
|
// if (worldFormat == null) {
|
||||||
|
StartingPoolType prizedPoolType = getPrizedPoolType();
|
||||||
|
if (null == prizedPoolType) {
|
||||||
|
fmtPrizes = fmtStartPool;
|
||||||
|
if (null == fmtPrizes && dckStartPool != null) { // build it form deck
|
||||||
|
Set<String> sets = new HashSet<String>();
|
||||||
|
for (Entry<PaperCard, Integer> c : dckStartPool.getMain()) {
|
||||||
|
sets.add(c.getKey().getEdition());
|
||||||
|
}
|
||||||
|
if (dckStartPool.has(DeckSection.Sideboard)) {
|
||||||
|
for (Entry<PaperCard, Integer> c : dckStartPool.get(DeckSection.Sideboard)) {
|
||||||
|
sets.add(c.getKey().getEdition());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmtPrizes = new GameFormat("From deck", sets, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
switch(prizedPoolType) {
|
||||||
|
case Complete:
|
||||||
|
fmtPrizes = null;
|
||||||
|
break;
|
||||||
|
case CustomFormat:
|
||||||
|
if (customPrizeFormatCodes.isEmpty()) {
|
||||||
|
if (!SOptionPane.showConfirmDialog("You have defined custom format as containing no sets.\nThis will choose all editions without restriction as prized.\n\nContinue?")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmtPrizes = customPrizeFormatCodes.isEmpty() ? null : new GameFormat("Custom Prizes", customPrizeFormatCodes, null); // chosen sets and no banend cards
|
||||||
|
break;
|
||||||
|
case Rotating:
|
||||||
|
fmtPrizes = getPrizedRotatingFormat();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Should not get this result");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final StartingPoolPreferences userPrefs = new StartingPoolPreferences(randomizeColorDistribution(), getPreferredColor());
|
||||||
|
|
||||||
|
String questName;
|
||||||
|
while (true) {
|
||||||
|
questName = SOptionPane.showInputDialog("Poets will remember your quest as:", "Quest Name");
|
||||||
|
if (questName == null) { return; }
|
||||||
|
|
||||||
|
questName = QuestUtil.cleanString(questName);
|
||||||
|
|
||||||
|
if (questName.isEmpty()) {
|
||||||
|
FOptionPane.showMessageDialog("Please specify a quest name.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (FileUtil.doesFileExist(ForgeConstants.QUEST_SAVE_DIR + questName + ".dat")) {
|
||||||
|
FOptionPane.showMessageDialog("A quest already exists with that name. Please pick another quest name.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
qc.newGame(questName, difficulty, mode, fmtPrizes, isUnlockSetsAllowed(), dckStartPool, fmtStartPool, getStartingWorldName(), userPrefs);
|
||||||
|
qc.save();
|
||||||
|
|
||||||
|
// Save in preferences.
|
||||||
|
FModel.getQuestPreferences().setPref(QPref.CURRENT_QUEST, questName + ".dat");
|
||||||
|
FModel.getQuestPreferences().save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import forge.screens.FScreen;
|
|||||||
|
|
||||||
public class QuestBazaarScreen extends FScreen {
|
public class QuestBazaarScreen extends FScreen {
|
||||||
public QuestBazaarScreen() {
|
public QuestBazaarScreen() {
|
||||||
super("Bazaar", new QuestMenu());
|
super("Bazaar", QuestMenu.getMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import forge.screens.LaunchScreen;
|
|||||||
|
|
||||||
public class QuestChallengesScreen extends LaunchScreen {
|
public class QuestChallengesScreen extends LaunchScreen {
|
||||||
public QuestChallengesScreen() {
|
public QuestChallengesScreen() {
|
||||||
super("Quest Duels", new QuestMenu());
|
super("Quest Duels", QuestMenu.getMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import forge.screens.FScreen;
|
|||||||
|
|
||||||
public class QuestDecksScreen extends FScreen {
|
public class QuestDecksScreen extends FScreen {
|
||||||
public QuestDecksScreen() {
|
public QuestDecksScreen() {
|
||||||
super("Select Quest Deck", new QuestMenu());
|
super("Select Quest Deck", QuestMenu.getMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import forge.screens.LaunchScreen;
|
|||||||
|
|
||||||
public class QuestDuelsScreen extends LaunchScreen {
|
public class QuestDuelsScreen extends LaunchScreen {
|
||||||
public QuestDuelsScreen() {
|
public QuestDuelsScreen() {
|
||||||
super("Quest Duels", new QuestMenu());
|
super("Quest Duels", QuestMenu.getMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import forge.toolbox.FEvent;
|
|||||||
import forge.toolbox.FEvent.FEventHandler;
|
import forge.toolbox.FEvent.FEventHandler;
|
||||||
|
|
||||||
public class QuestMenu extends FPopupMenu implements IVQuestStats {
|
public class QuestMenu extends FPopupMenu implements IVQuestStats {
|
||||||
|
private static final QuestMenu questMenu = new QuestMenu();
|
||||||
private static final QuestBazaarScreen bazaarScreen = new QuestBazaarScreen();
|
private static final QuestBazaarScreen bazaarScreen = new QuestBazaarScreen();
|
||||||
private static QuestChallengesScreen challengesScreen = new QuestChallengesScreen();
|
private static QuestChallengesScreen challengesScreen = new QuestChallengesScreen();
|
||||||
private static QuestDecksScreen decksScreen = new QuestDecksScreen();
|
private static QuestDecksScreen decksScreen = new QuestDecksScreen();
|
||||||
@@ -23,6 +24,13 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats {
|
|||||||
private static QuestStatsScreen statsScreen = new QuestStatsScreen();
|
private static QuestStatsScreen statsScreen = new QuestStatsScreen();
|
||||||
private static QuestTournamentsScreen tournamentsScreen = new QuestTournamentsScreen();
|
private static QuestTournamentsScreen tournamentsScreen = new QuestTournamentsScreen();
|
||||||
|
|
||||||
|
public static QuestMenu getMenu() {
|
||||||
|
return questMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
private QuestMenu() {
|
||||||
|
}
|
||||||
|
|
||||||
public static void launchQuestMode() {
|
public static void launchQuestMode() {
|
||||||
QuestController qc = FModel.getQuest();
|
QuestController qc = FModel.getQuest();
|
||||||
if (qc == null || qc.getAssets() == null) {
|
if (qc == null || qc.getAssets() == null) {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import forge.screens.FScreen;
|
|||||||
|
|
||||||
public class QuestPrefsScreen extends FScreen {
|
public class QuestPrefsScreen extends FScreen {
|
||||||
public QuestPrefsScreen() {
|
public QuestPrefsScreen() {
|
||||||
super("Quest Preferences", new QuestMenu());
|
super("Quest Preferences", QuestMenu.getMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import forge.screens.FScreen;
|
|||||||
|
|
||||||
public class QuestSpellShopScreen extends FScreen {
|
public class QuestSpellShopScreen extends FScreen {
|
||||||
public QuestSpellShopScreen() {
|
public QuestSpellShopScreen() {
|
||||||
super("Spell Shop", new QuestMenu());
|
super("Spell Shop", QuestMenu.getMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public class QuestStatsScreen extends FScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public QuestStatsScreen() {
|
public QuestStatsScreen() {
|
||||||
super("Quest Statistics", new QuestMenu());
|
super("Quest Statistics", QuestMenu.getMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import forge.screens.LaunchScreen;
|
|||||||
|
|
||||||
public class QuestTournamentsScreen extends LaunchScreen {
|
public class QuestTournamentsScreen extends LaunchScreen {
|
||||||
public QuestTournamentsScreen() {
|
public QuestTournamentsScreen() {
|
||||||
super("Quest Duels", new QuestMenu());
|
super("Quest Duels", QuestMenu.getMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user