diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index 9b0be90ddd5..6ffbfc9571a 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -23,6 +23,7 @@ import java.awt.event.ComponentEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; +import java.io.File; import java.util.List; import javax.swing.JLayeredPane; @@ -41,6 +42,10 @@ import forge.gui.match.VMatchUI; import forge.gui.match.controllers.CDock; import forge.gui.toolbox.CardFaceSymbols; import forge.gui.toolbox.FSkin; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; +import forge.quest.data.QuestPreferences.QPref; +import forge.quest.io.QuestDataIO; import forge.view.FView; /** @@ -149,6 +154,14 @@ public enum FControl { this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts(); this.display = FView.SINGLETON_INSTANCE.getLpnDocument(); + // Preload quest data if present + final File dirQuests = ForgeProps.getFile(NewConstants.Quest.DATA_DIR); + final String questname = Singletons.getModel().getQuestPreferences().getPreference(QPref.CURRENT_QUEST); + final File data = new File(dirQuests.getPath(), questname); + if (data.exists()) { + AllZone.getQuest().load(QuestDataIO.loadData(data)); + } + // Handles resizing in null layouts of layers in JLayeredPane. Singletons.getView().getFrame().addComponentListener(new ComponentAdapter() { @Override diff --git a/src/main/java/forge/gui/home/VMainMenu.java b/src/main/java/forge/gui/home/VMainMenu.java index b77d624b17c..754587826f1 100644 --- a/src/main/java/forge/gui/home/VMainMenu.java +++ b/src/main/java/forge/gui/home/VMainMenu.java @@ -18,7 +18,6 @@ package forge.gui.home; import java.awt.Component; -import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -36,7 +35,6 @@ import javax.swing.border.EmptyBorder; import javax.swing.border.MatteBorder; import net.miginfocom.swing.MigLayout; -import forge.AllZone; import forge.Command; import forge.Singletons; import forge.gui.framework.DragCell; @@ -62,10 +60,6 @@ import forge.gui.toolbox.FScrollPane; import forge.gui.toolbox.FSkin; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; -import forge.properties.ForgeProps; -import forge.properties.NewConstants; -import forge.quest.data.QuestPreferences.QPref; -import forge.quest.io.QuestDataIO; /** * Assembles Swing components of main menu panel in home screen. @@ -95,12 +89,6 @@ public enum VMainMenu implements IVDoc { .iconInBackground(true).iconScaleFactor(1.0).build(); private VMainMenu() { - // There'd a better home for this (model?) - final File dirQuests = ForgeProps.getFile(NewConstants.Quest.DATA_DIR); - final String questname = Singletons.getModel().getQuestPreferences().getPreference(QPref.CURRENT_QUEST); - final File data = new File(dirQuests.getPath(), questname); - if (data.exists()) { AllZone.getQuest().load(QuestDataIO.loadData(data)); } - // Add new menu items here (order doesn't matter). allSubmenus.add(VSubmenuConstructed.SINGLETON_INSTANCE); allSubmenus.add(VSubmenuDraft.SINGLETON_INSTANCE); diff --git a/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java b/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java index 69a8b1dd553..3eb55a18cff 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java @@ -18,7 +18,6 @@ import forge.gui.home.quest.SSubmenuQuestUtil.SelectablePanel; import forge.gui.toolbox.FLabel; import forge.quest.QuestController; import forge.quest.QuestEventChallenge; -import forge.quest.bazaar.QuestItemType; import forge.quest.bazaar.QuestPetController; /** @@ -72,9 +71,10 @@ public enum CSubmenuChallenges implements ICSubmenu, ICDoc { new Command() { @Override public void execute() { - AllZone.getQuest().setAvailableChallenges(null); - AllZone.getQuest().getAssets().setItemLevel(QuestItemType.ZEPPELIN, 2); - update(); + int todo = 5; + //AllZone.getQuest().getAchievements().setCurrentChallenges(null); + //AllZone.getQuest().getAssets().setItemLevel(QuestItemType.ZEPPELIN, 2); + //update(); } }); @@ -114,6 +114,7 @@ public enum CSubmenuChallenges implements ICSubmenu, ICDoc { final VSubmenuChallenges view = VSubmenuChallenges.SINGLETON_INSTANCE; final QuestController qCtrl = AllZone.getQuest(); + if (qCtrl.getAchievements() != null) { view.getLblTitle().setText("Challenges: " + qCtrl.getRank()); diff --git a/src/main/java/forge/gui/match/QuestWinLoseHandler.java b/src/main/java/forge/gui/match/QuestWinLoseHandler.java index cc7da38463b..5baaffc0f05 100644 --- a/src/main/java/forge/gui/match/QuestWinLoseHandler.java +++ b/src/main/java/forge/gui/match/QuestWinLoseHandler.java @@ -288,12 +288,19 @@ public class QuestWinLoseHandler extends ControlWinLose { qData.getCards().clearShopList(); qData.getAssets().setItemLevel(QuestItemType.ZEPPELIN, 1); - if (qEvent instanceof QuestEventChallenge && !((QuestEventChallenge) qEvent).isRepeatable()) { - qData.getAchievements().addCompletedChallenge(((QuestEventChallenge) qEvent).getId()); - } + if (qEvent instanceof QuestEventChallenge) { + final int id = ((QuestEventChallenge) qEvent).getId(); + final int size = qData.getAchievements().getCurrentChallenges().size(); + for (int i = 0; i < size; i++) { + if (qData.getAchievements().getCurrentChallenges().get(i) == id) { + qData.getAchievements().getCurrentChallenges().remove(i); + break; + } + } - if (qData.getAvailableChallenges() != null) { - qData.clearAvailableChallenges(); + if (!((QuestEventChallenge) qEvent).isRepeatable()) { + qData.getAchievements().addLockedChallenge(((QuestEventChallenge) qEvent).getId()); + } } matchState.reset(); diff --git a/src/main/java/forge/quest/QuestController.java b/src/main/java/forge/quest/QuestController.java index 9b8d5653465..0f0124e8cee 100644 --- a/src/main/java/forge/quest/QuestController.java +++ b/src/main/java/forge/quest/QuestController.java @@ -17,9 +17,7 @@ */ package forge.quest; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import forge.Singletons; @@ -57,18 +55,7 @@ public class QuestController { private QuestEvent currentEvent; /** The decks. */ - transient IStorage decks; - - // acquired - // since - // last - // game-win/loss - - /** The available challenges. */ - private List availableChallenges = new ArrayList(); - - /** The available quests. */ - private List availableQuests = null; + private transient IStorage decks; private QuestEventManager duelManager = null; private QuestEventManager challengesManager = null; @@ -93,14 +80,26 @@ public class QuestController { "What Do You Do With The Other Hand?", "Freelance Sorcerer, Works Weekends", "Should We Hire Commentators?", "Saltblasted For Your Talent", "Serra Angel Is Your Girlfriend", }; + /** */ public static final int MAX_PET_SLOTS = 2; private Map selectedPets = new HashMap(); + /** + * + * TODO: Write javadoc for this method. + * @param slot   int + * @param name   String + */ public void selectPet(Integer slot, String name) { selectedPets.put(slot, name); } + /** + * + * @param slot   int + * @return String + */ public String getSelectedPet(Integer slot) { return selectedPets.get(slot); } @@ -185,39 +184,6 @@ public class QuestController { return false; } - /** - * Clear available challenges. - */ - public void clearAvailableChallenges() { - this.availableChallenges.clear(); - } - - /** - * Gets the available challenges. - * - * @return the available challenges - */ - public List getAvailableChallenges() { - // This should be phased out after a while, when - // old quest decks have been updated. (changes made 19-9-11) - if (this.availableQuests != null) { - this.availableChallenges = this.availableQuests; - this.availableQuests = null; - } - - return this.availableChallenges != null ? new ArrayList(this.availableChallenges) : null; - } - - /** - * Sets the available challenges. - * - * @param list - * the new available challenges - */ - public void setAvailableChallenges(final List list) { - this.availableChallenges = list; - } - /** * New game. * @@ -325,6 +291,11 @@ public class QuestController { return this.duelManager; } + /** + * + * TODO: Write javadoc for this method. + * @return QuestEventManager + */ public QuestEventManager getChallengesManager() { if (this.challengesManager == null) { this.challengesManager = new QuestEventManager(ForgeProps.getFile(NewConstants.Quest.CHALLENGES)); @@ -332,6 +303,11 @@ public class QuestController { return this.challengesManager; } + /** + * + * TODO: Write javadoc for this method. + * @return QuestPetStorage + */ public QuestPetStorage getPetsStorage() { if (this.pets == null) { this.pets = new QuestPetStorage(ForgeProps.getFile(NewConstants.Quest.BAZAAR)); diff --git a/src/main/java/forge/quest/QuestEventManager.java b/src/main/java/forge/quest/QuestEventManager.java index 575576990d9..edf0f4ab42a 100644 --- a/src/main/java/forge/quest/QuestEventManager.java +++ b/src/main/java/forge/quest/QuestEventManager.java @@ -159,27 +159,27 @@ public class QuestEventManager { } /** Generates an array of new challenge opponents based on current win conditions. - * + * + * @param qCtrl   QuestController * @return a {@link java.util.List} object. */ public final List generateChallenges(final QuestController qCtrl) { + final QuestAchievements achievements = qCtrl.getAchievements(); final List challengeOpponents = new ArrayList(); - final QuestAchievements qData = qCtrl.getAchievements(); + final List unlockedChallengeIds = new ArrayList(); + final List availableChallengeIds = achievements.getCurrentChallenges(); - int maxChallenges = qData.getWin() / 10; + int maxChallenges = achievements.getWin() / 10; if (maxChallenges > 5) { maxChallenges = 5; } // Generate IDs as needed. - if ((qCtrl.getAvailableChallenges() == null) || (qCtrl.getAvailableChallenges().size() < maxChallenges)) { - - final List unlockedChallengeIds = new ArrayList(); - final List availableChallengeIds = new ArrayList(); - + if (achievements.getCurrentChallenges().size() < maxChallenges) { for (final QuestEventChallenge qc : allChallenges) { - if ((qc.getWinsReqd() <= qData.getWin()) - && !qData.getCompletedChallenges().contains(qc.getId())) { + if ((qc.getWinsReqd() <= achievements.getWin()) + && !achievements.getLockedChallenges().contains(qc.getId()) + && !availableChallengeIds.contains(qc.getId())) { unlockedChallengeIds.add(qc.getId()); } } @@ -188,16 +188,16 @@ public class QuestEventManager { maxChallenges = Math.min(maxChallenges, unlockedChallengeIds.size()); - for (int i = 0; i < maxChallenges; i++) { + for (int i = availableChallengeIds.size(); i < maxChallenges; i++) { availableChallengeIds.add(unlockedChallengeIds.get(i)); } - qCtrl.setAvailableChallenges(availableChallengeIds); + achievements.setCurrentChallenges(availableChallengeIds); qCtrl.save(); } // Finally, pull challenge events from available IDs and return. - for (final int i : qCtrl.getAvailableChallenges()) { + for (final int i : achievements.getCurrentChallenges()) { challengeOpponents.add(getChallengeEventByNumber(i)); } diff --git a/src/main/java/forge/quest/data/QuestAchievements.java b/src/main/java/forge/quest/data/QuestAchievements.java index 06ce26c0905..b9122ab0d6c 100644 --- a/src/main/java/forge/quest/data/QuestAchievements.java +++ b/src/main/java/forge/quest/data/QuestAchievements.java @@ -14,22 +14,23 @@ public class QuestAchievements { // Challenge history /** The challenges played. */ - int challengesPlayed = 0; - /** The completed challenges. */ - List completedChallenges = new ArrayList(); - /** The win. */ - int win; // number of wins - int winstreakBest = 0; - int winstreakCurrent = 0; + private int challengesPlayed = 0; + /** */ + private List completedChallenges = new ArrayList(); + /** */ + private List currentChallenges = new ArrayList(); - /** The lost. */ - int lost; + private int win; + private int winstreakBest = 0; + private int winstreakCurrent = 0; + private int lost; // Difficulty - will store only index from now. private int difficulty; + /** * TODO: Write javadoc for Constructor. - * @param diff + * @param diff   int */ public QuestAchievements(int diff) { difficulty = diff; @@ -61,23 +62,23 @@ public class QuestAchievements { public int getChallengesPlayed() { return this.challengesPlayed; } - /** - *

- * getCompletedChallenges. - *

- * Returns stored list of non-repeatable challenge IDs. - * - * @return List - */ - public List getCompletedChallenges() { - return this.completedChallenges; - } + /** * Adds the challenges played. */ public void addChallengesPlayed() { this.challengesPlayed++; } + + /** + * Returns stored list of non-repeatable challenge IDs. + * + * @return List + */ + public List getLockedChallenges() { + return this.completedChallenges; + } + /** *

* addCompletedChallenge. @@ -87,11 +88,32 @@ public class QuestAchievements { * @param i * the i */ - - // Poorly named - this should be "setLockedChalleneges" or similar. - public void addCompletedChallenge(final int i) { + public void addLockedChallenge(final int i) { this.completedChallenges.add(i); } + + /** + * Stores a list of current challenges. + * + * @return List + */ + public List getCurrentChallenges() { + if (this.currentChallenges == null) { + this.currentChallenges = new ArrayList(); + } + + return this.currentChallenges; + } + + /** + * Returns the stored list of current challenges. + * + * @param lst0 List + */ + public void setCurrentChallenges(final List lst0) { + this.currentChallenges = lst0; + } + /** * Adds the lost. */ diff --git a/src/main/java/forge/view/FView.java b/src/main/java/forge/view/FView.java index 2ab0f1f044f..db5d67df9b2 100644 --- a/src/main/java/forge/view/FView.java +++ b/src/main/java/forge/view/FView.java @@ -54,8 +54,6 @@ public enum FView { /** */ public void initialize() { - SplashFrame.PROGRESS_BAR.setDescription("Creating display components."); - // Frame styling frmDocument.setMinimumSize(new Dimension(800, 600)); frmDocument.setLocationRelativeTo(null);