private void ProcesVoiceFragment(VoipFragment fragment) { if (isRecording) { fragment.playerId = Client.Instance.playerInfo.playerId; Client.Instance.SendVoIPData(fragment); } }
private void ProcesVoiceFragment(VoipFragment fragment) { if (voiceChatListener.isListening) { fragment.playerId = Client.Instance.playerInfo.playerId; Client.Instance.SendVoIPData(fragment); } }
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); } }
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; } }