internal static TurnBasedMatch ToTurnBasedMatch(AndroidJavaObject turnBasedMatch) { if (turnBasedMatch == null) { return(null); } string matchId = turnBasedMatch.Call <string>("getMatchId"); byte[] data = turnBasedMatch.Call <byte[]>("getData"); bool canRematch = turnBasedMatch.Call <bool>("canRematch"); uint availableAutomatchSlots = (uint)turnBasedMatch.Call <int>("getAvailableAutoMatchSlots"); string selfParticipantId = turnBasedMatch.Call <string>("getCreatorId"); List <Participant> participants = ToParticipantList(turnBasedMatch); string pendingParticipantId = turnBasedMatch.Call <string>("getPendingParticipantId"); TurnBasedMatch.MatchStatus turnStatus = ToMatchStatus(turnBasedMatch.Call <int>("getStatus")); TurnBasedMatch.MatchTurnStatus matchStatus = AndroidJavaConverter.ToMatchTurnStatus(turnBasedMatch.Call <int>("getTurnStatus")); uint variant = (uint)turnBasedMatch.Call <int>("getVariant"); uint version = (uint)turnBasedMatch.Call <int>("getVersion"); DateTime creationTime = AndroidJavaConverter.ToDateTime(turnBasedMatch.Call <long>("getCreationTimestamp")); DateTime lastUpdateTime = AndroidJavaConverter.ToDateTime(turnBasedMatch.Call <long>("getLastUpdatedTimestamp")); return(new TurnBasedMatch(matchId, data, canRematch, selfParticipantId, participants, availableAutomatchSlots, pendingParticipantId, matchStatus, turnStatus, variant, version, creationTime, lastUpdateTime)); }
private LeaderboardScoreData CreateLeaderboardScoreData( string leaderboardId, LeaderboardCollection collection, LeaderboardTimeSpan timespan, ResponseStatus status, AndroidJavaObject leaderboardScoresJava) { LeaderboardScoreData leaderboardScoreData = new LeaderboardScoreData(leaderboardId, status); var scoresBuffer = leaderboardScoresJava.Call <AndroidJavaObject>("getScores"); int count = scoresBuffer.Call <int>("getCount"); for (int i = 0; i < count; ++i) { using (var leaderboardScore = scoresBuffer.Call <AndroidJavaObject>("get", i)) { long timestamp = leaderboardScore.Call <long>("getTimestampMillis"); System.DateTime date = AndroidJavaConverter.ToDateTime(timestamp); ulong rank = (ulong)leaderboardScore.Call <long>("getRank"); string scoreHolderId = ""; using (var scoreHolder = leaderboardScore.Call <AndroidJavaObject>("getScoreHolder")) { scoreHolderId = scoreHolder.Call <string>("getPlayerId"); } ulong score = (ulong)leaderboardScore.Call <long>("getRawScore"); string metadata = leaderboardScore.Call <string>("getScoreTag"); leaderboardScoreData.AddScore(new PlayGamesScore(date, leaderboardId, rank, scoreHolderId, score, metadata)); } } leaderboardScoreData.NextPageToken = new ScorePageToken(scoresBuffer, leaderboardId, collection, timespan, ScorePageDirection.Forward); leaderboardScoreData.PrevPageToken = new ScorePageToken(scoresBuffer, leaderboardId, collection, timespan, ScorePageDirection.Backward); using (var leaderboard = leaderboardScoresJava.Call <AndroidJavaObject>("getLeaderboard")) using (var variants = leaderboard.Call <AndroidJavaObject>("getVariants")) using (var variant = variants.Call <AndroidJavaObject>("get", 0)) { leaderboardScoreData.Title = leaderboard.Call <string>("getDisplayName"); if (variant.Call <bool>("hasPlayerInfo")) { System.DateTime date = AndroidJavaConverter.ToDateTime(0); ulong rank = (ulong)variant.Call <long>("getPlayerRank"); ulong score = (ulong)variant.Call <long>("getRawPlayerScore"); string metadata = variant.Call <string>("getPlayerScoreTag"); leaderboardScoreData.PlayerScore = new PlayGamesScore(date, leaderboardId, rank, mUser.id, score, metadata); } leaderboardScoreData.ApproximateCount = (ulong)variant.Call <long>("getNumScores"); } return(leaderboardScoreData); }
///<summary></summary> /// <seealso cref="GooglePlayGames.BasicApi.IPlayGamesClient.LoadAchievements"/> public void LoadAchievements(Action <Achievement[]> callback) { using (var achievementsClient = getAchievementsClient()) using (var task = achievementsClient.Call <AndroidJavaObject>("load", /* forceReload= */ false)) { AndroidTaskUtils.AddOnSuccessListener <AndroidJavaObject>( task, annotatedData => { using (var achievementBuffer = annotatedData.Call <AndroidJavaObject>("get")) { int count = achievementBuffer.Call <int>("getCount"); Achievement[] result = new Achievement[count]; for (int i = 0; i < count; ++i) { Achievement achievement = new Achievement(); using (var javaAchievement = achievementBuffer.Call <AndroidJavaObject>("get", i)) { achievement.Id = javaAchievement.Call <string>("getAchievementId"); achievement.Description = javaAchievement.Call <string>("getDescription"); achievement.Name = javaAchievement.Call <string>("getName"); achievement.Points = javaAchievement.Call <ulong>("getXpValue"); long timestamp = javaAchievement.Call <long>("getLastUpdatedTimestamp"); achievement.LastModifiedTime = AndroidJavaConverter.ToDateTime(timestamp); achievement.RevealedImageUrl = javaAchievement.Call <string>("getRevealedImageUrl"); achievement.UnlockedImageUrl = javaAchievement.Call <string>("getUnlockedImageUrl"); achievement.IsIncremental = javaAchievement.Call <int>("getType") == 1 /* TYPE_INCREMENTAL */; if (achievement.IsIncremental) { achievement.CurrentSteps = javaAchievement.Call <int>("getCurrentSteps"); achievement.TotalSteps = javaAchievement.Call <int>("getTotalSteps"); } int state = javaAchievement.Call <int>("getState"); achievement.IsUnlocked = state == 0 /* STATE_UNLOCKED */; achievement.IsRevealed = state == 1 /* STATE_REVEALED */; } result[i] = achievement; } achievementBuffer.Call("release"); InvokeCallbackOnGameThread(callback, result); } }); AndroidTaskUtils.AddOnFailureListener( task, exception => { Debug.Log("LoadAchievements failed"); InvokeCallbackOnGameThread(callback, new Achievement[0]); }); } }
internal static Invitation ToInvitation(AndroidJavaObject invitation) { string invitationId = invitation.Call <string>("getInvitationId"); int invitationType = invitation.Call <int>("getInvitationType"); int variant = invitation.Call <int>("getVariant"); long creationTimestamp = invitation.Call <long>("getCreationTimestamp"); System.DateTime creationTime = AndroidJavaConverter.ToDateTime(creationTimestamp); using (var participant = invitation.Call <AndroidJavaObject>("getInviter")) { return(new Invitation( AndroidJavaConverter.FromInvitationType(invitationType), invitationId, AndroidJavaConverter.ToParticipant(participant), variant, creationTime)); } }