public void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo) { if (Peers.Contains(peer)) { Peers.Remove(peer); } LobbyPlayer lp = LobbyMenu.instance.GetPeer(peer); if (lp) { LobbyMenu.instance.RemovePlayer(lp); } PLobbyPlayer packet = new PLobbyPlayer(); packet.id = lp.id; packet.name = lp.name; packet.action = false; for (int i = 0; i < Peers.Count; i++) { Peers[i].Send(serializer.Serialize <PLobbyPlayer>(packet), SendOptions.ReliableOrdered); } Debug.Log("Peer disconnected, reason: " + disconnectInfo.Reason.ToString()); }
public void OnClientLobbyAction(PLobbyPlayer packet) { if (packet.action) { LobbyMenu.instance.CreatePlayer(packet.id, packet.name); } else { LobbyPlayer p = LobbyMenu.instance.GetPeer(packet.id); LobbyMenu.instance.RemovePlayer(p); } }
// This method should be called whenever a new player is added to the lobby public void AddPlayer(PLobbyPlayer player) { if (playersList.Contains(player)) // Adding player that is already in the lobby! { return; } playersList.Add(player); player.setPlayerIndex(playersList.Count - 1); //GameObject newPlayerRow = Instantiate(playerRowPrefab) as GameObject; //newPlayerRow.transform.SetParent(playerListTransform, false); player.transform.SetParent(playerListTransform, false); // false to prevent the world position from changing }
public void OnReceiveHandshake(PClientHandshake packet, NetPeer peer) { int id = LobbyMenu.instance.Players.Count; LobbyMenu.instance.CreatePlayer(peer, packet.clientName, false); PLobby lobbyPacket = new PLobby(); List <SerializedLobbyPlayer> S = new List <SerializedLobbyPlayer>(); for (int i = 0; i < LobbyMenu.instance.Players.Count; i++) { LobbyPlayer p = LobbyMenu.instance.Players[i]; SerializedLobbyPlayer slp = new SerializedLobbyPlayer(); slp.id = p.id; slp.name = p.playerName; S.Add(slp); } lobbyPacket.serverName = serverName; lobbyPacket.players = S.ToArray(); peer.Send(serializer.Serialize(lobbyPacket), SendOptions.ReliableOrdered); PLobbyPlayer lp = new PLobbyPlayer(); lp.id = id; lp.name = packet.clientName; lp.action = true; for (int i = 0; i < Peers.Count; i++) { if (Peers[i] != peer) { Peers[i].Send(serializer.Serialize(lp), SendOptions.ReliableOrdered); } } }
// This method should be called whenever a player leaves the lobby public void RemovePlayer(PLobbyPlayer player) { playersList.Remove(player); }