mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +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
|
@Override
|
||||||
public void actionPerformed(ActionEvent arg0) {
|
public void actionPerformed(ActionEvent arg0) {
|
||||||
quest.selectPet(0, view.getCbPlant().isSelected() ? "Plant" : null);
|
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());
|
List<QuestPetController> pets = quest.getPetsStorage().getAvaliablePets(slot, quest.getAssets());
|
||||||
String petName = index <= 0 || index > pets.size() ? null : pets.get(index - 1).getName();
|
String petName = index <= 0 || index > pets.size() ? null : pets.get(index - 1).getName();
|
||||||
quest.selectPet(slot, petName);
|
quest.selectPet(slot, petName);
|
||||||
|
quest.save();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ public enum CSubmenuDuels implements ICDoc {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent arg0) {
|
public void actionPerformed(ActionEvent arg0) {
|
||||||
quest.selectPet(0, view.getCbPlant().isSelected() ? "Plant" : null);
|
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());
|
List<QuestPetController> pets = quest.getPetsStorage().getAvaliablePets(slot, quest.getAssets());
|
||||||
String petName = index <= 0 || index > pets.size() ? null : pets.get(index - 1).getName();
|
String petName = index <= 0 || index > pets.size() ? null : pets.get(index - 1).getName();
|
||||||
quest.selectPet(slot, petName);
|
quest.selectPet(slot, petName);
|
||||||
|
quest.save();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,6 @@
|
|||||||
package forge.quest;
|
package forge.quest;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
@@ -89,8 +87,6 @@ public class QuestController {
|
|||||||
/** */
|
/** */
|
||||||
public static final int MAX_PET_SLOTS = 2;
|
public static final int MAX_PET_SLOTS = 2;
|
||||||
|
|
||||||
private Map<Integer, String> selectedPets = new HashMap<Integer, String>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* TODO: Write javadoc for this method.
|
* TODO: Write javadoc for this method.
|
||||||
@@ -98,7 +94,9 @@ public class QuestController {
|
|||||||
* @param name   String
|
* @param name   String
|
||||||
*/
|
*/
|
||||||
public void selectPet(Integer slot, String name) {
|
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
|
* @return String
|
||||||
*/
|
*/
|
||||||
public String getSelectedPet(Integer slot) {
|
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
|
// Cards - class uses data from here
|
||||||
|
|||||||
@@ -17,6 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package forge.quest.data;
|
package forge.quest.data;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.game.GameFormat;
|
import forge.game.GameFormat;
|
||||||
import forge.quest.QuestMode;
|
import forge.quest.QuestMode;
|
||||||
@@ -37,7 +40,7 @@ import forge.quest.io.QuestDataIO;
|
|||||||
public final class QuestData {
|
public final class QuestData {
|
||||||
|
|
||||||
/** Holds the latest version of the Quest Data. */
|
/** 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,
|
// This field places the version number into QD instance,
|
||||||
// but only when the object is created through the constructor
|
// but only when the object is created through the constructor
|
||||||
@@ -58,7 +61,7 @@ public final class QuestData {
|
|||||||
|
|
||||||
private final QuestAssets assets;
|
private final QuestAssets assets;
|
||||||
private final QuestAchievements achievements;
|
private final QuestAchievements achievements;
|
||||||
|
private final Map<Integer, String> petSlots = new HashMap<Integer, String>();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -160,6 +163,9 @@ public final class QuestData {
|
|||||||
return assets;
|
return assets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<Integer, String> getPetSlots() {
|
||||||
|
return petSlots;
|
||||||
|
}
|
||||||
|
|
||||||
public QuestAchievements getAchievements() {
|
public QuestAchievements getAchievements() {
|
||||||
return achievements;
|
return achievements;
|
||||||
|
|||||||
@@ -198,6 +198,10 @@ public class QuestDataIO {
|
|||||||
QuestDataIO.setFinalField(QuestAssets.class, "combatPets", newData.getAssets(), new HashMap<String, QuestItemCondition>());
|
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();
|
final QuestAssets qS = newData.getAssets();
|
||||||
|
|
||||||
switch (saveVersion) {
|
switch (saveVersion) {
|
||||||
@@ -346,7 +350,7 @@ public class QuestDataIO {
|
|||||||
* @param qd
|
* @param qd
|
||||||
* a {@link forge.quest.data.QuestData} object.
|
* a {@link forge.quest.data.QuestData} object.
|
||||||
*/
|
*/
|
||||||
public static void saveData(final QuestData qd) {
|
public static synchronized void saveData(final QuestData qd) {
|
||||||
try {
|
try {
|
||||||
final XStream xStream = QuestDataIO.getSerializer(false);
|
final XStream xStream = QuestDataIO.getSerializer(false);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user