mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
myk patch 5: save/restore state of quest plant/pet widgets
- saved quest data when pet settings are modified - moved the selectedPets map from QuestController to QuestData (since it now gets persisted); also renamed it petSlots for clarity - incremented the quest file format version - added code to bring older file formats up to date - finally, while researching how the data is saved, I noticed that saveData() can be called from multiple threads. I made the method synchronized to prevent file corruption
This commit is contained in:
@@ -76,6 +76,7 @@ public enum CSubmenuChallenges implements ICDoc {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
quest.selectPet(0, view.getCbPlant().isSelected() ? "Plant" : null);
|
||||
quest.save();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -87,6 +88,7 @@ public enum CSubmenuChallenges implements ICDoc {
|
||||
List<QuestPetController> pets = quest.getPetsStorage().getAvaliablePets(slot, quest.getAssets());
|
||||
String petName = index <= 0 || index > pets.size() ? null : pets.get(index - 1).getName();
|
||||
quest.selectPet(slot, petName);
|
||||
quest.save();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ public enum CSubmenuDuels implements ICDoc {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
quest.selectPet(0, view.getCbPlant().isSelected() ? "Plant" : null);
|
||||
quest.save();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -69,6 +70,7 @@ public enum CSubmenuDuels implements ICDoc {
|
||||
List<QuestPetController> pets = quest.getPetsStorage().getAvaliablePets(slot, quest.getAssets());
|
||||
String petName = index <= 0 || index > pets.size() ? null : pets.get(index - 1).getName();
|
||||
quest.selectPet(slot, petName);
|
||||
quest.save();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
package forge.quest;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
@@ -89,8 +87,6 @@ public class QuestController {
|
||||
/** */
|
||||
public static final int MAX_PET_SLOTS = 2;
|
||||
|
||||
private Map<Integer, String> selectedPets = new HashMap<Integer, String>();
|
||||
|
||||
/**
|
||||
*
|
||||
* TODO: Write javadoc for this method.
|
||||
@@ -98,7 +94,9 @@ public class QuestController {
|
||||
* @param name   String
|
||||
*/
|
||||
public void selectPet(Integer slot, String name) {
|
||||
selectedPets.put(slot, name);
|
||||
if (this.model != null) {
|
||||
this.model.getPetSlots().put(slot, name);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -107,7 +105,7 @@ public class QuestController {
|
||||
* @return String
|
||||
*/
|
||||
public String getSelectedPet(Integer slot) {
|
||||
return selectedPets.get(slot);
|
||||
return this.model == null ? null : this.model.getPetSlots().get(slot);
|
||||
}
|
||||
|
||||
// Cards - class uses data from here
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
*/
|
||||
package forge.quest.data;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.game.GameFormat;
|
||||
import forge.quest.QuestMode;
|
||||
@@ -37,7 +40,7 @@ import forge.quest.io.QuestDataIO;
|
||||
public final class QuestData {
|
||||
|
||||
/** Holds the latest version of the Quest Data. */
|
||||
public static final int CURRENT_VERSION_NUMBER = 5;
|
||||
public static final int CURRENT_VERSION_NUMBER = 6;
|
||||
|
||||
// This field places the version number into QD instance,
|
||||
// but only when the object is created through the constructor
|
||||
@@ -58,7 +61,7 @@ public final class QuestData {
|
||||
|
||||
private final QuestAssets assets;
|
||||
private final QuestAchievements achievements;
|
||||
|
||||
private final Map<Integer, String> petSlots = new HashMap<Integer, String>();
|
||||
|
||||
|
||||
/**
|
||||
@@ -160,6 +163,9 @@ public final class QuestData {
|
||||
return assets;
|
||||
}
|
||||
|
||||
public Map<Integer, String> getPetSlots() {
|
||||
return petSlots;
|
||||
}
|
||||
|
||||
public QuestAchievements getAchievements() {
|
||||
return achievements;
|
||||
|
||||
@@ -198,6 +198,10 @@ public class QuestDataIO {
|
||||
QuestDataIO.setFinalField(QuestAssets.class, "combatPets", newData.getAssets(), new HashMap<String, QuestItemCondition>());
|
||||
}
|
||||
|
||||
if (saveVersion < 6) {
|
||||
QuestDataIO.setFinalField(QuestData.class, "petSlots", newData, new HashMap<Integer, String>());
|
||||
}
|
||||
|
||||
final QuestAssets qS = newData.getAssets();
|
||||
|
||||
switch (saveVersion) {
|
||||
@@ -346,7 +350,7 @@ public class QuestDataIO {
|
||||
* @param qd
|
||||
* a {@link forge.quest.data.QuestData} object.
|
||||
*/
|
||||
public static void saveData(final QuestData qd) {
|
||||
public static synchronized void saveData(final QuestData qd) {
|
||||
try {
|
||||
final XStream xStream = QuestDataIO.getSerializer(false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user