예제 #1
0
    // Called on the HOST to handle the PlayerConnection message from the client
    // This message is sent right after the client connects in XXX
    private void HandlePlayerConnection(NetworkMessage rawMessage)
    {
        // Parse the message back
        PlayerConnectionMessage currentPlayerMessage = rawMessage.ReadMessage <PlayerConnectionMessage>();

        // Retreive all the data
        ConnectedPlayer currentPlayer = Players[rawMessage.conn];

        currentPlayer.PlayerName = currentPlayerMessage.PlayerName;
        currentPlayer.CarName    = currentPlayerMessage.CarName;
        currentPlayer.IsBusrider = currentPlayerMessage.IsBusrider;
        if (currentPlayer.IsBusrider)
        {
            currentPlayer.CarName = "the bus";
        }

        // Instantiate the actual car
        foreach (GameObject prefab in Cars)
        {
            if (prefab.name == currentPlayer.CarName)
            {
                GameObject carInstance = Instantiate(prefab, currentPlayer.PlayerSpawn.transform.position, Quaternion.identity);
                currentPlayer.PlayerGO = carInstance;
                NetworkServer.AddPlayerForConnection(rawMessage.conn, carInstance, currentPlayer.PlayerControllerID);
                carInstance.GetComponent <CheckpointReader>().username = currentPlayer.PlayerName;
                break;
            }
        }

        // Update UI
        string newText = "Players: " + Players.Count + "\n";

        foreach (ConnectedPlayer knownPlayer in Players.Values)
        {
            newText += knownPlayer.PlayerName + "\n";
        }
        GameObject.Find("PlayerList").GetComponent <Text>().text = newText;

        // Send player list
        List <int>    ids   = new List <int>();
        List <string> names = new List <string>();

        foreach (var kvp in Players.Values)
        {
            ids.Add(kvp.PlayerID);
            names.Add(kvp.PlayerName);
        }
        PlayerListMessage playerListMessage = new PlayerListMessage()
        {
            NetworkID   = ids.ToArray(),
            PlayerNames = names.ToArray()
        };

        foreach (var connectedPlayer in Players.Keys)
        {
            connectedPlayer.Send(TGMessageTypes.PlayerList, playerListMessage);
        }
    }
예제 #2
0
 public void PlayerConnected(PlayerConnectionMessage message)
 {
     _logger.LogInformation($"Welcome, {message.Sender.SteamId}!");
 }