private async Task AddAchievementProgress(TieredAchievementModel achievement, AchievementProgress progress) { var storedProgress = GetProgressCurrentTier(achievement); if (progress.Progress != null) { foreach (var p in progress.Progress) { storedProgress.Progress++; storedProgress.TimeProgressAchieved = p; if (storedProgress.Progress >= achievement.Type.GetGoal(achievement.CurrentTier)) { storedProgress.DateTierAchieved = p; await storageService.UpdateTieredAchievementProgress(storedProgress); OnTierChanged?.Invoke(achievement.Type, achievement.CurrentTier); achievement.CurrentTier++; if (achievement.CurrentTier == Tier.Complete) { break; } storedProgress = GetProgressCurrentTier(achievement); storedProgress.TimeProgressAchieved = p; await storageService.UpdateTieredAchievementProgress(storedProgress); } } } if (storedProgress.SubProgress != progress.SubProgress) { storedProgress.SubProgress = progress.SubProgress; OnTierProgress?.Invoke(achievement.Type); } }
public async Task UpdateTieredAchievement(TieredAchievementModel achievement) { await connection.InsertOrReplaceAsync(achievement, typeof(TieredAchievementModel)); }
private AchievementTierProgressModel GetProgressCurrentTier(TieredAchievementModel a) => GetProgressForTier(a.Id, a.CurrentTier);