mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
Bugfix: Quest challenges now persist across restarts. Also some checkstyle.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<Deck> decks;
|
||||
|
||||
// acquired
|
||||
// since
|
||||
// last
|
||||
// game-win/loss
|
||||
|
||||
/** The available challenges. */
|
||||
private List<Integer> availableChallenges = new ArrayList<Integer>();
|
||||
|
||||
/** The available quests. */
|
||||
private List<Integer> availableQuests = null;
|
||||
private transient IStorage<Deck> 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<Integer, String> selectedPets = new HashMap<Integer, String>();
|
||||
|
||||
/**
|
||||
*
|
||||
* 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<Integer> 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<Integer>(this.availableChallenges) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the available challenges.
|
||||
*
|
||||
* @param list
|
||||
* the new available challenges
|
||||
*/
|
||||
public void setAvailableChallenges(final List<Integer> 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));
|
||||
|
||||
@@ -160,26 +160,26 @@ 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<QuestEventChallenge> generateChallenges(final QuestController qCtrl) {
|
||||
final QuestAchievements achievements = qCtrl.getAchievements();
|
||||
final List<QuestEventChallenge> challengeOpponents = new ArrayList<QuestEventChallenge>();
|
||||
final QuestAchievements qData = qCtrl.getAchievements();
|
||||
final List<Integer> unlockedChallengeIds = new ArrayList<Integer>();
|
||||
final List<Integer> 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<Integer> unlockedChallengeIds = new ArrayList<Integer>();
|
||||
final List<Integer> availableChallengeIds = new ArrayList<Integer>();
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
@@ -14,22 +14,23 @@ public class QuestAchievements {
|
||||
|
||||
// Challenge history
|
||||
/** The challenges played. */
|
||||
int challengesPlayed = 0;
|
||||
/** The completed challenges. */
|
||||
List<Integer> completedChallenges = new ArrayList<Integer>();
|
||||
/** The win. */
|
||||
int win; // number of wins
|
||||
int winstreakBest = 0;
|
||||
int winstreakCurrent = 0;
|
||||
private int challengesPlayed = 0;
|
||||
/** */
|
||||
private List<Integer> completedChallenges = new ArrayList<Integer>();
|
||||
/** */
|
||||
private List<Integer> currentChallenges = new ArrayList<Integer>();
|
||||
|
||||
/** 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;
|
||||
}
|
||||
/**
|
||||
* <p>
|
||||
* getCompletedChallenges.
|
||||
* </p>
|
||||
* Returns stored list of non-repeatable challenge IDs.
|
||||
*
|
||||
* @return List<Integer>
|
||||
*/
|
||||
public List<Integer> getCompletedChallenges() {
|
||||
return this.completedChallenges;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the challenges played.
|
||||
*/
|
||||
public void addChallengesPlayed() {
|
||||
this.challengesPlayed++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns stored list of non-repeatable challenge IDs.
|
||||
*
|
||||
* @return List<Integer>
|
||||
*/
|
||||
public List<Integer> getLockedChallenges() {
|
||||
return this.completedChallenges;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 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<Integer>
|
||||
*/
|
||||
public List<Integer> getCurrentChallenges() {
|
||||
if (this.currentChallenges == null) {
|
||||
this.currentChallenges = new ArrayList<Integer>();
|
||||
}
|
||||
|
||||
return this.currentChallenges;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the stored list of current challenges.
|
||||
*
|
||||
* @param lst0 List<Integer>
|
||||
*/
|
||||
public void setCurrentChallenges(final List<Integer> lst0) {
|
||||
this.currentChallenges = lst0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the lost.
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user