Skip to content

Commit 38bfaba

Browse files
committed
Use p2p in multiplayer bomber player exchange.
We used to broadcast player info on connect and have the server relay it to other clients. With this approach, each peer (including server) sends its own info once to other peers as soon as they connects. When a new player connects, it is notified of all the already connected peers by the `network_peer_connected` signal. Any already connected peer is also notified of the newly connected peer by the same signal.
1 parent 85f36d6 commit 38bfaba

File tree

2 files changed

+14
-24
lines changed

2 files changed

+14
-24
lines changed

networking/multiplayer_bomber/gamestate.gd

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,23 @@ signal game_ended()
2020
signal game_error(what)
2121

2222
# Callback from SceneTree
23-
func _player_connected(_id):
24-
# This is not used in this demo, because _connected_ok is called for clients
25-
# on success and will do the job.
26-
pass
23+
func _player_connected(id):
24+
# Registration of a client beings here, tell the connected player that we are here
25+
rpc_id(id, "register_player", player_name)
2726

2827
# Callback from SceneTree
2928
func _player_disconnected(id):
30-
if get_tree().is_network_server():
31-
if has_node("/root/world"): # Game is in progress
29+
if has_node("/root/world"): # Game is in progress
30+
if get_tree().is_network_server():
3231
emit_signal("game_error", "Player " + players[id] + " disconnected")
3332
end_game()
34-
else: # Game is not in progress
35-
# If we are the server, send to the new dude all the already registered players
36-
unregister_player(id)
37-
for p_id in players:
38-
# Erase in the server
39-
rpc_id(p_id, "unregister_player", id)
33+
else: # Game is not in progress
34+
# Unregister this player
35+
unregister_player(id)
4036

4137
# Callback from SceneTree, only for clients (not server)
4238
func _connected_ok():
43-
# Registration of a client beings here, tell everyone that we are here
44-
rpc("register_player", get_tree().get_network_unique_id(), player_name)
39+
# We just connected to a server
4540
emit_signal("connection_succeeded")
4641

4742
# Callback from SceneTree, only for clients (not server)
@@ -56,18 +51,13 @@ func _connected_fail():
5651

5752
# Lobby management functions
5853

59-
remote func register_player(id, new_player_name):
60-
if get_tree().is_network_server():
61-
# If we are the server, let everyone know about the new player
62-
rpc_id(id, "register_player", 1, player_name) # Send myself to new dude
63-
for p_id in players: # Then, for each remote player
64-
rpc_id(id, "register_player", p_id, players[p_id]) # Send player to new dude
65-
rpc_id(p_id, "register_player", id, new_player_name) # Send new dude to player
66-
54+
remote func register_player(new_player_name):
55+
var id = get_tree().get_rpc_sender_id()
56+
print(id)
6757
players[id] = new_player_name
6858
emit_signal("player_list_changed")
6959

70-
remote func unregister_player(id):
60+
func unregister_player(id):
7161
players.erase(id)
7262
emit_signal("player_list_changed")
7363

networking/multiplayer_bomber/player.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ sync func setup_bomb(bomb_name, pos, by_who):
1313
bomb.set_name(bomb_name) # Ensure unique name for the bomb
1414
bomb.position = pos
1515
bomb.from_player = by_who
16-
# No need to set network mode to bomb, will be owned by master by default
16+
# No need to set network master to bomb, will be owned by server by default
1717
get_node("../..").add_child(bomb)
1818

1919
var current_anim = ""

0 commit comments

Comments
 (0)