示例#1
0
    public void Update()
    {
        while (m_commands.Count > 0)
        {
            JSONCollection data        = m_commands.Dequeue();
            string         commandName = data.Find("command_id");
            string         contents    = data.JSONString();
            int            i           = 0;

            if (data.Find("error_msg") != "")
            {
                ErrorCodes errorCode = (ErrorCodes)data.FindInt("error_code");

                m_output  = "";
                m_output += ("Error Message: " + data.Find("error_msg")) + '\n';
                m_output += ("Error type: " + errorCode.ToString()) + '\n';
                m_output += ("JSON String: " + contents);
                Debug.LogError(m_output);
                return;
            }

            switch (commandName)
            {
            case "connectMovie":
                m_output  += "\nConnect to NG received data: " + data.JSONString() + '\n';
                m_gameName = data.Find("movie_name");

                APIEvent.Activate(APIEvent.EventNames.API_CONNECTED, m_medals);
                break;

            case "getMedals":
                m_medals = new Dictionary <string, Medal>();

                List <JSONCollection> medals = data.GetArray("medals");

                for (i = 0; i < medals.Count; i++)
                {
                    m_output += "Registered medal " + medals[i].Find("medal_name") + '\n';
                    m_medals[medals[i].Find("medal_name")] = new Medal(medals[i]);
                }

                APIEvent.Activate(APIEvent.EventNames.MEDALS_LOADED, m_medals);
                break;

            case "unlockMedal":
                Medal med = m_medals[data.Find("medal_name")];
                if (!med.m_unlocked)
                {
                    Debug.Log("Unlocked medal " + data.Find("medal_name"));
                }
                else
                {
                    Debug.Log("Unlocking medal " + data.Find("medal_name") + " again.");
                }
                med.Unlock();
                APIEvent.Activate(APIEvent.EventNames.MEDAL_UNLOCKED, med);
                break;

            case "preloadSettings":
                m_scoreboards = new Dictionary <string, Scoreboard>();
                List <JSONCollection> scores = data.GetArray("score_boards");

                for (i = 0; i < scores.Count; i++)
                {
                    m_scoreboards.Add(scores[i].Find("name"), new Scoreboard(scores[i]));
                }

                m_saveFiles = new Dictionary <string, SaveFile>();
                List <JSONCollection> saveFiles = data.GetArray("save_groups");

                for (i = 0; i < saveFiles.Count; i++)
                {
                    m_saveFiles[saveFiles[i].Find("group_name")] = new Newgrounds.SaveFile(saveFiles[i]);
                }
                APIEvent.Activate(APIEvent.EventNames.METADATA_LOADED, null);
                break;

            case "loadScores":
                JSONCollection        scoreHolder  = new JSONCollection(contents);
                List <JSONCollection> scoreHolders = scoreHolder.GetArray("scores");

                m_output += "High Scores:\n";
                for (i = 0; i < scoreHolders.Count; i++)
                {
                    m_output += "Name: " + scoreHolders[i].Find("username") + ", Score: " + scoreHolders[i].Find("value") + '\n';
                }

                APIEvent.Activate(APIEvent.EventNames.SCORES_LOADED, scoreHolder);
                break;

            case "saveFile":
                m_output += contents;
                break;

            case "postScore":
                m_output += m_ngUsername + " posted a score of " + data.FindInt("value").ToString() + "!\n";
                List <object> postScoreInfo = new List <object>();

                foreach (Scoreboard sb in m_scoreboards.Values)
                {
                    if (sb.m_id == data.FindInt("board"))
                    {
                        postScoreInfo.Add(sb);
                        break;
                    }
                }
                postScoreInfo.Add(m_userName);
                postScoreInfo.Add(data.FindInt("value"));
                APIEvent.Activate(APIEvent.EventNames.SCORE_POSTED, postScoreInfo);
                break;

            default:
                m_output += contents;
                break;
            }
        }
    }