private bool IsUpdateNeeded(LevelHandler.PackList packList) { // find out if playerdata file matches level data file // compare packlist length // foreach pack: compare packids, levellist length // foreach level in levellist: compare levelname if (data.packTrackerList.Count != packList.GetList().Count) { Debug.Log("PlayerData update needed: pack count difference"); return(true); } for (int i = 0; i < packList.GetList().Count; i++) { if (packList.GetList()[i].packId != data.packTrackerList[i].packId || packList.GetList()[i].levelList.Count != data.packTrackerList[i].levelTrackerList.Count) { Debug.Log("PlayerData update needed: pack order or level count difference"); return(true); } for (int j = 0; j < packList.GetList()[i].levelList.Count; j++) { if (packList.GetList()[i].levelList[j].levelName != data.packTrackerList[i].levelTrackerList[j].levelName) { Debug.Log("PlayerData update needed: level order difference " + i + " " + j + " ll:" + packList.GetList()[i].levelList[j].levelName + " pd:" + data.packTrackerList[i].levelTrackerList[j].levelName); return(true); } } } return(false); }
public void Load(LevelHandler.PackList packList) { if (File.Exists(Application.persistentDataPath + DATA_FILENAME)) { Debug.Log("PersistentDataPath: " + Application.persistentDataPath); try { BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + DATA_FILENAME, FileMode.Open); data = bf.Deserialize(file) as Data; Debug.Log("PlayerData: " + data.ToString()); file.Close(); if (IsUpdateNeeded(packList)) { ReconstructPlayerData(packList); } } catch (Exception e) { Debug.Log("PlayerProgress.Load exception: " + e.ToString()); data = new Data(packList); Save(); } } else { Debug.Log("PlayerProgress.Load file not found"); data = new Data(packList); Save(); } }
public Data(LevelHandler.PackList packList) { // Initialize PackTracker list to contain all packs packTrackerList = new List <PackTracker>(); foreach (Pack pack in packList.GetList()) { packTrackerList.Add(new PackTracker(pack)); } lastPlayedPackID = Pack.PackID.PACK_1; soundOn = true; musicOn = true; }
private void ReconstructPlayerData(LevelHandler.PackList packList) { // reconstruct playerdata file since it is inconsistent with level data file // foreach pack: find matching packid in packtrackerlist, else make new packtracker // foreach level in pack.levellist: find matching levelName in leveltracker from matching packtracker, else make new leveltracker Debug.Log("Reconstructing PlayerData"); Data newData = new Data(packList); newData.points = data.points; newData.soundOn = data.soundOn; newData.musicOn = data.musicOn; newData.adDue = data.adDue; newData.levelsPlayed = data.levelsPlayed; newData.lastPlayedLevel = data.lastPlayedLevel; newData.lastPlayedPackID = data.lastPlayedPackID; foreach (PackTracker newPackTracker in newData.packTrackerList) { foreach (PackTracker oldPackTracker in data.packTrackerList) { if (newPackTracker.packId == oldPackTracker.packId) { newPackTracker.isUnlocked = oldPackTracker.isUnlocked; bool wasLastPlayedPack = data.lastPlayedPackID == oldPackTracker.packId; if (wasLastPlayedPack) { newData.lastPlayedPackID = oldPackTracker.packId; } foreach (LevelTracker newLevelTracker in newPackTracker.levelTrackerList) { foreach (LevelTracker oldLevelTracker in oldPackTracker.levelTrackerList) { if (newLevelTracker.levelName == oldLevelTracker.levelName) { newLevelTracker.levelProgress = oldLevelTracker.levelProgress; if (wasLastPlayedPack && newLevelTracker.levelName == data.lastPlayedLevel) { newData.lastPlayedLevel = data.lastPlayedLevel; } break; } } } break; } } } data = newData; Save(); Debug.Log(data.ToString()); }
public void Reset(LevelHandler.PackList packList) { int levelsPlayed = data.levelsPlayed; bool adDue = data.adDue; bool soundOn = data.soundOn; bool musicOn = data.musicOn; int lastSongIndex = data.lastSongIndex; data = new Data(packList); data.levelsPlayed = levelsPlayed; data.adDue = adDue; data.soundOn = soundOn; data.musicOn = musicOn; data.lastSongIndex = lastSongIndex; Save(); }