コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        //if (Input.GetKeyDown(KeyCode.C))
        //{
        //    Connect();
        //}
        //if (Input.GetKeyDown(KeyCode.K))
        //{
        //    CreateGame("Test");
        //}
        //if (Input.GetKeyDown(KeyCode.J))
        //{
        //    JoinGame(playerName, lobbyCode);
        //}
        if (inLobby)
        {
            if (SceneManager.GetActiveScene() == SceneManager.GetSceneByName("game"))
            {
                inLobby = false;
                NetData n = new NetData("ready_start", "");
                sendData(JsonConvert.SerializeObject(n));
            }
        }
        if (!inLobby)
        {
            if (SceneManager.GetActiveScene() == SceneManager.GetSceneByName("lobby"))
            {
                inLobby = true;
            }
        }

        if (connected)
        {
            acceptedQueue.AddRange(queue);
            queue.Clear();
            updatedObjects.Clear();
            for (int i = acceptedQueue.Count - 1; i >= 0; i--)
            {
                NetData data = JsonConvert.DeserializeObject <NetData>(acceptedQueue[i]);
                if (data.type == "object")
                {
                    if (!updatedObjects.Contains(data.id))
                    {
                        GameObjectData gData = JsonConvert.DeserializeObject <GameObjectData>(data.value);
                        if (networkedObjects.ContainsKey(data.id))
                        {
                            GameObjectData.updateGameObject(gData, networkedObjects[data.id]);
                        }
                        else
                        {
                            Debug.Log(data.key);
                            GameObject g      = Instantiate(objects[objectNames.IndexOf(data.key)]);
                            NetObject  netObj = g.AddComponent <NetObject>();
                            netObj.id = data.id;
                            networkedObjects.Add(data.id, g);
                            GameObjectData.updateGameObject(gData, g);
                            if (data.key == "player")
                            {
                                string p_name = data.other[0];
                                if (p_name.EndsWith("?"))
                                {
                                    p_name = p_name.Substring(0, p_name.Length - 1);
                                }
                                g.transform.Find("Stats").GetChild(0).GetComponent <TextMeshProUGUI>().text = p_name;
                            }
                        }

                        updatedObjects.Add(data.id);
                    }
                }
                else if (data.type == "object_id")
                {
                    Debug.Log("New Object: " + data.id);
                    NetObject obj = waitlist[0].AddComponent <NetObject>();
                    obj.id = data.id;
                    sync.Add(data.id, waitlist[0]);
                    waitlist.RemoveAt(0);
                }
                else if (data.type == "game_start")
                {
                    gameStarted = true;
                    Debug.Log("Game Started");
                }
                else if (data.type == "animation")
                {
                    Animator anim = networkedObjects[data.id].GetComponent <Animator>();
                    if (data.key == "trigger")
                    {
                        anim.SetTrigger(data.value);
                    }
                    else
                    {
                        anim.SetBool(data.value, bool.Parse(data.key));
                    }
                }
                else if (data.type == "update_roster")
                {
                    string combinedRoster = "";
                    foreach (string n in data.other)
                    {
                        Debug.Log(n);
                        combinedRoster += n + ";";
                    }
                    combinedRoster = combinedRoster.Substring(0, combinedRoster.Length - 1);
                    PlayerPrefs.SetString("last_roster", combinedRoster);
                    Debug.Log(combinedRoster);
                    LobbyManager m = FindObjectOfType <LobbyManager>();
                    if (m != null)
                    {
                        m.UpdatePlayers(data.other);
                        int counter = 0;
                        foreach (string n in data.other)
                        {
                            Debug.Log(n);
                            if (n == nameUsed)
                            {
                                PlayerPrefs.SetInt("color", counter);
                                Debug.Log("Found Name: " + counter);
                                break;
                            }
                            counter++;
                        }
                    }
                }
                else if (data.type == "lobby_joined")
                {
                    Debug.Log("Joined Lobby: " + data.id);
                    PlayerPrefs.SetInt("joinedLobby", data.id);
                    inLobby = true;
                    SceneManager.LoadScene("lobby");
                }
                else if (data.type == "prepare_game")
                {
                    SceneManager.LoadScene("game");
                }
                else if (data.type == "recieve_damage")
                {
                    Debug.Log("Lost " + data.value + " health");
                    Vector3 enemyPosition = networkedObjects[int.Parse(data.key)].transform.position;
                    sync[data.id].GetComponent <PlayerController>().addKnockback(enemyPosition);
                    sync[data.id].GetComponent <PlayerController>().Damage(int.Parse(data.value));
                }
                else if (data.type == "join_failed")
                {
                    GameObject alertCanvas = Instantiate(alertPrefab);
                    Alert      alert       = alertCanvas.GetComponent <Alert>();
                    alert.ShowInput(false);
                    alert.ConfigureQuestion(data.key);
                    alert.Display(null);
                }
                else if (data.type == "destroy_beacon")
                {
                    Debug.Log("recieved Destroy Message");
                    BeaconManager manager = FindObjectOfType <BeaconManager>();
                    if (manager != null)
                    {
                        manager.DestoryBeacon(data.id);
                    }
                }
            }
            acceptedQueue.Clear();
            if (gameStarted)
            {
                timeCounter -= Time.deltaTime;
                if (timeCounter < 0)
                {
                    runGameSync();
                    timeCounter = 1 / 60;
                }
            }
        }
        if (disconnect)
        {
            Disconnect();
        }
    }