Quest menu update

This commit is contained in:
Sol
2020-05-18 03:29:30 +00:00
committed by Michael Kamensky
parent 56b5a6d3c2
commit 74b3ecd8ce
11 changed files with 364 additions and 245 deletions

View File

@@ -4,17 +4,7 @@
package forge.gui.framework; package forge.gui.framework;
import com.google.common.collect.ObjectArrays; import com.google.common.collect.ObjectArrays;
import forge.screens.deckeditor.views.*;
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.home.gauntlet.VSubmenuGauntletBuild; import forge.screens.home.gauntlet.VSubmenuGauntletBuild;
import forge.screens.home.gauntlet.VSubmenuGauntletContests; import forge.screens.home.gauntlet.VSubmenuGauntletContests;
import forge.screens.home.gauntlet.VSubmenuGauntletLoad; 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.online.VSubmenuOnlineLobby;
import forge.screens.home.puzzle.VSubmenuPuzzleCreate; import forge.screens.home.puzzle.VSubmenuPuzzleCreate;
import forge.screens.home.puzzle.VSubmenuPuzzleSolve; import forge.screens.home.puzzle.VSubmenuPuzzleSolve;
import forge.screens.home.quest.VSubmenuChallenges; import forge.screens.home.quest.*;
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.sanctioned.VSubmenuConstructed; import forge.screens.home.sanctioned.VSubmenuConstructed;
import forge.screens.home.sanctioned.VSubmenuDraft; import forge.screens.home.sanctioned.VSubmenuDraft;
import forge.screens.home.sanctioned.VSubmenuSealed; import forge.screens.home.sanctioned.VSubmenuSealed;
import forge.screens.home.sanctioned.VSubmenuWinston; import forge.screens.home.sanctioned.VSubmenuWinston;
import forge.screens.home.settings.VSubmenuAchievements; import forge.screens.home.settings.*;
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.workshop.views.VCardDesigner; import forge.screens.workshop.views.VCardDesigner;
import forge.screens.workshop.views.VCardScript; import forge.screens.workshop.views.VCardScript;
import forge.screens.workshop.views.VWorkshopCatalog; import forge.screens.workshop.views.VWorkshopCatalog;
@@ -67,10 +48,11 @@ public enum EDocID {
WORKSHOP_CARDDESIGNER (VCardDesigner.SINGLETON_INSTANCE), WORKSHOP_CARDDESIGNER (VCardDesigner.SINGLETON_INSTANCE),
WORKSHOP_CARDSCRIPT (VCardScript.SINGLETON_INSTANCE), WORKSHOP_CARDSCRIPT (VCardScript.SINGLETON_INSTANCE),
HOME_QUESTSTART (VSubmenuQuestStart.SINGLETON_INSTANCE),
HOME_QUESTLOADDATA(VSubmenuQuestLoadData.SINGLETON_INSTANCE),
HOME_QUESTDRAFTS (VSubmenuQuestDraft.SINGLETON_INSTANCE), HOME_QUESTDRAFTS (VSubmenuQuestDraft.SINGLETON_INSTANCE),
HOME_QUESTCHALLENGES (VSubmenuChallenges.SINGLETON_INSTANCE), HOME_QUESTCHALLENGES (VSubmenuChallenges.SINGLETON_INSTANCE),
HOME_QUESTDUELS (VSubmenuDuels.SINGLETON_INSTANCE), HOME_QUESTDUELS (VSubmenuDuels.SINGLETON_INSTANCE),
HOME_QUESTDATA (VSubmenuQuestData.SINGLETON_INSTANCE),
HOME_QUESTDECKS (VSubmenuQuestDecks.SINGLETON_INSTANCE), HOME_QUESTDECKS (VSubmenuQuestDecks.SINGLETON_INSTANCE),
HOME_QUESTPREFS (VSubmenuQuestPrefs.SINGLETON_INSTANCE), HOME_QUESTPREFS (VSubmenuQuestPrefs.SINGLETON_INSTANCE),
HOME_GAUNTLETBUILD (VSubmenuGauntletBuild.SINGLETON_INSTANCE), HOME_GAUNTLETBUILD (VSubmenuGauntletBuild.SINGLETON_INSTANCE),

View File

@@ -17,31 +17,9 @@
*/ */
package forge.screens.home; 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.Singletons;
import forge.assets.FSkinProp; import forge.assets.FSkinProp;
import forge.gui.framework.EDocID; import forge.gui.framework.*;
import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc;
import forge.gui.framework.ILocalRepaint;
import forge.gui.framework.IVTopLevelUI;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.screens.home.gauntlet.VSubmenuGauntletBuild; 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.VSubmenuGauntletLoad;
import forge.screens.home.gauntlet.VSubmenuGauntletQuick; import forge.screens.home.gauntlet.VSubmenuGauntletQuick;
import forge.screens.home.online.VSubmenuOnlineLobby; import forge.screens.home.online.VSubmenuOnlineLobby;
import forge.screens.home.quest.VSubmenuChallenges; import forge.screens.home.puzzle.VSubmenuPuzzleCreate;
import forge.screens.home.quest.VSubmenuDuels; import forge.screens.home.puzzle.VSubmenuPuzzleSolve;
import forge.screens.home.quest.VSubmenuQuestData; import forge.screens.home.quest.*;
import forge.screens.home.quest.VSubmenuQuestDecks;
import forge.screens.home.quest.VSubmenuQuestDraft;
import forge.screens.home.quest.VSubmenuQuestPrefs;
import forge.screens.home.sanctioned.VSubmenuConstructed; import forge.screens.home.sanctioned.VSubmenuConstructed;
import forge.screens.home.sanctioned.VSubmenuDraft; import forge.screens.home.sanctioned.VSubmenuDraft;
import forge.screens.home.sanctioned.VSubmenuSealed; import forge.screens.home.sanctioned.VSubmenuSealed;
import forge.screens.home.settings.VSubmenuAchievements; import forge.screens.home.settings.*;
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.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.toolbox.FScrollPanel; import forge.toolbox.FScrollPanel;
import forge.toolbox.FSkin; import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinColor; import forge.toolbox.FSkin.SkinColor;
import forge.toolbox.FSkin.SkinnedPanel; import forge.toolbox.FSkin.SkinnedPanel;
import forge.view.FView; 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> * 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(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(VSubmenuDuels.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuChallenges.SINGLETON_INSTANCE); allSubmenus.add(VSubmenuChallenges.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuQuestDraft.SINGLETON_INSTANCE); allSubmenus.add(VSubmenuQuestDraft.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuQuestDecks.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuQuestData.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuQuestPrefs.SINGLETON_INSTANCE); allSubmenus.add(VSubmenuQuestPrefs.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuGauntletQuick.SINGLETON_INSTANCE); allSubmenus.add(VSubmenuGauntletQuick.SINGLETON_INSTANCE);

View File

@@ -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;
}
}

