/// <summary> /// Adds a NetworkPlayer to the networks manager pool of clients and sets the ID, also the manager will hook to some player events to be able to manage it on state changes. /// </summary> /// <param name="player">The NetworkPlayer in cuestion</param> public void AddNetPlayer(NetworkPlayer player) { //Add the player to the list and hook the ready event so we can check to start the game PlayersConnected.Add(player); player.PlayerBecameReady += NetPlayerGotReady; //If we are the server update the ID of the players so they are unique if (Is_Server) { UpdatePlayers_ID(); } string currentSceneName = SceneManager.GetActiveScene().name; //Check where the player is to instanciate the correct object to play if (MatchSettings._instance != null && MatchSettings._instance.MapID == currentSceneName) { player.GameSceneLoaded(); } else if (MainMenuUIHandler._instance != null) { player.LobbyLoaded(); } //Fire event if (NetworkPlayerAdded != null) { NetworkPlayerAdded.Invoke(player); } }
public void UpdatePlayer(PlayerInfo infos) { if (PlayersConnected.ContainsKey(infos.UserId)) { PlayersConnected[infos.UserId] = infos; } else { PlayersConnected.Add(infos.UserId, infos); } }
public async void Matchmake(User user) { try { client = new Colyseus.Client("ws://10.57.30.20:2567"); room = await client.JoinOrCreate <State>("game"); await Task.Delay(1000); await room.Send( new { userInfo = new { user.DeviceID, user.Gender, user.Name, user.Star, user.Age } }); room.State.players.OnAdd += Players_OnAdd; room.State.players.OnChange += Players_OnChange; room.State.OnChange += State_OnChange; room.OnError += Room_OnError; numPlayers++; if (room.State.players.Count == 2) { playernumber = 2; USER value = ((PlayerSchema)(room.State.players.Items[0])).User; EnemyInfoReceived?.Invoke(new User() { Age = (int)value.Age, Name = value.Name, Star = value.Star, Gender = value.Gender }); PlayersConnected?.Invoke(true); } } catch (Exception e) { PlayersConnected?.Invoke(false); Debug.Log("Error: " + e.Message); } }
private void Players_OnAdd(PlayerSchema value, string key) { numPlayers++; Debug.Log("A player has joined"); if (numPlayers == 2) { Debug.LogWarning("changing scenes"); PlayersConnected?.Invoke(true); } }
public override void OnServerRemovePlayer(NetworkConnection conn, PlayerController player) { //Vase handling base.OnServerRemovePlayer(conn, player); //Ge the player from the connection and remove it from the game and the players list NetworkPlayer p = conn.playerControllers[0].gameObject.GetComponent <NetworkPlayer>(); if (p != null) { Destroy(p.gameObject); PlayersConnected.Remove(p); } }
public void RemovePlayer(PlayerInfo infos) { if (PlayersConnected.ContainsKey(infos.UserId)) { if (!SeenTime.ContainsKey(infos.Username.ToUpper())) { SeenTime.Add(infos.Username.ToUpper(), DateTime.Now); } else { SeenTime[infos.Username.ToUpper()] = DateTime.Now; } PlayersConnected.Remove(infos.UserId); SaveSeenTime(); } }
/// <summary> /// Removes a NetworkPlayer from the manager and if it is fired on the server update the IDS. /// </summary> /// <param name="player">The network player to remove</param> public void RemoveNetPlayer(NetworkPlayer player) { //Rmove the player and uppdate the ids PlayersConnected.Remove(player); UpdatePlayers_ID(); //Clean up references if (player != null) { player.PlayerBecameReady -= NetPlayerGotReady; } //Fire event if (NetworkPlayerRemoved != null) { NetworkPlayerRemoved.Invoke(player); } }
public override void OnStopClient() { //Base handling base.OnStopClient(); //Destroy all local players. This will only affect the client stopping not any other client or the server in the match foreach (NetworkPlayer p in PlayersConnected) { if (p != null) { Destroy(p.gameObject); } } PlayersConnected.Clear(); //Fire the event if (ClientShutdown != null) { ClientShutdown.Invoke(); } }
public override void OnStopServer() { //Base handling base.OnStopServer(); //Discconect and destroy all clients on the server and clients for (int i = 0; i < PlayersConnected.Count; i++) { NetworkPlayer p = PlayersConnected[i]; if (p != null) { NetworkServer.Destroy(p.gameObject); } } PlayersConnected.Clear(); //Reset network the scene name networkSceneName = string.Empty; //Fire evemt if (ServerShutdown != null) { ServerShutdown.Invoke(); } }