Saved data gets overwritten
Hey all,
I have a small game here that saves your current score, all time high score, bosses defeated and all time bosses defeated to a file. all time high score and all time bosses defeated (should) ONLY update when current score > all time high score.
This works fine, all the data is loaded somewhat correctly. The only issue I have is, when the user scored less than their highscore, the UI element where I display this data, says that the all time high score is now 0 (even though it was a high number before death).
So to put it simply / some pseudo:
on death, call save()
in save: if current_score > high_score
high score = current_score
save save highscore, save current score, close file
else, just update the current score and save it to file
Anyone know why this could be? At first I though it was some logic when saving, but (unless my tired brain is getting the best of me), it seems pretty normal:
public void Save() {
FileStream file = File.Open(Application.persistentDataPath + "/playerscores.dat", FileMode.Open);
SaveData data = new SaveData();
if (obstacle_count > obstacle_high || boss_count > boss_high) {
Debug.Log("AG DATA SAVED");
data.boss_high = boss_count;
data.obstacle_high = obstacle_count;
}
data.obstacle_count = obstacle_count;
data.boss_count = boss_count;
binfor.Serialize(file, data);
file.Close();
}
And the death menu loads like this:
public void Load() {
if (File.Exists(Application.persistentDataPath + "/playerscores.dat")) {
Debug.Log("PAUSE MENU DATA LOADED");
FileStream file = File.Open(Application.persistentDataPath + "/playerscores.dat", FileMode.Open);
SaveData data = (SaveData)binfor.Deserialize(file);
file.Close();
boss_high = data.boss_high;
obstacle_high = data.obstacle_high;
obstacle_count = data.obstacle_count;
boss_count = data.boss_count;
}
}
((load gets called as soon as the scene is loaded))
Any help is appreciated! Thanks :)
Here's a youtube video demonstrating it:
https://www.youtube.com/watch?v=sm27i7vwzgg&feature=youtu.be
A temporary workaround to make sure data gets save is using PlayerPrefs, which works fine. Not sure if I want to use it though. It's good practice to use serializable data, no?