Exemplo n.º 1
0
 private void ProcesVoiceFragment(VoipFragment fragment)
 {
     if (isRecording)
     {
         fragment.playerId = Client.Instance.playerInfo.playerId;
         Client.Instance.SendVoIPData(fragment);
     }
 }
Exemplo n.º 2
0
 private void ProcesVoiceFragment(VoipFragment fragment)
 {
     if (voiceChatListener.isListening)
     {
         fragment.playerId = Client.Instance.playerInfo.playerId;
         Client.Instance.SendVoIPData(fragment);
     }
 }
Exemplo n.º 3
0
        public void SendVoIPData(VoipFragment audio)
        {
            if (Connected && NetworkClient != null)
            {
                NetOutgoingMessage outMsg = NetworkClient.CreateMessage();
                outMsg.Write((byte)CommandType.UpdateVoIPData);
                audio.AddToMessage(outMsg);

                NetworkClient.SendMessage(outMsg, NetDeliveryMethod.UnreliableSequenced, 2);
            }
        }
Exemplo n.º 4
0
        private void PacketReceived(NetIncomingMessage msg)
        {
            if (msg == null)
            {
                if (_currentScene == "GameCore" && loaded)
                {
                    PropertyInfo property = typeof(StandardLevelGameplayManager).GetProperty("gameState");
                    property.DeclaringType.GetProperty("gameState");
                    property.GetSetMethod(true).Invoke(_gameManager, new object[] { StandardLevelGameplayManager.GameState.Failed });
                }
                return;
            }

            switch ((CommandType)msg.ReadByte())
            {
            case CommandType.UpdatePlayerInfo:
            {
                float currentTime = msg.ReadFloat();
                float totalTime   = msg.ReadFloat();

                int playersCount = msg.ReadInt32();
                List <PlayerInfo> playerInfos = new List <PlayerInfo>();
                try
                {
                    for (int j = 0; j < playersCount; j++)
                    {
                        playerInfos.Add(new PlayerInfo(msg));
                    }
                }
                catch (Exception e)
                {
#if DEBUG
                    Misc.Logger.Exception($"Unable to parse PlayerInfo! Player count={playersCount} Message size={msg.LengthBytes} Excpetion: {e}");
#endif
                    return;
                }


                playerInfos = playerInfos.Where(x => (x.playerState == PlayerState.Game && _currentScene == "GameCore") || (x.playerState == PlayerState.Room && _currentScene == "MenuCore") || (x.playerState == PlayerState.DownloadingSongs && _currentScene == "MenuCore")).OrderByDescending(x => x.playerId).ToList();

                int localPlayerIndex = playerInfos.FindIndexInList(Client.Instance.playerInfo);

                try
                {
                    int index = 0;
                    OnlinePlayerController player = null;

                    foreach (PlayerInfo info in playerInfos)
                    {
                        try
                        {
                            player = _players.FirstOrDefault(x => x != null && x.PlayerInfo.Equals(info));

                            if (player != null)
                            {
                                player.PlayerInfo   = info;
                                player.avatarOffset = (index - localPlayerIndex) * (_currentScene == "GameCore" ? 5f : 0f);
                                player.SetAvatarState(((ShowAvatarsInGame() && !Config.Instance.SpectatorMode && loaded) || ShowAvatarsInRoom()) && !Client.Instance.InRadioMode);
                            }
                            else
                            {
                                player = new GameObject("OnlinePlayerController").AddComponent <OnlinePlayerController>();

                                player.PlayerInfo   = info;
                                player.avatarOffset = (index - localPlayerIndex) * (_currentScene == "GameCore" ? 5f : 0f);
                                player.SetAvatarState(((ShowAvatarsInGame() && !Config.Instance.SpectatorMode && loaded) || ShowAvatarsInRoom()) && !Client.Instance.InRadioMode);

                                _players.Add(player);
                            }

                            index++;
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine($"PlayerController exception: {e}");
                        }
                    }

                    if (_players.Count > playerInfos.Count)
                    {
                        foreach (OnlinePlayerController controller in _players.Where(x => !playerInfos.Any(y => y.Equals(x.PlayerInfo))))
                        {
                            if (controller != null && !controller.destroyed)
                            {
                                Destroy(controller.gameObject);
                            }
                        }
                        _players.RemoveAll(x => x == null || x.destroyed);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"PlayerControllers exception: {e}");
                }

                if (_currentScene == "GameCore" && loaded)
                {
                    playerInfos      = playerInfos.OrderByDescending(x => x.playerScore).ToList();
                    localPlayerIndex = playerInfos.FindIndexInList(Client.Instance.playerInfo);
                    if (_scoreDisplays.Count < 5)
                    {
                        _scoreScreen = new GameObject("ScoreScreen");
                        _scoreScreen.transform.position = new Vector3(0f, 4f, 12f);
                        _scoreScreen.transform.rotation = Quaternion.Euler(0f, 0f, 0f);

                        _scoreDisplays.Clear();

                        for (int i = 0; i < 5; i++)
                        {
                            PlayerInfoDisplay buffer = new GameObject("ScoreDisplay " + i).AddComponent <PlayerInfoDisplay>();
                            buffer.transform.SetParent(_scoreScreen.transform);
                            buffer.transform.localPosition = new Vector3(0f, 2.5f - i, 0);

                            _scoreDisplays.Add(buffer);
                        }
                    }

                    if (playerInfos.Count <= 5)
                    {
                        for (int i = 0; i < playerInfos.Count; i++)
                        {
                            _scoreDisplays[i].UpdatePlayerInfo(playerInfos[i], playerInfos.FindIndexInList(playerInfos[i]));
                        }
                        for (int i = playerInfos.Count; i < _scoreDisplays.Count; i++)
                        {
                            _scoreDisplays[i].UpdatePlayerInfo(null, 0);
                        }
                    }
                    else
                    {
                        if (localPlayerIndex < 3)
                        {
                            for (int i = 0; i < 5; i++)
                            {
                                _scoreDisplays[i].UpdatePlayerInfo(playerInfos[i], playerInfos.FindIndexInList(playerInfos[i]));
                            }
                        }
                        else if (localPlayerIndex > playerInfos.Count - 3)
                        {
                            for (int i = playerInfos.Count - 5; i < playerInfos.Count; i++)
                            {
                                _scoreDisplays[i - (playerInfos.Count - 5)].UpdatePlayerInfo(playerInfos[i], playerInfos.FindIndexInList(playerInfos[i]));
                            }
                        }
                        else
                        {
                            for (int i = localPlayerIndex - 2; i < localPlayerIndex + 3; i++)
                            {
                                _scoreDisplays[i - (localPlayerIndex - 2)].UpdatePlayerInfo(playerInfos[i], playerInfos.FindIndexInList(playerInfos[i]));
                            }
                        }
                    }
                }
            }
            break;

            case CommandType.UpdateVoIPData:
            {
                if (!Config.Instance.EnableVoiceChat)
                {
                    return;
                }

                int playersCount = msg.ReadInt32();

                for (int j = 0; j < playersCount; j++)
                {
                    try
                    {
                        VoipFragment data = new VoipFragment(msg);

#if DEBUG
                        if (data.data != null && data.data.Length > 0)
#else
                        if (data.data != null && data.data.Length > 0 && data.playerId != Client.Instance.playerInfo.playerId)
#endif
                        {
                            if (speexDec == null || speexDec.mode != data.mode)
                            {
                                speexDec = SpeexCodex.Create(data.mode);
                            }
                            _players.FirstOrDefault(x => x.PlayerInfo.playerId == data.playerId)?.PlayVoIPFragment(speexDec.Decode(data.data), data.index);
                        }
                    }
                    catch (Exception e)
                    {
#if DEBUG
                        Misc.Logger.Exception($"Unable to parse VoIP fragment! Excpetion: {e}");
#endif
                    }
                }
            }
            break;

            case CommandType.SetGameState:
            {
                if (_currentScene == "GameCore" && loaded)
                {
                    PropertyInfo property = typeof(StandardLevelGameplayManager).GetProperty("gameState");
                    property.DeclaringType.GetProperty("gameState");
                    property.GetSetMethod(true).Invoke(_gameManager, new object[] { (StandardLevelGameplayManager.GameState)msg.ReadByte() });
                }
            }
            break;

            case CommandType.DisplayMessage:
            {
                _messageDisplayTime          = msg.ReadFloat();
                _messageDisplayText.fontSize = msg.ReadFloat();

                _messageDisplayText.text = msg.ReadString();

                if (msg.LengthBits - msg.Position >= 8)
                {
                    MessagePosition position = (MessagePosition)msg.ReadByte();

                    switch (position)
                    {
                    default:
                    case MessagePosition.Top:
                        _messageDisplayText.transform.position = new Vector3(0f, 3.75f, 3.75f);
                        _messageDisplayText.transform.rotation = Quaternion.Euler(-30f, 0f, 0f);
                        break;

                    case MessagePosition.Bottom:
                        _messageDisplayText.transform.position = new Vector3(0f, 0f, 2.25f);
                        _messageDisplayText.transform.rotation = Quaternion.Euler(30f, 0f, 0f);
                        break;
                    }
                }
            }; break;
            }
        }