Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        ///<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]);
                    });
                }
        }
Beispiel #4
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));
            }
        }