private IEnumerator GetChatLogIterator() { while (true) { var query = new SpreadSheetQuery("Chat"); query.OrderByDescending("createTime").Where("createTime", ">", lastGetTime).Limit(20); yield return(query.FindAsync()); if (query.Count > 0) { foreach (var so in query.Result.Reverse()) { chatLogList.Insert(0, so["name"] + ">" + so["message"]); if (chatLogList.Count > 17) { chatLogList.Remove(chatLogList.Last()); } } logText.text = string.Join("\n", chatLogList.ToArray()); lastGetTime = (long)query.Result.First()["createTime"]; } yield return(new WaitForSeconds(5.0f)); } }
private IEnumerator _LoadLeaderBoardIterator(int hiscore) { top5rankText.text = "now loading"; rivalRankText.text = "now loading"; fader.Show(true); //まずTop5の取得 var topRankQuery = new SpreadSheetQuery("ScoreRanking"); //ハイスコアを降順(大きい順)にして、Limit5にすることで、TOP5を取得 yield return(topRankQuery.OrderByDescending("hiscore").Limit(5).FindAsync()); //取得できたデータをうまく整形しつつ表示 top5rankText.text = "Top5\n"; var dispRank = 0; foreach (var so in topRankQuery.Result) { var text = ++dispRank + "位\t" + so["hiscore"]; //自分のスコアを赤くするために、idでチェック if (so["id"] as string == SpreadSheetSetting.Instance.UniqueID) { text = "<color=red>" + text + "</color>"; } top5rankText.text += text + "\n"; } //近傍スコア(ライバル)の表示処理 //まずプレイヤーの順位を取得 var playerRankingQuery = new SpreadSheetQuery("ScoreRanking"); yield return(playerRankingQuery.Where("hiscore", ">", hiscore).CountAsync()); //自分よりスコアが高いプレイヤーが何人いるか var rank = playerRankingQuery.Count; //自分のスコアのランク(-1)取得 //自分の順位を取得できたので、そこからライバルのスコア取得 var neigborRankingQuery = new SpreadSheetQuery("ScoreRanking"); //TOP5同様、降順+Limit5 に加え、自分のRank-2をSkipすることで、自分のスコアの2つ上のユーザーから取得 dispRank = Mathf.Max(0, rank - 2); yield return(neigborRankingQuery.OrderByDescending("hiscore").Skip(dispRank).Limit(5).FindAsync()); //取得できたデータをうまく整形しつつ表示 rivalRankText.text = "your rival\n"; foreach (var so in neigborRankingQuery.Result) { var text = ++dispRank + "位\t" + so["hiscore"]; if (so["id"] as string == SpreadSheetSetting.Instance.UniqueID) { text = "<color=red>" + text + "</color>"; } rivalRankText.text += text + "\n"; } }
/// <summary> /// ランキング取得&表示 /// </summary> /// <returns>The ranking board.</returns> private IEnumerator LoadRankingBoard() { int nodeCount = scrollViewContent.childCount; Debug.Log(nodeCount); for (int i = nodeCount - 1; i >= 0; i--) { Destroy(scrollViewContent.GetChild(i).gameObject); } var msg = Instantiate(readingNodePrefab, scrollViewContent); var so = new SpreadSheetQuery(); if (RankingLoader.Instance.setting.Order == ScoreOrder.OrderByAscending) { yield return(so.OrderByAscending("hiscore").Limit(30).FindAsync()); } else { yield return(so.OrderByDescending("hiscore").Limit(30).FindAsync()); } Debug.Log("count : " + so.Count.ToString()); Destroy(msg); if (so.Count > 0) { int rank = 0; foreach (var r in so.Result) { var n = Instantiate(this.rankingNodePrefab, scrollViewContent); var rankNode = n.GetComponent <RankingNode> (); rankNode.NoText.text = (++rank).ToString(); rankNode.NameText.text = r ["name"].ToString(); var s = RankingLoader.Instance.BuildScore(r ["hiscore"].ToString()); rankNode.ScoreText.text = s != null ? s.TextForDisplay : "エラー"; Debug.Log(r ["hiscore"].ToString()); } } else { Instantiate(this.notFoundNodePrefab, scrollViewContent); } }