Exemplo n.º 1
0
    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);
        }
    }
Exemplo n.º 2
0
    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");
            }
        }
    }
Exemplo n.º 3
0
    public void SaveData()
    {
        AchievementWrapper wrapper = new AchievementWrapper();

        wrapper.achievementData = achievementData;

        string contents = JsonUtility.ToJson(wrapper, true);

        System.IO.File.WriteAllText(path, contents);
    }
Exemplo n.º 4
0
        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)));
        }
Exemplo n.º 5
0
        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));
        }