예제 #1
0
        void SendLobby(PacketFlags flags)
        {
            List <SelectObj> selectObjs = new List <SelectObj>();

            foreach (GameClient gameClient in peers.Values)
            {
                selectObjs.Add(new SelectObj()
                {
                    Type  = gameClient.Type,
                    Name  = gameClient.Name,
                    Team  = gameClient.Team,
                    Ready = gameClient.Ready
                });
            }
            LobbyObj lobbyObj = new LobbyObj()
            {
                State      = (byte)state,
                Timer      = timer,
                SelectObjs = selectObjs.ToArray()
            };

            foreach (var keyValue in peers)
            {
                if (state == NetworkState.Battle && keyValue.Value.Ready)
                {
                    continue;
                }

                lobbyObj.PeerSelectObj = new SelectObj()
                {
                    Type  = keyValue.Value.Type,
                    Name  = keyValue.Value.Name,
                    Team  = keyValue.Value.Team,
                    Ready = keyValue.Value.Ready
                };
                Send(MessageType.Lobby, keyValue.Key, MessagePackSerializer.Serialize(lobbyObj), flags);
            }
        }
예제 #2
0
    void LobbyHandler(byte[] data)
    {
        LobbyObj lobbyObj = MessagePackSerializer.Deserialize <LobbyObj>(data);

        if (!applyPlayerSelectObj && playerSelectObj == null)
        {
            playerSelectObj = lobbyObj.PeerSelectObj;
            if (state == SceneState.Lobby)
            {
                type = playerSelectObj.Type;
                SetUnitTypeIcon(type);

                _name = playerSelectObj.Name;
                nameInputField.text = playerSelectObj.Name;

                _team = playerSelectObj.Team;
                SetTeamButtonColor(_team);

                _ready = playerSelectObj.Ready;
                SetReadyButtonColor(_ready);

                applyPlayerSelectObj = true;
                playerSelectObj      = null;
            }
        }

        if (state == SceneState.Lobby)
        {
            if (lobbyObj.State == 0)
            {
                lobbyTitle.text = "Before Battle";
            }
            else if (lobbyObj.State == 1)
            {
                lobbyTitle.text = lobbyObj.Timer.ToString("F0");
            }
            else
            {
                lobbyTitle.text = "In Battle";
            }

            bluePlayerNodeInstances.ForEach(x => Destroy(x));
            bluePlayerNodeInstances.Clear();
            redPlayerNodeInstances.ForEach(x => Destroy(x));
            redPlayerNodeInstances.Clear();

            foreach (SelectObj selectObj in lobbyObj.SelectObjs)
            {
                if (selectObj.Team == Team.Blue)
                {
                    GameObject instance = Instantiate(playerNodePrefab, blueContentRectTransform);
                    instance.GetComponent <PlayerNode>().SetData(selectObj.Type, selectObj.Team, selectObj.Name, selectObj.Ready);
                    bluePlayerNodeInstances.Add(instance);
                }
                else
                {
                    GameObject instance = Instantiate(playerNodePrefab, redContentRectTransform);
                    instance.GetComponent <PlayerNode>().SetData(selectObj.Type, selectObj.Team, selectObj.Name, selectObj.Ready);
                    redPlayerNodeInstances.Add(instance);
                }
            }
        }
        else if (state == SceneState.Main)
        {
            SceneManager.LoadScene("Lobby");
        }
    }