예제 #1
0
파일: Test.cs 프로젝트: netadix/kimsan2
    /// <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;
    }
예제 #2
0
파일: Test.cs 프로젝트: netadix/kimsan2
    /// <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;
    }
예제 #3
0
    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));
        }
    }
예제 #4
0
 // Use this for initialization
 void Start()
 {
     if (GameManager.Instance != null)
     {
         var query = new SpreadSheetQuery();
         StartCoroutine(SendScore(GameManager.Instance.FinishScore, query));
     }
 }
예제 #5
0
    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";
        }
    }
예제 #6
0
        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;
                }
            }
        }
예제 #7
0
    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);
    }
예제 #8
0
    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;
    }
예제 #9
0
        /// <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);
            }
        }
예제 #10
0
    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));
    }