/// <summary> /// Updates the achievement. /// </summary> /// <param name='achievement'> /// Achievement. /// </param> /// <exception cref='NotImplementedException'> /// Is thrown when a requested operation is not implemented for a given type. /// </exception> public void UpdateAchievement (SGNAchievement achievement) { AchievementUpdated.Raise (this, new AchievementUpdatedEventArgs (achievement)); if (achievement.Percent == 1) { } }
/// <summary> /// Initialize this instance. /// </summary> public void Initialize() { m_pendingLeaderboardsUpdate = new List<SGNLeaderboard>(); m_pendingAchievementsUpdate = new List<SGNAchievement>(); // Player. SGNService.PlayerManager.LoggedIn += delegate(object sender, PlayerLoggedInEventArgs e) { Log("User logged. Processing pending updates..."); RestorePendingUpdates(); ProcessPendingLeaderboardsUpdate(); ProcessPendingAchievementsUpdate(); }; // Leaderboards. SGNService.LeaderboardManager.LeaderboardUpdating += delegate(object sender, LeaderboardUpdatingEventArgs e) { AddPendingLeaderboardUpdate(e.Leaderboard); }; SGNService.LeaderboardManager.LeaderboardUpdatingFailed += delegate(object sender, LeaderboardUpdatingFailedEventArgs e) { m_currentProcessingLeaderboard = null; }; SGNService.LeaderboardManager.LeaderboardUpdated += delegate(object sender, LeaderboardUpdatedEventArgs e) { RemovePendingLeaderboardUpdate(e.Leaderboard); }; // Achievements. SGNService.AchievementManager.AchievementUpdating += delegate(object sender, AchievementUpdatingEventArgs e) { AddPendingAchievementUpdate(e.Achievement); }; SGNService.AchievementManager.AchievementUpdatingFailed += delegate(object sender, AchievementUpdatingFailedEventArgs e) { m_currentProcessingAchievement = null; }; SGNService.AchievementManager.AchievementUpdated += delegate(object sender, AchievementUpdatedEventArgs e) { RemovePendingAchievementUpdate(e.Achievement); }; AppService.BackgroundBegin += delegate { SavePendingUpdates(); }; }
/// <summary> /// Initializes a new instance of the /// <see cref="Skahal.Infrastructure.Framework.SocialGamingNetwork.AchievementsRefreshedEventArgs"/> class. /// </summary> /// <param name="achievements">Achievements.</param> public AchievementsRefreshedEventArgs(SGNAchievement[] achievements) { Achievements = achievements; }
/// <summary> /// Initializes a new instance of the /// <see cref="Skahal.Infrastructure.Framework.SocialGamingNetwork.AchievementUpdatingEventArgs"/> class. /// </summary> /// <param name="achievement">Achievement.</param> public AchievementUpdatingEventArgs(SGNAchievement achievement) { Achievement = achievement; }
void ProcessPendingAchievementsUpdate() { lock (this) { var count = m_pendingAchievementsUpdate.Count; Log("There are {0} pending achievements update.", count); if (m_currentProcessingAchievement == null && count > 0) { m_currentProcessingAchievement = m_pendingAchievementsUpdate[0]; Log("Updating pending achievement {0} update.", m_currentProcessingAchievement); SGNService.AchievementManager.UpdateAchievement(m_currentProcessingAchievement); } } }
void RemovePendingAchievementUpdate(SGNAchievement achievement) { lock (this) { Log("Removing achievement {0} as pending update...", achievement); m_pendingAchievementsUpdate.Remove(achievement); if (achievement.Equals(m_currentProcessingAchievement)) { m_currentProcessingAchievement = null; } } }
void AddPendingAchievementUpdate(SGNAchievement achievement) { lock (this) { Log("Adding achievement {0} as pending update...", achievement); if (m_pendingAchievementsUpdate.Contains(achievement)) { m_pendingAchievementsUpdate.Remove(achievement); } m_pendingAchievementsUpdate.Add(achievement); } }
void RestorePendingUpdates() { if (m_pendingUpdatesRestored) { return; } // Leaderboards. var data = UserService.GetPreference(GetLeaderboardsPlayerPrefsKey(), "").Value.ToString(); if (!String.IsNullOrEmpty(data)) { var leaderboards = data.Split(';'); foreach (var l in leaderboards) { var parts = l.Split('|'); if (parts.Length == 2) { var leaderboard = new SGNLeaderboard(parts[0]); leaderboard.Score = Convert.ToInt64(parts[1]); AddPendingLeaderboardUpdate(leaderboard); } } } // Achievements. data = UserService.GetPreference(GetAchievementsPlayerPrefsKey(), "").ToString(); if (!String.IsNullOrEmpty(data)) { var achievements = data.Split(';'); foreach (var l in achievements) { var parts = l.Split('|'); if (parts.Length == 2) { var achievement = new SGNAchievement(parts[0]); achievement.Percent = Convert.ToSingle(parts[1]); m_pendingAchievementsUpdate.Add(achievement); } } } m_pendingUpdatesRestored = true; }
/// <summary> /// Initializes a new instance of the /// <see cref="Skahal.Infrastructure.Framework.SocialGamingNetwork.AchievementUnlockedEventArgs"/> class. /// </summary> /// <param name="achievement">Achievement.</param> public AchievementUnlockedEventArgs(SGNAchievement achievement) { Achievement = achievement; }