/// <summary> /// Logins local user. /// </summary> /// <returns> /// The logged in user. /// </returns> public Task <Player> Login() { var tcs = new TaskCompletionSource <Player>(); GKLocalPlayer.LocalPlayer.Authenticate(async(error) => { var localPlayer = GKLocalPlayer.LocalPlayer; Player result = null; if (error != null) { #if DEBUG new UIAlertView("Score submittion failed", "Submittion failed because: " + error, null, "OK", null).Show(); #endif } else if (localPlayer != null && localPlayer.Authenticated) { result = await IOSMapper.MapPlayer(localPlayer); } tcs.TrySetResult(result); }); return(tcs.Task); }
private Task <IEnumerable <LeaderboardScore> > InternalGetScores(string leaderboardCode, int count, bool socialOnly, bool centered) { var tcs = new TaskCompletionSource <IEnumerable <LeaderboardScore> >(); UIKit.UIApplication.SharedApplication.InvokeOnMainThread(async() => { var result = Enumerable.Empty <LeaderboardScore>(); var leaderboards = await GKLeaderboard.LoadLeaderboardsAsync() ?? new GKLeaderboard[] { }; var selectedLeaderboard = leaderboards.FirstOrDefault(l => l.Identifier == leaderboardCode); if (selectedLeaderboard != null) { selectedLeaderboard.PlayerScope = socialOnly ? GKLeaderboardPlayerScope.FriendsOnly : GKLeaderboardPlayerScope.Global; selectedLeaderboard.Range = new Foundation.NSRange(1, count); var scores = await selectedLeaderboard.LoadScoresAsync(); if (centered && selectedLeaderboard.LocalPlayerScore != null) { var playerRank = selectedLeaderboard.LocalPlayerScore.Rank; var fromIndex = playerRank - (count / 2); fromIndex = fromIndex < 1 ? 1 : fromIndex; selectedLeaderboard.Range = new Foundation.NSRange(fromIndex, count); scores = await selectedLeaderboard.LoadScoresAsync(); } result = await IOSMapper.MapLeaderBoards(scores); } tcs.SetResult(result); }); return(tcs.Task); }
internal static async Task <IEnumerable <WaveEngine.Social.LeaderboardScore> > MapLeaderBoards(IEnumerable <GKScore> scores) { List <WaveEngine.Social.LeaderboardScore> waveScores = null; if (scores != null) { waveScores = new List <WaveEngine.Social.LeaderboardScore>(); foreach (var item in scores) { var scoreHolder = await IOSMapper.MapPlayer(item.Player); var waveLeaderBoardScore = new WaveEngine.Social.LeaderboardScore() { DisplayRank = null, DisplayScore = item.FormattedValue, Rank = item.Rank, RawScore = item.Value, ScoreHolder = scoreHolder, ScoreTag = null, }; waveScores.Add(waveLeaderBoardScore); } } return(waveScores); }
internal static async Task <IEnumerable <WaveEngine.Social.Achievement> > MapAchievements(IEnumerable <GKAchievement> achievements) { List <WaveEngine.Social.Achievement> waveAchievements = null; if (achievements != null) { waveAchievements = new List <WaveEngine.Social.Achievement>(); foreach (var achievement in achievements) { var waveAchievement = new WaveEngine.Social.Achievement() { AchievementCode = achievement.Identifier, CurrentSteps = achievement.PercentComplete, Description = achievement.Description, Player = await IOSMapper.MapPlayer(achievement.Player), RevealedImageUri = null, UnlockedImageUri = null, State = 0, TotalSteps = 0, Type = 0, LastUpdatedTimestamp = 0, }; waveAchievements.Add(waveAchievement); } } return(waveAchievements); }
/// <summary> /// Gets the achievements. /// </summary> /// <returns> /// The achievements. /// </returns> public Task <IEnumerable <Achievement> > GetAchievements() { var tcs = new TaskCompletionSource <IEnumerable <Achievement> >(); UIKit.UIApplication.SharedApplication.InvokeOnMainThread(async() => { var achievements = await GKAchievement.LoadAchievementsAsync() ?? new GKAchievement[] { }; var achievementsList = achievements.ToList(); var result = await IOSMapper.MapAchievements(achievementsList); tcs.TrySetResult(result); }); return(tcs.Task); }