Example #1
0
    /// <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);
        }
    }
Example #2
0
 public void UpdatePlayer(PlayerInfo infos)
 {
     if (PlayersConnected.ContainsKey(infos.UserId))
     {
         PlayersConnected[infos.UserId] = infos;
     }
     else
     {
         PlayersConnected.Add(infos.UserId, infos);
     }
 }
Example #3
0
    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);
        }
    }
Example #4
0
    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);
        }
    }
Example #5
0
    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);
        }
    }
Example #6
0
 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();
     }
 }
Example #7
0
    /// <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);
        }
    }
Example #8
0
    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();
        }
    }
Example #9
0
    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();
        }
    }