/// <summary> /// /// </summary> /// <returns></returns> private IEnumerator ChatLogSetIterator() { SpreadSheetQuery query; try { query = new SpreadSheetQuery("Kimsan"); } catch (Exception e) { exceptionOccurredFlag = true; completeSetTextToServer = true; Debug.Log(e); yield break; } query.Where("rank", "=", "1"); yield return(query.FindAsync()); var so = query.Result.FirstOrDefault(); if (so != null) { so["name"] = serializedTextToServer; yield return(so.SaveAsync()); } completeSetTextToServer = true; yield break; }
/// <summary> /// /// </summary> /// <returns></returns> private IEnumerator ChatLogGetIterator() { SpreadSheetQuery query; try { query = new SpreadSheetQuery("Kimsan"); } catch (Exception e) { exceptionOccurredFlag = true; Debug.Log(e); yield break; } query.Limit(1); // 1つだけ取得 yield return(query.FindAsync()); foreach (var so in query.Result) { serializedTextFromServer = so["name"].ToString(); } completeGetTextFromServer = true; yield break; }
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)); } }
// Use this for initialization void Start() { if (GameManager.Instance != null) { var query = new SpreadSheetQuery(); StartCoroutine(SendScore(GameManager.Instance.FinishScore, query)); } }
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"; } }
IEnumerator GetHighScoreAndRankingBoard() { this.scoreLabel.text = RankingLoader.Instance.Score.TextForDisplay; //ハイスコア取得 { this.highScoreLabel.text = "取得中..."; var hiScoreCheck = new SpreadSheetQuery(); yield return(hiScoreCheck.Where("id", "=", SpreadSheetSetting.Instance.UniqueID).FindAsync()); if (hiScoreCheck.Count > 0) { //既にハイスコアは登録されている highScoreSpreadSheetObject = hiScoreCheck.Result.First(); var s = RankingLoader.Instance.BuildScore(highScoreSpreadSheetObject ["hiscore"].ToString()); this.highScoreLabel.text = s != null ? s.TextForDisplay : "エラー"; this.nameInputField.text = highScoreSpreadSheetObject ["name"].ToString(); } else { //登録されていない this.highScoreLabel.text = "-----"; } } //ランキング取得 yield return(StartCoroutine(LoadRankingBoard())); //スコア更新している場合、ボタン有効化 if (this.highScoreSpreadSheetObject == null) { this.sendScoreButton.interactable = true; } else { var highScore = RankingLoader.Instance.BuildScore(this.highScoreSpreadSheetObject ["hiscore"].ToString()); var score = RankingLoader.Instance.Score; if (RankingLoader.Instance.setting.Order == ScoreOrder.OrderByAscending) { //数値が低い方が高スコア this.sendScoreButton.interactable = score.Value < highScore.Value; } else { //数値が高い方が高スコア this.sendScoreButton.interactable = highScore.Value < score.Value; } } }
IEnumerator GetRanking(SpreadSheetQuery query) { scores = new Dictionary <int, int>(); yield return(query.Where("number", ">", 0).Limit(20).FindAsync()); foreach (var sc in query.Result) { scores.Add((int)sc["score"], (int)sc["number"]); } endReceive = true; yield return(null); }
private IEnumerator ScoreSendIterator() { leaderBoardButton.interactable = false; //スコア送信する前にリーダーボードを見ても自分のスコアが表示されないので無効化 var isHiscore = false; if (score > HiScore) //所持しているHiScoreよりも今回のScoreの方が大きい場合 { HiScore = score; isHiscore = true; retryButton.interactable = false; //すぐリトライできるとスコア送信する前にCoroutineが止められてしまうので無効化 } //スコア結果のパネル表示 resultPanel.Show("Time Attack Results", "HiScore " + HiScore + "\nScore " + score + (isHiscore ? "\nハイスコア更新!!" : ""), "Time Attack の結果です。"); if (isHiscore) { resultPanel.Description = "サーバーのハイスコアを確認しています。"; //すでにスコアが登録されているかチェック var hiScoreCheck = new SpreadSheetQuery(); yield return(hiScoreCheck.Where("id", "=", SpreadSheetSetting.Instance.UniqueID).FindAsync()); //"id"を検索条件に入れることで、すでにスコアが登録されているかチェック //既にハイスコアは登録されている if (hiScoreCheck.Count > 0) { resultPanel.Description = "ハイスコアの更新処理中・・・"; //登録されている=hiScoreCheckの戻りリストが更新対象SpreadSheetObjectになるので、そのまま使用する var so = hiScoreCheck.Result.First(); so["hiscore"] = HiScore; yield return(so.SaveAsync()); } else { resultPanel.Description = "ハイスコアの新規登録中・・・"; //登録されていなかったので、新規としてidにUniqueIDを入れて次の更新処理に備えたデータで保存する var so = new SpreadSheetObject(); so["id"] = SpreadSheetSetting.Instance.UniqueID; so["hiscore"] = HiScore; yield return(so.SaveAsync()); } resultPanel.Description = "サーバーへのハイスコア登録処理が終了しました。"; } //ハイスコア登録処理が終わったので、リトライとリーダーボードへの遷移ボタンを有効化 leaderBoardButton.interactable = true; retryButton.interactable = true; }
/// <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); } }
IEnumerator SendScore(int score, SpreadSheetQuery query) { yield return(query.Where("score", "=", score).FindAsync()); var sc = query.Result.FirstOrDefault(); if (sc != null) { sc["number"] = (int)(sc["number"]) + 1; } else { sc = new SpreadSheetObject(); sc["score"] = score; sc["number"] = 1; } yield return(sc.SaveAsync()); endSend = true; yield return(GetRanking(query)); }