/// <summary> /// @brief 現プレイヤーのハイスコアを受けとってランクを取得 --------------- /// </summary> /// <param name="currentScore"></param> public void FetchRank(double currentScore) { // データスコアの「HighScore」から検索 NCMBQuery <NCMBObject> rankQuery = new NCMBQuery <NCMBObject>("HighScore"); rankQuery.WhereLessThan("Score", currentScore); rankQuery.CountAsync((int count, NCMBException e) => { if (e != null) { //件数取得失敗 } else { //件数取得成功 currentRank = count + 1; // 自分よりスコアが上の人がn人いたら自分はn+1位 } }); }
/// <summary> /// 現在の自分の順位を取得する。 /// ※ ログインが必須 /// </summary> /// <param name="callback">コールバック関数</param> public void GetCurrentRank(IntCallback callback) { // ログイン状態の確認を行う if (!GetIsLogIn) { callback(0, new NCMBException(NCMBUTErrorMessage.NOT_LOGIN_ERROR)); return; } // 自分のスコアデータを取得する NCMBQuery <NCMBObject> findQuery = GetPlaneQuery(NCMBUTRankingsDefaultSettings.RANKING_CLASS); findQuery.WhereEqualTo(NCMBUTRankingsDefaultSettings.RankingsDefaultFields.player.ToString(), NCMBUser.CurrentUser); findQuery.WhereEqualTo(NCMBUTRankingsDefaultSettings.RankingsDefaultFields.stage.ToString(), Stage); findQuery.FindAsync((List <NCMBObject> objList, NCMBException findError) => { // 検索結果がなければ0を返す if (objList.Count == 0) { callback(0, findError); return; } // スコアデータを元に順位を取得 NCMBQuery <NCMBObject> countQuery = GetQuery(NCMBUTRankingsDefaultSettings.RANKING_CLASS); switch (Sort) { case NCMBUTSortType.Ascending: countQuery.WhereLessThan(SortField, objList[0][SortField]); break; case NCMBUTSortType.Descending: countQuery.WhereGreaterThan(SortField, objList[0][SortField]); break; } countQuery.WhereEqualTo(NCMBUTRankingsDefaultSettings.RankingsDefaultFields.stage.ToString(), Stage); countQuery.CountAsync((int count, NCMBException countError) => { callback(count + 1, countError); return; }); }); }