IEnumerator saveResult()
    {
        m_textNetworkStatus.text = "データアップロード中";

        var query = new GSSA.SpreadSheetQuery("Ranking");

        query.Where("id", "=", Globals.GetInstance().m_userId);
        yield return(query.FindAsync());

        var so = query.Count > 0 ? query.Result.First() : new GSSA.SpreadSheetObject("Ranking");

        so["id"]         = Globals.GetInstance().m_userId;
        so["name"]       = Globals.GetInstance().m_userName;
        so["mass"]       = Globals.GetInstance().m_savedMass;
        so["difficulty"] = Globals.GetInstance().m_savedDifficulty;
        so["rare"]       = Globals.GetInstance().m_savedRare;
        so["cost"]       = Globals.GetInstance().m_savedCost;
        so["etc"]        = Globals.GetInstance().m_savedEtc;
        so["total"]      = Globals.GetInstance().m_savedTotal;
        so["totalAll"]   = Globals.GetInstance().m_savedTotalAll;
        yield return(so.SaveAsync());

        m_textNetworkStatus.text = "";

        m_panelRoot[0].SetActive(false);
    }
    private void makeRanking(GSSA.SpreadSheetQuery query, int option)
    {
        string[] category = { "total", "mass", "difficulty", "rare", "cost", "etc", "totalAll", "All" };
        string[] prefix   = { "$", "", "", "", "$", "$", "$" };
        string[] postfix  = { "", "kg", "pts", "pts", "", "", "", "" };
        float[]  myValues =
        {
            Globals.GetInstance().m_total,
            Globals.GetInstance().m_mass,
            Globals.GetInstance().m_difficulty,
            Globals.GetInstance().m_rare,
            Globals.GetInstance().m_cost,
            Globals.GetInstance().m_etc,
            Globals.GetInstance().m_savedTotalAll,
        };

        int lineNum = 0;

        int   rank      = 1;
        float prevValue = 0;
        int   myRank    = 0;

        foreach (var so in query.Result)
        {
            lineNum++;
            float value = float.Parse(so[category[option]].ToString());
            if (value < prevValue)
            {
                rank = lineNum;
            }
            if ((myRank == 0) && (value <= myValues[option]))
            {
                myRank = rank;
            }
            prevValue = value;
            m_textRankingNoList.text    += rank.ToString() + "\n";
            m_textRankingNameList.text  += so["name"] as string + "\n";
            m_textRankingValueList.text += prefix[option] + " " + string.Format("{0:f}", value) + " " + postfix[option] + "\n";
        }

        if ((myRank == 0) && (query.Count < 50))
        {
            myRank = query.Count + 1;
            m_textRankingNoList.text    += rank.ToString() + "\n";
            m_textRankingNameList.text  += Globals.GetInstance().m_userName + "\n";
            m_textRankingValueList.text += prefix[option] + " " + string.Format("{0:f}", myValues[option]) + " " + postfix[option] + "\n";
        }

        m_textMyRank.text  = (myRank == 0) ? "ランキング圏外" : myRank.ToString() + "位";
        m_textMyValue.text = prefix[option] + " " + string.Format("{0:f}", myValues[option]) + " " + postfix[option];
    }
    IEnumerator transitionToRanking()
    {
        m_panelRoot[0].SetActive(false);
        m_panelRoot[1].SetActive(true);

        if (m_toggleSaveResult.isOn)
        {
            Globals.GetInstance().m_userName = m_inputFieldName.text;
            yield return(StartCoroutine(saveResult()));
        }

        m_textNetworkStatus.text = "ランキングデータ取得中";
        string[] category = { "total", "mass", "difficulty", "rare", "cost", "etc", "totalAll", "All" };

        var query = new GSSA.SpreadSheetQuery("Ranking");

        yield return(query.OrderByDescending("total").Limit(50).FindAsync());

        m_controlRoot[1].SetActive(true);
        m_objectMine.SetActive(true);
        m_objectAll.SetActive(false);

        makeRanking(query, 0);

        m_textNetworkStatus.text = "";


        int currentOption = 0;

        while (true)
        {
            if (currentOption != m_dropdownRanking.value)
            {
                currentOption = m_dropdownRanking.value;

                m_objectMine.SetActive(false);
                m_objectAll.SetActive(false);
                m_textNetworkStatus.text = "ランキングデータ取得中";
                if (currentOption == 7)
                {
                    m_scrollView.SetActive(false);
                    yield return(query.OrderByDescending("totalAll").FindAsync());

                    m_objectMine.SetActive(false);
                    m_objectAll.SetActive(true);

                    float total = 0;
                    foreach (var so in query.Result)
                    {
                        total += float.Parse(so["totalAll"].ToString());
                    }
                    m_textAllValue.text      = string.Format("{0:f}", total);
                    m_textNetworkStatus.text = "";
                }
                else
                {
                    m_scrollView.SetActive(true);
                    m_textRankingNoList.text    = "";
                    m_textRankingNameList.text  = "";
                    m_textRankingValueList.text = "";

                    yield return(query.OrderByDescending(category[currentOption]).Limit(50).FindAsync());

                    m_objectMine.SetActive(true);
                    m_objectAll.SetActive(false);

                    makeRanking(query, currentOption);

                    m_textNetworkStatus.text = "";
                }
            }
            yield return(null);
        }
    }