-
Notifications
You must be signed in to change notification settings - Fork 29
Description
With ENetMultiplayer my game is structured like this to allow for separation of concerns, as well as split screen multiplayer:
- Root
- Server (ENetMultiplayerPeer 0)
- Clients
- Client 1 (ENetMultiplayerPeer 1)
- Client 2 (ENetMultiplayerPeer 2)
- ...
Starting a server with just one player is just a simpler case of this:
- Root
- Server (ENetMultiplayerPeer 0)
- Clients
- Client 1 (ENetMultiplayerPeer 1)
Each Server/Client has its own MultiplayerAPI and Peer. This is how the server is started:
# root.gd
var peer = ENetMultiplayerPeer
var error = peer.create_server(port, max_players)
server.start(peer)# server.gd
func start(peer: MultiplayerPeer):
get_tree().set_multiplayer(
multiplayer.create_default_interface(),
get_path()
)
multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(player_joined)
multiplayer.peer_disconnected.connect(player_left)This is how the client is started
# root.gd
var peer = ENetMultiplayerPeer.new()
peer.create_client(address, port)
return start_client(peer)# client.gd
func start(peer: MultiplayerPeer) -> void:
get_tree().set_multiplayer(
MultiplayerAPI.create_default_interface(),
get_path()
)
multiplayer.multiplayer_peer = peer
multiplayer.connected_to_server.connect(on_connected_to_server)
multiplayer.connection_failed.connect(on_connection_failed)
multiplayer.server_disconnected.connect(on_server_disconnected)This works pretty well. It means I can have split screen multiplayer and networked multiplayer simultaneously for basically nothing. It also means my server and client logic are separated into entirely different scripts (e.g. PlayerServer, PlayerClientLocal, PlayerClientRemote). Now that I'm trying to integrate with Steam Multiplayer Peer though I can't seem to figure out a way to connect multiple client Steam Multiplayer Peers in the same scene tree to a server Steam Multiplayer Peer. Is it possible to do something similar with Steam Multiplayer Peer? I.e:
Steam.createLobby(Steam.LobbyType.LOBBY_TYPE_PUBLIC, max_players)
var lobby_id = (await Steam.lobby_created[1])
await Steam.lobby_joined
var server_peer = SteamMultiplayerPeer.new()
var server_error = server_peer.create_host(0)
var server = start_server(peer, gamemode, level)
var client_peer = SteamMultiplayerPeer.new()
var client_error = client_peer.create_client(Steam.getLobbyOwner(lobby_id, 0))
var client = start_client(peer)When I try to do that, I get the following error_string
'Can't connect'
Which is not very helpful unfortunately, but I think is caused by trying to create multiple SteamMultiplayerPeers for my current user. Is there a way I can get this to work without rearchitecting my whole game?
Note: I only use RPC's, I don't use MultiplayerSpawner or MultiplayerSynchronizer.