/// Updates a player's progress for an achievement.
    public void ReportProgress(string achievementID, double percentCompleted, Action <bool> callback)
    {
        var achievement = GetAchievement(achievementID);

        if (achievement == null)
        {
            // Create new achievement.
            achievement = new LumosAchievement(achievementID, percentCompleted, false, DateTime.Now);
            _achievements[achievement.id] = achievement;
        }
        else
        {
            // Update existing achievement.
            achievement.percentCompleted = percentCompleted;
        }

        achievement.ReportProgress(callback);
    }
    /// Loads the player's earned achievements.
    public void LoadAchievements(Action <IAchievement[]> callback)
    {
        if ((achievements == null || achievements.Length == 0) && !loadingAchievements)
        {
            // Load the achievements from the server.
            loadingAchievements = true;
            var endpoint = "/users/" + localUser.id + "/achievements";

            LumosRequest.Send(LumosSocial.instance, endpoint, LumosRequest.Method.GET,
                              success => {
                var resp      = success as IList;
                _achievements = new Dictionary <string, LumosAchievement>();

                foreach (Dictionary <string, object> info in resp)
                {
                    var achievement = new LumosAchievement(info);
                    _achievements[achievement.id] = achievement;
                }

                loadingAchievements = false;

                if (callback != null)
                {
                    callback(achievements);
                }
            },
                              error => {
                loadingAchievements = false;

                if (callback != null)
                {
                    callback(null);
                }
            });
        }
        else
        {
            // Use the cached achievements.
            if (callback != null)
            {
                callback(achievements);
            }
        }
    }
    /// Creates an empty achievement object.
    public IAchievement CreateAchievement()
    {
        var achievement = new LumosAchievement();

        return(achievement);
    }