mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Quest menu update
This commit is contained in:
@@ -4,17 +4,7 @@
|
||||
package forge.gui.framework;
|
||||
|
||||
import com.google.common.collect.ObjectArrays;
|
||||
|
||||
import forge.screens.deckeditor.views.VAllDecks;
|
||||
import forge.screens.deckeditor.views.VBrawlDecks;
|
||||
import forge.screens.deckeditor.views.VCardCatalog;
|
||||
import forge.screens.deckeditor.views.VCommanderDecks;
|
||||
import forge.screens.deckeditor.views.VCurrentDeck;
|
||||
import forge.screens.deckeditor.views.VDeckgen;
|
||||
import forge.screens.deckeditor.views.VProbabilities;
|
||||
import forge.screens.deckeditor.views.VStatistics;
|
||||
import forge.screens.deckeditor.views.VTinyLeadersDecks;
|
||||
import forge.screens.deckeditor.views.VOathbreakerDecks;
|
||||
import forge.screens.deckeditor.views.*;
|
||||
import forge.screens.home.gauntlet.VSubmenuGauntletBuild;
|
||||
import forge.screens.home.gauntlet.VSubmenuGauntletContests;
|
||||
import forge.screens.home.gauntlet.VSubmenuGauntletLoad;
|
||||
@@ -22,21 +12,12 @@ import forge.screens.home.gauntlet.VSubmenuGauntletQuick;
|
||||
import forge.screens.home.online.VSubmenuOnlineLobby;
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleCreate;
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleSolve;
|
||||
import forge.screens.home.quest.VSubmenuChallenges;
|
||||
import forge.screens.home.quest.VSubmenuDuels;
|
||||
import forge.screens.home.quest.VSubmenuQuestData;
|
||||
import forge.screens.home.quest.VSubmenuQuestDecks;
|
||||
import forge.screens.home.quest.VSubmenuQuestDraft;
|
||||
import forge.screens.home.quest.VSubmenuQuestPrefs;
|
||||
import forge.screens.home.quest.*;
|
||||
import forge.screens.home.sanctioned.VSubmenuConstructed;
|
||||
import forge.screens.home.sanctioned.VSubmenuDraft;
|
||||
import forge.screens.home.sanctioned.VSubmenuSealed;
|
||||
import forge.screens.home.sanctioned.VSubmenuWinston;
|
||||
import forge.screens.home.settings.VSubmenuAchievements;
|
||||
import forge.screens.home.settings.VSubmenuAvatars;
|
||||
import forge.screens.home.settings.VSubmenuDownloaders;
|
||||
import forge.screens.home.settings.VSubmenuPreferences;
|
||||
import forge.screens.home.settings.VSubmenuReleaseNotes;
|
||||
import forge.screens.home.settings.*;
|
||||
import forge.screens.workshop.views.VCardDesigner;
|
||||
import forge.screens.workshop.views.VCardScript;
|
||||
import forge.screens.workshop.views.VWorkshopCatalog;
|
||||
@@ -67,10 +48,11 @@ public enum EDocID {
|
||||
WORKSHOP_CARDDESIGNER (VCardDesigner.SINGLETON_INSTANCE),
|
||||
WORKSHOP_CARDSCRIPT (VCardScript.SINGLETON_INSTANCE),
|
||||
|
||||
HOME_QUESTSTART (VSubmenuQuestStart.SINGLETON_INSTANCE),
|
||||
HOME_QUESTLOADDATA(VSubmenuQuestLoadData.SINGLETON_INSTANCE),
|
||||
HOME_QUESTDRAFTS (VSubmenuQuestDraft.SINGLETON_INSTANCE),
|
||||
HOME_QUESTCHALLENGES (VSubmenuChallenges.SINGLETON_INSTANCE),
|
||||
HOME_QUESTDUELS (VSubmenuDuels.SINGLETON_INSTANCE),
|
||||
HOME_QUESTDATA (VSubmenuQuestData.SINGLETON_INSTANCE),
|
||||
HOME_QUESTDECKS (VSubmenuQuestDecks.SINGLETON_INSTANCE),
|
||||
HOME_QUESTPREFS (VSubmenuQuestPrefs.SINGLETON_INSTANCE),
|
||||
HOME_GAUNTLETBUILD (VSubmenuGauntletBuild.SINGLETON_INSTANCE),
|
||||
|
||||
@@ -17,31 +17,9 @@
|
||||
*/
|
||||
package forge.screens.home;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.ScrollPaneConstants;
|
||||
import javax.swing.SwingConstants;
|
||||
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleCreate;
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleSolve;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import forge.Singletons;
|
||||
import forge.assets.FSkinProp;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.framework.ILocalRepaint;
|
||||
import forge.gui.framework.IVTopLevelUI;
|
||||
import forge.gui.framework.*;
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.screens.home.gauntlet.VSubmenuGauntletBuild;
|
||||
@@ -49,26 +27,25 @@ import forge.screens.home.gauntlet.VSubmenuGauntletContests;
|
||||
import forge.screens.home.gauntlet.VSubmenuGauntletLoad;
|
||||
import forge.screens.home.gauntlet.VSubmenuGauntletQuick;
|
||||
import forge.screens.home.online.VSubmenuOnlineLobby;
|
||||
import forge.screens.home.quest.VSubmenuChallenges;
|
||||
import forge.screens.home.quest.VSubmenuDuels;
|
||||
import forge.screens.home.quest.VSubmenuQuestData;
|
||||
import forge.screens.home.quest.VSubmenuQuestDecks;
|
||||
import forge.screens.home.quest.VSubmenuQuestDraft;
|
||||
import forge.screens.home.quest.VSubmenuQuestPrefs;
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleCreate;
|
||||
import forge.screens.home.puzzle.VSubmenuPuzzleSolve;
|
||||
import forge.screens.home.quest.*;
|
||||
import forge.screens.home.sanctioned.VSubmenuConstructed;
|
||||
import forge.screens.home.sanctioned.VSubmenuDraft;
|
||||
import forge.screens.home.sanctioned.VSubmenuSealed;
|
||||
import forge.screens.home.settings.VSubmenuAchievements;
|
||||
import forge.screens.home.settings.VSubmenuAvatars;
|
||||
import forge.screens.home.settings.VSubmenuDownloaders;
|
||||
import forge.screens.home.settings.VSubmenuPreferences;
|
||||
import forge.screens.home.settings.VSubmenuReleaseNotes;
|
||||
import forge.screens.home.settings.*;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FScrollPanel;
|
||||
import forge.toolbox.FSkin;
|
||||
import forge.toolbox.FSkin.SkinColor;
|
||||
import forge.toolbox.FSkin.SkinnedPanel;
|
||||
import forge.view.FView;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Top level view class for home UI drag layout.<br>
|
||||
@@ -122,11 +99,12 @@ public enum VHomeUI implements IVTopLevelUI {
|
||||
|
||||
allSubmenus.add(VSubmenuOnlineLobby.SINGLETON_INSTANCE);
|
||||
|
||||
allSubmenus.add(VSubmenuQuestStart.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuQuestLoadData.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuQuestDecks.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuDuels.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuChallenges.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuQuestDraft.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuQuestDecks.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuQuestData.SINGLETON_INSTANCE);
|
||||
allSubmenus.add(VSubmenuQuestPrefs.SINGLETON_INSTANCE);
|
||||
|
||||
allSubmenus.add(VSubmenuGauntletQuick.SINGLETON_INSTANCE);
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
package forge.screens.home.quest;
|
||||
|
||||
import forge.UiCommand;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.quest.QuestController;
|
||||
import forge.quest.data.QuestData;
|
||||
import forge.quest.data.QuestPreferences.QPref;
|
||||
import forge.quest.io.QuestDataIO;
|
||||
import forge.screens.bazaar.CBazaarUI;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Controls the quest data submenu in the home UI.
|
||||
*
|
||||
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public enum CSubmenuQuestLoadData implements ICDoc {
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
private final Map<String, QuestData> arrQuests = new HashMap<>();
|
||||
|
||||
private final UiCommand cmdQuestSelect = new UiCommand() {
|
||||
@Override public void run() {
|
||||
changeQuest();
|
||||
}
|
||||
};
|
||||
private final UiCommand cmdQuestUpdate = new UiCommand() {
|
||||
@Override public void run() {
|
||||
update();
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void register() {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.control.home.IControlSubmenu#update()
|
||||
*/
|
||||
@Override
|
||||
public void initialize() {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.control.home.IControlSubmenu#update()
|
||||
*/
|
||||
@Override
|
||||
public void update() {
|
||||
|
||||
final VSubmenuQuestLoadData view = VSubmenuQuestLoadData.SINGLETON_INSTANCE;
|
||||
final File dirQuests = new File(ForgeConstants.QUEST_SAVE_DIR);
|
||||
final QuestController qc = FModel.getQuest();
|
||||
ArrayList<String> restorableQuests = new ArrayList<>();
|
||||
|
||||
// Iterate over files and load quest data for each.
|
||||
final FilenameFilter takeDatFiles = new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(final File dir, final String name) {
|
||||
return name.endsWith(".dat");
|
||||
}
|
||||
};
|
||||
final File[] arrFiles = dirQuests.listFiles(takeDatFiles);
|
||||
arrQuests.clear();
|
||||
for (final File f : arrFiles) {
|
||||
try {
|
||||
System.out.println(String.format("About to load quest (%s)... ", f.getName()));
|
||||
arrQuests.put(f.getName(), QuestDataIO.loadData(f));
|
||||
} catch(IOException ex) {
|
||||
ex.printStackTrace();
|
||||
System.out.println(String.format("Error loading quest data (%s).. skipping for now..", f.getName()));
|
||||
restorableQuests.add(f.getName());
|
||||
}
|
||||
}
|
||||
|
||||
// Populate list with available quest data.
|
||||
view.getLstQuests().setQuests(new ArrayList<>(arrQuests.values()));
|
||||
|
||||
// If there are quests available, force select.
|
||||
if (!arrQuests.isEmpty()) {
|
||||
final String questName = FModel.getQuestPreferences().getPref(QPref.CURRENT_QUEST);
|
||||
|
||||
// Attempt to select previous quest.
|
||||
if (arrQuests.get(questName) != null) {
|
||||
view.getLstQuests().setSelectedQuestData(arrQuests.get(questName));
|
||||
}
|
||||
else {
|
||||
view.getLstQuests().setSelectedIndex(0);
|
||||
}
|
||||
|
||||
// Drop into AllZone.
|
||||
qc.load(view.getLstQuests().getSelectedQuest());
|
||||
}
|
||||
else {
|
||||
qc.load(null);
|
||||
}
|
||||
|
||||
view.getLstQuests().setSelectCommand(cmdQuestSelect);
|
||||
view.getLstQuests().setDeleteCommand(cmdQuestUpdate);
|
||||
view.getLstQuests().setEditCommand(cmdQuestUpdate);
|
||||
|
||||
}
|
||||
|
||||
/** Changes between quest data files. */
|
||||
private void changeQuest() {
|
||||
|
||||
FModel.getQuest().load(VSubmenuQuestLoadData.SINGLETON_INSTANCE.getLstQuests().getSelectedQuest());
|
||||
|
||||
// Save in preferences.
|
||||
FModel.getQuestPreferences().setPref(QPref.CURRENT_QUEST, FModel.getQuest().getName() + ".dat");
|
||||
FModel.getQuestPreferences().save();
|
||||
|
||||
CSubmenuDuels.SINGLETON_INSTANCE.update();
|
||||
CSubmenuChallenges.SINGLETON_INSTANCE.update();
|
||||
CSubmenuQuestDecks.SINGLETON_INSTANCE.update();
|
||||
CSubmenuQuestDraft.SINGLETON_INSTANCE.update();
|
||||
CBazaarUI.SINGLETON_INSTANCE.update();
|
||||
|
||||
}
|
||||
|
||||
private Map<String, QuestData> getAllQuests() {
|
||||
return arrQuests;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,24 +7,16 @@ import forge.game.GameFormat;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.item.PaperCard;
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.quest.*;
|
||||
import forge.quest.StartingPoolPreferences.PoolType;
|
||||
import forge.quest.data.DeckConstructionRules;
|
||||
import forge.quest.data.GameFormatQuest;
|
||||
import forge.quest.data.QuestData;
|
||||
import forge.quest.data.QuestPreferences.QPref;
|
||||
import forge.quest.io.QuestDataIO;
|
||||
import forge.screens.bazaar.CBazaarUI;
|
||||
import forge.quest.data.QuestPreferences;
|
||||
import forge.screens.home.CHomeUI;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
* Controls the quest data submenu in the home UI.
|
||||
@@ -33,28 +25,17 @@ import java.util.Map.Entry;
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public enum CSubmenuQuestData implements ICDoc {
|
||||
public enum CSubmenuQuestStart implements ICDoc {
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
private final Map<String, QuestData> arrQuests = new HashMap<>();
|
||||
|
||||
private final VSubmenuQuestData view = VSubmenuQuestData.SINGLETON_INSTANCE;
|
||||
private final VSubmenuQuestStart view = VSubmenuQuestStart.SINGLETON_INSTANCE;
|
||||
private final List<String> customFormatCodes = new ArrayList<>();
|
||||
private final List<String> customPrizeFormatCodes = new ArrayList<>();
|
||||
|
||||
private final UiCommand cmdQuestSelect = new UiCommand() {
|
||||
@Override public void run() {
|
||||
changeQuest();
|
||||
}
|
||||
};
|
||||
private final UiCommand cmdQuestUpdate = new UiCommand() {
|
||||
@Override public void run() {
|
||||
update();
|
||||
}
|
||||
};
|
||||
|
||||
private List<Byte> preferredColors = new ArrayList<>();
|
||||
private PoolType poolType = PoolType.BALANCED;
|
||||
private StartingPoolPreferences.PoolType poolType = StartingPoolPreferences.PoolType.BALANCED;
|
||||
private boolean includeArtifacts = true;
|
||||
private int numberOfBoosters = 0;
|
||||
|
||||
@@ -166,65 +147,6 @@ public enum CSubmenuQuestData implements ICDoc {
|
||||
*/
|
||||
@Override
|
||||
public void update() {
|
||||
|
||||
final VSubmenuQuestData view = VSubmenuQuestData.SINGLETON_INSTANCE;
|
||||
final File dirQuests = new File(ForgeConstants.QUEST_SAVE_DIR);
|
||||
final QuestController qc = FModel.getQuest();
|
||||
ArrayList<String> restorableQuests = new ArrayList<>();
|
||||
|
||||
// Iterate over files and load quest data for each.
|
||||
final FilenameFilter takeDatFiles = new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(final File dir, final String name) {
|
||||
return name.endsWith(".dat");
|
||||
}
|
||||
};
|
||||
final File[] arrFiles = dirQuests.listFiles(takeDatFiles);
|
||||
arrQuests.clear();
|
||||
for (final File f : arrFiles) {
|
||||
try {
|
||||
System.out.println(String.format("About to load quest (%s)... ", f.getName()));
|
||||
arrQuests.put(f.getName(), QuestDataIO.loadData(f));
|
||||
} catch(IOException ex) {
|
||||
ex.printStackTrace();
|
||||
System.out.println(String.format("Error loading quest data (%s).. skipping for now..", f.getName()));
|
||||
restorableQuests.add(f.getName());
|
||||
}
|
||||
}
|
||||
|
||||
// Populate list with available quest data.
|
||||
view.getLstQuests().setQuests(new ArrayList<>(arrQuests.values()));
|
||||
|
||||
// If there are quests available, force select.
|
||||
if (!arrQuests.isEmpty()) {
|
||||
final String questName = FModel.getQuestPreferences().getPref(QPref.CURRENT_QUEST);
|
||||
|
||||
// Attempt to select previous quest.
|
||||
if (arrQuests.get(questName) != null) {
|
||||
view.getLstQuests().setSelectedQuestData(arrQuests.get(questName));
|
||||
}
|
||||
else {
|
||||
view.getLstQuests().setSelectedIndex(0);
|
||||
}
|
||||
|
||||
// Drop into AllZone.
|
||||
qc.load(view.getLstQuests().getSelectedQuest());
|
||||
}
|
||||
else {
|
||||
qc.load(null);
|
||||
}
|
||||
|
||||
view.getLstQuests().setSelectCommand(cmdQuestSelect);
|
||||
view.getLstQuests().setDeleteCommand(cmdQuestUpdate);
|
||||
view.getLstQuests().setEditCommand(cmdQuestUpdate);
|
||||
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
view.getBtnEmbark().requestFocusInWindow();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -232,7 +154,7 @@ public enum CSubmenuQuestData implements ICDoc {
|
||||
*/
|
||||
private void newQuest() {
|
||||
final Localizer localizer = Localizer.getInstance();
|
||||
final VSubmenuQuestData view = VSubmenuQuestData.SINGLETON_INSTANCE;
|
||||
final VSubmenuQuestStart view = VSubmenuQuestStart.SINGLETON_INSTANCE;
|
||||
final int difficulty = view.getSelectedDifficulty();
|
||||
|
||||
final QuestMode mode = view.isFantasy() ? QuestMode.Fantasy : QuestMode.Classic;
|
||||
@@ -245,38 +167,38 @@ public enum CSubmenuQuestData implements ICDoc {
|
||||
|
||||
if (worldFormat == null) {
|
||||
switch(view.getStartingPoolType()) {
|
||||
case Sanctioned:
|
||||
fmtStartPool = view.getRotatingFormat();
|
||||
break;
|
||||
case Sanctioned:
|
||||
fmtStartPool = view.getRotatingFormat();
|
||||
break;
|
||||
|
||||
case Casual:
|
||||
case CustomFormat:
|
||||
if (customFormatCodes.isEmpty()) {
|
||||
if (!FOptionPane.showConfirmDialog(localizer.getMessage("lblNotFormatDefined"))) {
|
||||
case Casual:
|
||||
case CustomFormat:
|
||||
if (customFormatCodes.isEmpty()) {
|
||||
if (!FOptionPane.showConfirmDialog(localizer.getMessage("lblNotFormatDefined"))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
fmtStartPool = customFormatCodes.isEmpty() ? null : new GameFormatQuest("Custom", customFormatCodes, null); // chosen sets and no banned cards
|
||||
break;
|
||||
|
||||
case DraftDeck:
|
||||
case SealedDeck:
|
||||
case Cube:
|
||||
dckStartPool = view.getSelectedDeck();
|
||||
if (null == dckStartPool) {
|
||||
FOptionPane.showMessageDialog(localizer.getMessage("lbldckStartPool"), localizer.getMessage("lblCannotStartaQuest"), FOptionPane.ERROR_ICON);
|
||||
return;
|
||||
}
|
||||
}
|
||||
fmtStartPool = customFormatCodes.isEmpty() ? null : new GameFormatQuest("Custom", customFormatCodes, null); // chosen sets and no banned cards
|
||||
break;
|
||||
break;
|
||||
|
||||
case DraftDeck:
|
||||
case SealedDeck:
|
||||
case Cube:
|
||||
dckStartPool = view.getSelectedDeck();
|
||||
if (null == dckStartPool) {
|
||||
FOptionPane.showMessageDialog(localizer.getMessage("lbldckStartPool"), localizer.getMessage("lblCannotStartaQuest"), FOptionPane.ERROR_ICON);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case Precon:
|
||||
dckStartPool = QuestController.getPrecons().get(view.getSelectedPrecon()).getDeck();
|
||||
break;
|
||||
|
||||
case Precon:
|
||||
dckStartPool = QuestController.getPrecons().get(view.getSelectedPrecon()).getDeck();
|
||||
break;
|
||||
|
||||
case Complete:
|
||||
default:
|
||||
// leave everything as nulls
|
||||
break;
|
||||
case Complete:
|
||||
default:
|
||||
// leave everything as nulls
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -290,11 +212,11 @@ public enum CSubmenuQuestData implements ICDoc {
|
||||
fmtPrizes = fmtStartPool;
|
||||
if (null == fmtPrizes && dckStartPool != null) { // build it form deck
|
||||
final Set<String> sets = new HashSet<>();
|
||||
for (final Entry<PaperCard, Integer> c : dckStartPool.getMain()) {
|
||||
for (final Map.Entry<PaperCard, Integer> c : dckStartPool.getMain()) {
|
||||
sets.add(c.getKey().getEdition());
|
||||
}
|
||||
if (dckStartPool.has(DeckSection.Sideboard)) {
|
||||
for (final Entry<PaperCard, Integer> c : dckStartPool.get(DeckSection.Sideboard)) {
|
||||
for (final Map.Entry<PaperCard, Integer> c : dckStartPool.get(DeckSection.Sideboard)) {
|
||||
sets.add(c.getKey().getEdition());
|
||||
}
|
||||
}
|
||||
@@ -303,23 +225,23 @@ public enum CSubmenuQuestData implements ICDoc {
|
||||
}
|
||||
else {
|
||||
switch(prizedPoolType) {
|
||||
case Complete:
|
||||
fmtPrizes = null;
|
||||
break;
|
||||
case Casual:
|
||||
case CustomFormat:
|
||||
if (customPrizeFormatCodes.isEmpty()) {
|
||||
if (!FOptionPane.showConfirmDialog(localizer.getMessage("lblNotFormatDefined"))) {
|
||||
return;
|
||||
case Complete:
|
||||
fmtPrizes = null;
|
||||
break;
|
||||
case Casual:
|
||||
case CustomFormat:
|
||||
if (customPrizeFormatCodes.isEmpty()) {
|
||||
if (!FOptionPane.showConfirmDialog(localizer.getMessage("lblNotFormatDefined"))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
fmtPrizes = customPrizeFormatCodes.isEmpty() ? null : new GameFormat("Custom Prizes", customPrizeFormatCodes, null); // chosen sets and no banned cards
|
||||
break;
|
||||
case Sanctioned:
|
||||
fmtPrizes = view.getPrizedRotatingFormat();
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("Should not get this result");
|
||||
fmtPrizes = customPrizeFormatCodes.isEmpty() ? null : new GameFormat("Custom Prizes", customPrizeFormatCodes, null); // chosen sets and no banned cards
|
||||
break;
|
||||
case Sanctioned:
|
||||
fmtPrizes = view.getPrizedRotatingFormat();
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("Should not get this result");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,7 +268,7 @@ public enum CSubmenuQuestData implements ICDoc {
|
||||
//Apply the appropriate deck construction rules for this quest
|
||||
DeckConstructionRules dcr = DeckConstructionRules.Default;
|
||||
|
||||
if(VSubmenuQuestData.SINGLETON_INSTANCE.isCommander()){
|
||||
if(VSubmenuQuestStart.SINGLETON_INSTANCE.isCommander()){
|
||||
dcr = DeckConstructionRules.Commander;
|
||||
}
|
||||
|
||||
@@ -356,28 +278,11 @@ public enum CSubmenuQuestData implements ICDoc {
|
||||
FModel.getQuest().save();
|
||||
|
||||
// Save in preferences.
|
||||
FModel.getQuestPreferences().setPref(QPref.CURRENT_QUEST, questName + ".dat");
|
||||
FModel.getQuestPreferences().setPref(QuestPreferences.QPref.CURRENT_QUEST, questName + ".dat");
|
||||
FModel.getQuestPreferences().save();
|
||||
|
||||
update();
|
||||
|
||||
}
|
||||
|
||||
/** Changes between quest data files. */
|
||||
private void changeQuest() {
|
||||
|
||||
FModel.getQuest().load(VSubmenuQuestData.SINGLETON_INSTANCE.getLstQuests().getSelectedQuest());
|
||||
|
||||
// Save in preferences.
|
||||
FModel.getQuestPreferences().setPref(QPref.CURRENT_QUEST, FModel.getQuest().getName() + ".dat");
|
||||
FModel.getQuestPreferences().save();
|
||||
|
||||
CSubmenuDuels.SINGLETON_INSTANCE.update();
|
||||
CSubmenuChallenges.SINGLETON_INSTANCE.update();
|
||||
CSubmenuQuestDecks.SINGLETON_INSTANCE.update();
|
||||
CSubmenuQuestDraft.SINGLETON_INSTANCE.update();
|
||||
CBazaarUI.SINGLETON_INSTANCE.update();
|
||||
|
||||
// Change to QuestDecks screen
|
||||
CHomeUI.SINGLETON_INSTANCE.itemClick(VSubmenuQuestDecks.SINGLETON_INSTANCE.getDocumentID());
|
||||
}
|
||||
|
||||
private Map<String, QuestData> getAllQuests() {
|
||||
@@ -0,0 +1,138 @@
|
||||
package forge.screens.home.quest;
|
||||
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.DragTab;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.screens.home.EMenuGroup;
|
||||
import forge.screens.home.IVSubmenu;
|
||||
import forge.screens.home.VHomeUI;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.toolbox.FSkin;
|
||||
import forge.util.Localizer;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* Assembles Swing components of quest data submenu singleton.
|
||||
*
|
||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
||||
*/
|
||||
public enum VSubmenuQuestLoadData implements IVSubmenu<CSubmenuQuestLoadData> {
|
||||
SINGLETON_INSTANCE;
|
||||
final Localizer localizer = Localizer.getInstance();
|
||||
|
||||
// Fields used with interface IVDoc
|
||||
private DragCell parentCell;
|
||||
private final DragTab tab = new DragTab(localizer.getMessage("lblQuestData"));
|
||||
|
||||
private final FLabel lblTitle = new FLabel.Builder()
|
||||
.text(localizer.getMessage("lblLoadQuestData")).fontAlign(SwingConstants.CENTER)
|
||||
.opaque(true).fontSize(16).build();
|
||||
|
||||
String str= ForgeConstants.QUEST_SAVE_DIR.replace('\\', '/');
|
||||
private final FLabel lblOldQuests = new FLabel.Builder().text(localizer.getMessage("lblOldQuestData").replace("%s",str)).fontAlign(SwingConstants.CENTER).fontSize(12).build();
|
||||
private final QuestFileLister lstQuests = new QuestFileLister();
|
||||
private final FScrollPane scrQuests = new FScrollPane(lstQuests, false);
|
||||
private final JPanel pnlOptions = new JPanel();
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
VSubmenuQuestLoadData() {
|
||||
|
||||
lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.view.home.IViewSubmenu#populate()
|
||||
*/
|
||||
@Override
|
||||
public void populate() {
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().removeAll();
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0, wrap"));
|
||||
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblTitle, "w 98%!, h 30px!, gap 1% 0 15px 15px");
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblOldQuests, "w 98%, h 30px!, gap 1% 0 0 5px");
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(scrQuests, "w 98%!, growy, pushy, gap 1% 0 0 20px");
|
||||
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf();
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.view.home.IViewSubmenu#getGroup()
|
||||
*/
|
||||
@Override
|
||||
public EMenuGroup getGroupEnum() {
|
||||
return EMenuGroup.QUEST;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.gui.home.IVSubmenu#getMenuTitle()
|
||||
*/
|
||||
@Override
|
||||
public String getMenuTitle() {
|
||||
return localizer.getMessage("lblNewLoadQuest");
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.gui.home.IVSubmenu#getMenuName()
|
||||
*/
|
||||
@Override
|
||||
public EDocID getItemEnum() {
|
||||
return EDocID.HOME_QUESTLOADDATA;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@link forge.screens.home.quest.QuestFileLister}
|
||||
*/
|
||||
public QuestFileLister getLstQuests() {
|
||||
return this.lstQuests;
|
||||
}
|
||||
|
||||
//========== Overridden from IVDoc
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.gui.framework.IVDoc#getDocumentID()
|
||||
*/
|
||||
@Override
|
||||
public EDocID getDocumentID() {
|
||||
return EDocID.HOME_QUESTLOADDATA;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.gui.framework.IVDoc#getTabLabel()
|
||||
*/
|
||||
@Override
|
||||
public DragTab getTabLabel() {
|
||||
return tab;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.gui.framework.IVDoc#getLayoutControl()
|
||||
*/
|
||||
@Override
|
||||
public CSubmenuQuestLoadData getLayoutControl() {
|
||||
return CSubmenuQuestLoadData.SINGLETON_INSTANCE;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.gui.framework.IVDoc#setParentCell(forge.gui.framework.DragCell)
|
||||
*/
|
||||
@Override
|
||||
public void setParentCell(final DragCell cell0) {
|
||||
this.parentCell = cell0;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.gui.framework.IVDoc#getParentCell()
|
||||
*/
|
||||
@Override
|
||||
public DragCell getParentCell() {
|
||||
return parentCell;
|
||||
}
|
||||
}
|
||||
@@ -34,24 +34,17 @@ import java.util.Map;
|
||||
*
|
||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
||||
*/
|
||||
public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
||||
public enum VSubmenuQuestStart implements IVSubmenu<CSubmenuQuestStart> {
|
||||
SINGLETON_INSTANCE;
|
||||
final Localizer localizer = Localizer.getInstance();
|
||||
|
||||
// Fields used with interface IVDoc
|
||||
private DragCell parentCell;
|
||||
private final DragTab tab = new DragTab(localizer.getMessage("lblQuestData"));
|
||||
|
||||
private final FLabel lblTitle = new FLabel.Builder()
|
||||
.text(localizer.getMessage("lblLoadQuestData")).fontAlign(SwingConstants.CENTER)
|
||||
.opaque(true).fontSize(16).build();
|
||||
private final DragTab tab = new DragTab(localizer.getMessage("lblStartanewQuest"));
|
||||
|
||||
private final FLabel lblTitleNew = new FLabel.Builder().text(localizer.getMessage("lblStartanewQuest")).opaque(true).fontSize(16).build();
|
||||
|
||||
String str= ForgeConstants.QUEST_SAVE_DIR.replace('\\', '/');
|
||||
private final FLabel lblOldQuests = new FLabel.Builder().text(localizer.getMessage("lblOldQuestData").replace("%s",str)).fontAlign(SwingConstants.CENTER).fontSize(12).build();
|
||||
private final QuestFileLister lstQuests = new QuestFileLister();
|
||||
private final FScrollPane scrQuests = new FScrollPane(lstQuests, false);
|
||||
private final JPanel pnlOptions = new JPanel();
|
||||
|
||||
/* First column */
|
||||
@@ -188,9 +181,8 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
||||
* Constructor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
VSubmenuQuestData() {
|
||||
VSubmenuQuestStart() {
|
||||
|
||||
lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
||||
lblTitleNew.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
||||
|
||||
final JXButtonPanel difficultyPanel = new JXButtonPanel();
|
||||
@@ -286,7 +278,7 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
||||
//Otherwise, set the starting world to Random Commander
|
||||
cbxStartingWorld.setSelectedItem(FModel.getWorlds().get("Random Commander"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
@@ -368,11 +360,8 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().removeAll();
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0, wrap"));
|
||||
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblTitle, "w 98%!, h 30px!, gap 1% 0 15px 15px");
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblOldQuests, "w 98%, h 30px!, gap 1% 0 0 5px");
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(scrQuests, "w 98%!, growy, pushy, gap 1% 0 0 20px");
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblTitleNew, "w 98%, h 30px!, gap 1% 0 0 10px");
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlOptions, "w 98%!, gap 1% 0 0 0");
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblTitleNew, "w 98%, h 30px!, gap 1% 0 15px 10px");
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlOptions, "w 98%!, growy, pushy, gap 1% 0 0 0");
|
||||
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf();
|
||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
|
||||
@@ -391,7 +380,7 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
||||
*/
|
||||
@Override
|
||||
public String getMenuTitle() {
|
||||
return localizer.getMessage("lblNewLoadQuest");
|
||||
return localizer.getMessage("lblStartanewQuest");
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -399,16 +388,9 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
||||
*/
|
||||
@Override
|
||||
public EDocID getItemEnum() {
|
||||
return EDocID.HOME_QUESTDATA;
|
||||
return getDocumentID();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@link forge.screens.home.quest.QuestFileLister}
|
||||
*/
|
||||
public QuestFileLister getLstQuests() {
|
||||
return this.lstQuests;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return {@link forge.toolbox.FLabel}
|
||||
*/
|
||||
@@ -423,7 +405,7 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
||||
*/
|
||||
@Override
|
||||
public EDocID getDocumentID() {
|
||||
return EDocID.HOME_QUESTDATA;
|
||||
return EDocID.HOME_QUESTSTART;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -438,8 +420,8 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
||||
* @see forge.gui.framework.IVDoc#getLayoutControl()
|
||||
*/
|
||||
@Override
|
||||
public CSubmenuQuestData getLayoutControl() {
|
||||
return CSubmenuQuestData.SINGLETON_INSTANCE;
|
||||
public CSubmenuQuestStart getLayoutControl() {
|
||||
return CSubmenuQuestStart.SINGLETON_INSTANCE;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -469,7 +469,7 @@ lblEmbark=Aufbrechen!
|
||||
lblboxCompleteSet=Du startest mit je 4 Stück jeder Karte der gewählten Sets.
|
||||
lblboxAllowDuplicates=In deiner Startsammlung können Karten mehrfach vorkommen.
|
||||
lblSameAsStartingPool=Wie Startsammlung
|
||||
lblNewLoadQuest=Neu / Lade Quest
|
||||
lblNewLoadQuest=Lade Quest
|
||||
#CSubmenuQChallenges.java
|
||||
lblLaunchaZeppelin=Starte einen Zeppelin.
|
||||
lblPlant=Pflanze
|
||||
|
||||
@@ -441,7 +441,7 @@ cbLaunchZeppelin=Launch Zeppelin
|
||||
#VSubmenuQuest.java
|
||||
lblQuestData=Quest Data
|
||||
lblLoadQuestData=Load Quest Data
|
||||
lblStartanewQuest=Start a new Quest
|
||||
lblStartanewQuest=Start Quest
|
||||
lblOldQuestData=Old quest data? Put into %s and restart Forge.
|
||||
rbEasy=Easy
|
||||
rbMedium=Medium
|
||||
@@ -469,7 +469,7 @@ lblEmbark=Embark!
|
||||
lblboxCompleteSet=You will start the quest with 4 of each card in the sets you have selected.
|
||||
lblboxAllowDuplicates=When your starting pool is generated, duplicates of cards may be included.
|
||||
lblSameAsStartingPool=Same as starting pool
|
||||
lblNewLoadQuest=New / Load Quest
|
||||
lblNewLoadQuest=Load Quest
|
||||
#CSubmenuQChallenges.java
|
||||
lblLaunchaZeppelin=Launch a Zeppelin.
|
||||
lblPlant=Plant
|
||||
|
||||
@@ -469,7 +469,7 @@ lblEmbark=¡Embarcarse!
|
||||
lblboxCompleteSet=Comenzarás la aventura con 4 copias de cada carta en los sets que hayas seleccionado.
|
||||
lblboxAllowDuplicates=Cuando tu pool inicial se genera, se puede incluir duplicados de cartas.
|
||||
lblSameAsStartingPool=Igual que el pool inicial
|
||||
lblNewLoadQuest=Nueva/Cargar Aventura
|
||||
lblNewLoadQuest=Cargar Aventura
|
||||
#CSubmenuQChallenges.java
|
||||
lblLaunchaZeppelin=Lanzar el Zeppelin.
|
||||
lblPlant=Planta
|
||||
|
||||
@@ -469,7 +469,7 @@ lblEmbark=开始!
|
||||
lblboxCompleteSet=你将使用所选系列的每张卡中的4张开始探索
|
||||
lblboxAllowDuplicates=生成初始牌池时,可能包含重复的卡。
|
||||
lblSameAsStartingPool=与初始牌池相同
|
||||
lblNewLoadQuest=新建/载入
|
||||
lblNewLoadQuest=载入
|
||||
#CSubmenuQChallenges.java
|
||||
lblLaunchaZeppelin=启动一个飞艇.
|
||||
lblPlant=植物
|
||||
|
||||
@@ -23,7 +23,7 @@ import java.util.List;
|
||||
* This class is used to store the Quest starting pool preferences.
|
||||
* (It could be expanded to store other Quest starting preferences as well,
|
||||
* in order to reduce the number of parameters that need to be passed to
|
||||
* QuestController.newGame from CSubmenuQuestData)
|
||||
* QuestController.newGame from CSubmenuQuestStart)
|
||||
*
|
||||
*/
|
||||
public final class StartingPoolPreferences {
|
||||
|
||||
Reference in New Issue
Block a user