public void ReadData() { try { if (System.IO.File.Exists(path)) { string contents = System.IO.File.ReadAllText(path); AchievementWrapper wrapper = JsonUtility.FromJson <AchievementWrapper>(contents); achievementData = wrapper.achievementData; } else { Debug.Log("Unable to read the save data, file does not exist... creating new data"); //If there's no data then we need to create some new data. //If there's no achievements already premade, we create some empty data. //This should not happen as we can set up the default instance of achievements in the inspector. if (achievementData.achievements.Count < 1) { achievementData = new AchievementData(); } SaveData(); } } catch (System.Exception ex) { Debug.Log(ex.Message); } }
public void OpenAchievement(string _subject, string _id) { string[] _achievements = Manager.achievements.achievements; string target = _subject + "_" + _id; for (int i = 0; i < _achievements.Length; i++) { string _achievement = _achievements[i]; if (_achievement == target) { return; } } Array.Resize(ref _achievements, _achievements.Length + 1); _achievements[_achievements.GetUpperBound(0)] = target; Manager.achievements.achievements = _achievements; PlayerPrefs.SetString("achievements", JsonUtility.ToJson(Manager.achievements)); for (int i = 0; i < achievementWrappers.Length; i++) { AchievementWrapper _a = achievementWrappers[i]; if (_a.subject == _subject && _a.id == _id) { descriptionText.text = _a.description; backgroundImage.sprite = _a.background; achievementIcon.sprite = _a.icon; anim.SetTrigger("Show"); } } }
public void SaveData() { AchievementWrapper wrapper = new AchievementWrapper(); wrapper.achievementData = achievementData; string contents = JsonUtility.ToJson(wrapper, true); System.IO.File.WriteAllText(path, contents); }
public async Task <IActionResult> Achievements(AchievementsViewModel model) { if (!ModelState.IsValid) { return(View(model)); } var user = await _userManager.GetUserAsync(User); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } // Achievements must be loaded explicitly due to lazy loading. Would optimize in production app _appDbContext.Entry(user).Collection(x => x.Achivements).Load(); for (int i = 0; i < model.AchievementWrapperList.Count; i++) { // Find matching achievement. Don't use foreach here since it gets messed up by the .Where() below AchievementWrapper aw = model.AchievementWrapperList[i]; UserAchievement targetAchievement = user.Achivements.Where(x => x.GlobalAchievementID == aw.Achievement.GlobalAchievementID).SingleOrDefault(); // Only update if there's a change if (targetAchievement == null && aw.IsAchieved == true) { UserAchievement toAdd = new UserAchievement { GlobalAchievementID = aw.Achievement.GlobalAchievementID, AchievedTime = DateTime.Now, ApplicationUserID = user.Id }; user.Achivements.Add(toAdd); } else if (targetAchievement != null && aw.IsAchieved == false) { user.Achivements.Remove(targetAchievement); } } var setResult = await _userManager.UpdateAsync(user); if (!setResult.Succeeded) { throw new ApplicationException($"Unexpected error occurred setting achievements for user with ID '{user.Id}'."); } StatusMessage = "Your settings have been updated"; return(RedirectToAction(nameof(Achievements))); }
public async Task <IActionResult> Achievements() { ViewData["Message"] = "Your achievements."; var user = await _userManager.GetUserAsync(User); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } // Achievements must be loaded explicitly due to lazy loading. Would optimize in production app _appDbContext.Entry(user).Collection(x => x.Achivements).Load(); var model = new AchievementsViewModel { AchievementWrapperList = new List <AchievementWrapper>(), CurrentUser = user, StatusMessage = StatusMessage }; foreach (GlobalAchievement a in _appDbContext.GlobalAchievements) { AchievementWrapper newW = new AchievementWrapper { Achievement = a }; // Find matching achievement try { UserAchievement targetAchievement = model.CurrentUser.Achivements.First(x => x.GlobalAchievementID == a.GlobalAchievementID); // Where(x => x.GlobalAchievementID == a.GlobalAchievementID).SingleOrDefault(); if (targetAchievement != null) { newW.IsAchieved = true; } else { newW.IsAchieved = false; } } catch { } model.AchievementWrapperList.Add(newW); } model.AchievementWrapperList = model.AchievementWrapperList.OrderByDescending(x => x.IsAchieved).ToList(); return(View(model)); }