View File

@@ -7,24 +7,16 @@ import forge.game.GameFormat;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgeConstants;
import forge.quest.*; import forge.quest.*;
import forge.quest.StartingPoolPreferences.PoolType;
import forge.quest.data.DeckConstructionRules; import forge.quest.data.DeckConstructionRules;
import forge.quest.data.GameFormatQuest; import forge.quest.data.GameFormatQuest;
import forge.quest.data.QuestData; import forge.quest.data.QuestData;
import forge.quest.data.QuestPreferences.QPref; import forge.quest.data.QuestPreferences;
import forge.quest.io.QuestDataIO; import forge.screens.home.CHomeUI;
import forge.screens.bazaar.CBazaarUI;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.util.Localizer; 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.*;
import java.util.Map.Entry;
/** /**
* Controls the quest data submenu in the home UI. * Controls the quest data submenu in the home UI.
@@ -33,28 +25,17 @@ import java.util.Map.Entry;
* *
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
public enum CSubmenuQuestData implements ICDoc { public enum CSubmenuQuestStart implements ICDoc {
SINGLETON_INSTANCE; SINGLETON_INSTANCE;
private final Map<String, QuestData> arrQuests = new HashMap<>(); 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> customFormatCodes = new ArrayList<>();
private final List<String> customPrizeFormatCodes = 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 List<Byte> preferredColors = new ArrayList<>();
private PoolType poolType = PoolType.BALANCED; private StartingPoolPreferences.PoolType poolType = StartingPoolPreferences.PoolType.BALANCED;
private boolean includeArtifacts = true; private boolean includeArtifacts = true;
private int numberOfBoosters = 0; private int numberOfBoosters = 0;
@@ -166,65 +147,6 @@ public enum CSubmenuQuestData implements ICDoc {
*/ */
@Override @Override
public void update() { 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() { private void newQuest() {
final Localizer localizer = Localizer.getInstance(); final Localizer localizer = Localizer.getInstance();
final VSubmenuQuestData view = VSubmenuQuestData.SINGLETON_INSTANCE; final VSubmenuQuestStart view = VSubmenuQuestStart.SINGLETON_INSTANCE;
final int difficulty = view.getSelectedDifficulty(); final int difficulty = view.getSelectedDifficulty();
final QuestMode mode = view.isFantasy() ? QuestMode.Fantasy : QuestMode.Classic; final QuestMode mode = view.isFantasy() ? QuestMode.Fantasy : QuestMode.Classic;
@@ -245,38 +167,38 @@ public enum CSubmenuQuestData implements ICDoc {
if (worldFormat == null) { if (worldFormat == null) {
switch(view.getStartingPoolType()) { switch(view.getStartingPoolType()) {
case Sanctioned: case Sanctioned:
fmtStartPool = view.getRotatingFormat(); fmtStartPool = view.getRotatingFormat();
break; break;
case Casual: case Casual:
case CustomFormat: case CustomFormat:
if (customFormatCodes.isEmpty()) { if (customFormatCodes.isEmpty()) {
if (!FOptionPane.showConfirmDialog(localizer.getMessage("lblNotFormatDefined"))) { 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; return;
} }
} break;
fmtStartPool = customFormatCodes.isEmpty() ? null : new GameFormatQuest("Custom", customFormatCodes, null); // chosen sets and no banned cards
break;
case DraftDeck: case Precon:
case SealedDeck: dckStartPool = QuestController.getPrecons().get(view.getSelectedPrecon()).getDeck();
case Cube: break;
dckStartPool = view.getSelectedDeck();
if (null == dckStartPool) {
FOptionPane.showMessageDialog(localizer.getMessage("lbldckStartPool"), localizer.getMessage("lblCannotStartaQuest"), FOptionPane.ERROR_ICON);
return;
}
break;
case Precon: case Complete:
dckStartPool = QuestController.getPrecons().get(view.getSelectedPrecon()).getDeck(); default:
break; // leave everything as nulls
break;
case Complete:
default:
// leave everything as nulls
break;
} }
} }
else { else {
@@ -290,11 +212,11 @@ public enum CSubmenuQuestData implements ICDoc {
fmtPrizes = fmtStartPool; fmtPrizes = fmtStartPool;
if (null == fmtPrizes && dckStartPool != null) { // build it form deck if (null == fmtPrizes && dckStartPool != null) { // build it form deck
final Set<String> sets = new HashSet<>(); 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()); sets.add(c.getKey().getEdition());
} }
if (dckStartPool.has(DeckSection.Sideboard)) { 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()); sets.add(c.getKey().getEdition());
} }
} }
@@ -303,23 +225,23 @@ public enum CSubmenuQuestData implements ICDoc {
} }
else { else {
switch(prizedPoolType) { switch(prizedPoolType) {
case Complete: case Complete:
fmtPrizes = null; fmtPrizes = null;
break; break;
case Casual: case Casual:
case CustomFormat: case CustomFormat:
if (customPrizeFormatCodes.isEmpty()) { if (customPrizeFormatCodes.isEmpty()) {
if (!FOptionPane.showConfirmDialog(localizer.getMessage("lblNotFormatDefined"))) { if (!FOptionPane.showConfirmDialog(localizer.getMessage("lblNotFormatDefined"))) {
return; return;
}
} }
} fmtPrizes = customPrizeFormatCodes.isEmpty() ? null : new GameFormat("Custom Prizes", customPrizeFormatCodes, null); // chosen sets and no banned cards
fmtPrizes = customPrizeFormatCodes.isEmpty() ? null : new GameFormat("Custom Prizes", customPrizeFormatCodes, null); // chosen sets and no banned cards break;
break; case Sanctioned:
case Sanctioned: fmtPrizes = view.getPrizedRotatingFormat();
fmtPrizes = view.getPrizedRotatingFormat(); break;
break; default:
default: throw new RuntimeException("Should not get this result");
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 //Apply the appropriate deck construction rules for this quest
DeckConstructionRules dcr = DeckConstructionRules.Default; DeckConstructionRules dcr = DeckConstructionRules.Default;
if(VSubmenuQuestData.SINGLETON_INSTANCE.isCommander()){ if(VSubmenuQuestStart.SINGLETON_INSTANCE.isCommander()){
dcr = DeckConstructionRules.Commander; dcr = DeckConstructionRules.Commander;
} }
@@ -356,28 +278,11 @@ public enum CSubmenuQuestData implements ICDoc {
FModel.getQuest().save(); FModel.getQuest().save();
// Save in preferences. // Save in preferences.
FModel.getQuestPreferences().setPref(QPref.CURRENT_QUEST, questName + ".dat"); FModel.getQuestPreferences().setPref(QuestPreferences.QPref.CURRENT_QUEST, questName + ".dat");
FModel.getQuestPreferences().save(); FModel.getQuestPreferences().save();
update(); // Change to QuestDecks screen
CHomeUI.SINGLETON_INSTANCE.itemClick(VSubmenuQuestDecks.SINGLETON_INSTANCE.getDocumentID());
}
/** 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();
} }
private Map<String, QuestData> getAllQuests() { private Map<String, QuestData> getAllQuests() {

View File

@@ -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;
}
}

View File

@@ -34,24 +34,17 @@ import java.util.Map;
* *
* <br><br><i>(V at beginning of class name denotes a view class.)</i> * <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; SINGLETON_INSTANCE;
final Localizer localizer = Localizer.getInstance(); final Localizer localizer = Localizer.getInstance();
// Fields used with interface IVDoc // Fields used with interface IVDoc
private DragCell parentCell; private DragCell parentCell;
private final DragTab tab = new DragTab(localizer.getMessage("lblQuestData")); private final DragTab tab = new DragTab(localizer.getMessage("lblStartanewQuest"));
private final FLabel lblTitle = new FLabel.Builder()
.text(localizer.getMessage("lblLoadQuestData")).fontAlign(SwingConstants.CENTER)
.opaque(true).fontSize(16).build();
private final FLabel lblTitleNew = new FLabel.Builder().text(localizer.getMessage("lblStartanewQuest")).opaque(true).fontSize(16).build(); private final FLabel lblTitleNew = new FLabel.Builder().text(localizer.getMessage("lblStartanewQuest")).opaque(true).fontSize(16).build();
String str= ForgeConstants.QUEST_SAVE_DIR.replace('\\', '/'); 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(); private final JPanel pnlOptions = new JPanel();
/* First column */ /* First column */
@@ -188,9 +181,8 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
* Constructor. * Constructor.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
VSubmenuQuestData() { VSubmenuQuestStart() {
lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
lblTitleNew.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); lblTitleNew.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
final JXButtonPanel difficultyPanel = new JXButtonPanel(); final JXButtonPanel difficultyPanel = new JXButtonPanel();
@@ -286,7 +278,7 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
//Otherwise, set the starting world to Random Commander //Otherwise, set the starting world to Random Commander
cbxStartingWorld.setSelectedItem(FModel.getWorlds().get("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().removeAll();
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0, wrap")); 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(lblTitleNew, "w 98%, h 30px!, gap 1% 0 15px 10px");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblOldQuests, "w 98%, h 30px!, gap 1% 0 0 5px"); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlOptions, "w 98%!, growy, pushy, gap 1% 0 0 0");
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().repaintSelf(); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf();
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate(); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
@@ -391,7 +380,7 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
*/ */
@Override @Override
public String getMenuTitle() { public String getMenuTitle() {
return localizer.getMessage("lblNewLoadQuest"); return localizer.getMessage("lblStartanewQuest");
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -399,16 +388,9 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
*/ */
@Override @Override
public EDocID getItemEnum() { 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} * @return {@link forge.toolbox.FLabel}
*/ */
@@ -423,7 +405,7 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
*/ */
@Override @Override
public EDocID getDocumentID() { public EDocID getDocumentID() {
return EDocID.HOME_QUESTDATA; return EDocID.HOME_QUESTSTART;
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -438,8 +420,8 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
* @see forge.gui.framework.IVDoc#getLayoutControl() * @see forge.gui.framework.IVDoc#getLayoutControl()
*/ */
@Override @Override
public CSubmenuQuestData getLayoutControl() { public CSubmenuQuestStart getLayoutControl() {
return CSubmenuQuestData.SINGLETON_INSTANCE; return CSubmenuQuestStart.SINGLETON_INSTANCE;
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -469,7 +469,7 @@ lblEmbark=Aufbrechen!
lblboxCompleteSet=Du startest mit je 4 Stück jeder Karte der gewählten Sets. lblboxCompleteSet=Du startest mit je 4 Stück jeder Karte der gewählten Sets.
lblboxAllowDuplicates=In deiner Startsammlung können Karten mehrfach vorkommen. lblboxAllowDuplicates=In deiner Startsammlung können Karten mehrfach vorkommen.
lblSameAsStartingPool=Wie Startsammlung lblSameAsStartingPool=Wie Startsammlung
lblNewLoadQuest=Neu / Lade Quest lblNewLoadQuest=Lade Quest
#CSubmenuQChallenges.java #CSubmenuQChallenges.java
lblLaunchaZeppelin=Starte einen Zeppelin. lblLaunchaZeppelin=Starte einen Zeppelin.
lblPlant=Pflanze lblPlant=Pflanze

View File

@@ -441,7 +441,7 @@ cbLaunchZeppelin=Launch Zeppelin
#VSubmenuQuest.java #VSubmenuQuest.java
lblQuestData=Quest Data lblQuestData=Quest Data
lblLoadQuestData=Load Quest Data lblLoadQuestData=Load Quest Data
lblStartanewQuest=Start a new Quest lblStartanewQuest=Start Quest
lblOldQuestData=Old quest data? Put into %s and restart Forge. lblOldQuestData=Old quest data? Put into %s and restart Forge.
rbEasy=Easy rbEasy=Easy
rbMedium=Medium 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. 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. lblboxAllowDuplicates=When your starting pool is generated, duplicates of cards may be included.
lblSameAsStartingPool=Same as starting pool lblSameAsStartingPool=Same as starting pool
lblNewLoadQuest=New / Load Quest lblNewLoadQuest=Load Quest
#CSubmenuQChallenges.java #CSubmenuQChallenges.java
lblLaunchaZeppelin=Launch a Zeppelin. lblLaunchaZeppelin=Launch a Zeppelin.
lblPlant=Plant lblPlant=Plant

View File

@@ -469,7 +469,7 @@ lblEmbark=¡Embarcarse!
lblboxCompleteSet=Comenzarás la aventura con 4 copias de cada carta en los sets que hayas seleccionado. 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. lblboxAllowDuplicates=Cuando tu pool inicial se genera, se puede incluir duplicados de cartas.
lblSameAsStartingPool=Igual que el pool inicial lblSameAsStartingPool=Igual que el pool inicial
lblNewLoadQuest=Nueva/Cargar Aventura lblNewLoadQuest=Cargar Aventura
#CSubmenuQChallenges.java #CSubmenuQChallenges.java
lblLaunchaZeppelin=Lanzar el Zeppelin. lblLaunchaZeppelin=Lanzar el Zeppelin.
lblPlant=Planta lblPlant=Planta

View File

@@ -469,7 +469,7 @@ lblEmbark=开始!
lblboxCompleteSet=你将使用所选系列的每张卡中的4张开始探索 lblboxCompleteSet=你将使用所选系列的每张卡中的4张开始探索
lblboxAllowDuplicates=生成初始牌池时,可能包含重复的卡。 lblboxAllowDuplicates=生成初始牌池时,可能包含重复的卡。
lblSameAsStartingPool=与初始牌池相同 lblSameAsStartingPool=与初始牌池相同
lblNewLoadQuest=新建/载入 lblNewLoadQuest=载入
#CSubmenuQChallenges.java #CSubmenuQChallenges.java
lblLaunchaZeppelin=启动一个飞艇. lblLaunchaZeppelin=启动一个飞艇.
lblPlant=植物 lblPlant=植物

View File

@@ -23,7 +23,7 @@ import java.util.List;
* This class is used to store the Quest starting pool preferences. * This class is used to store the Quest starting pool preferences.
* (It could be expanded to store other Quest starting preferences as well, * (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 * 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 { public final class StartingPoolPreferences {