Browse Source

Fix peers not properly sharing other peer's info

master
Luna 7 years ago
parent
commit
58b2fdf39f
3 changed files with 29 additions and 21 deletions
  1. +1
    -1
      scripts/hero_select.gd
  2. +14
    -8
      scripts/lobby.gd
  3. +14
    -12
      scripts/networking.gd

+ 1
- 1
scripts/hero_select.gd View File

@ -26,7 +26,7 @@ func _ready():
func set_hero(hero):
select(hero)
networking.set_info("hero", hero)
networking.set_info_from_server("hero", hero)
func random_hero():
var hero = randi() % hero_names.size()


+ 14
- 8
scripts/lobby.gd View File

@ -9,14 +9,20 @@ onready var ready_button = get_node("Ready")
func _ready():
# Connect (to networking)
get_node("Username").connect("text_changed", self, "_send_name")
var spectating = util.args.get_value("-silent")
get_node("Spectating").pressed = spectating
get_node("Spectating").connect("toggled", self, "_set_info_callback", ["spectating"])
ready_button.connect("toggled", self, "_set_info_callback", ["ready"])
start_game_button.connect("pressed", networking, "start_game")
# Connect (from networking)
networking.connect("info_updated", self, "render_player_list")
get_tree().connect("connected_to_server", self, "_connected")
# Connect (static)
get_node("Back").connect("pressed", self, "_exit_to_menu")
var spectating = util.args.get_value("-silent")
get_node("Spectating").pressed = spectating
# Shown, maybe, in _check_begun
start_game_button.hide()
if get_tree().is_network_server():
@ -36,18 +42,18 @@ func _ready():
else:
level_select.hide()
networking.connect("info_updated", self, "render_player_list")
get_tree().connect("connected_to_server", self, "_connected")
if get_tree().is_network_server():
_connected()
func _connected():
_send_name()
networking.set_info_from_server("ready", false)
networking.set_info_from_server("spectating", util.args.get_value("-silent"))
networking.set_info_from_server("begun", false)
if util.args.get_value("-hero") == "r":
hero_select.random_hero()
else:
print(util.args.get_value("-hero"))
hero_select.set_hero(int(util.args.get_value("-hero")))
if util.args.get_value("-start-game"):
@ -59,7 +65,7 @@ func _set_level(level):
# Because of the annoying way callbacks work (automatic parameter, optional parameter)
# We need a utility function for making these kinds of callbacks for set_info
func _set_info_callback(value, key):
networking.set_info(key, value)
networking.set_info_from_server(key, value)
sync func set_hero(peer, hero):
networking.players[peer].hero = hero
@ -67,7 +73,7 @@ sync func set_hero(peer, hero):
func _send_name():
var name = get_node("Username").text
networking.set_info("username", name)
networking.set_info_from_server("username", name)
func _check_begun():
var game_started = networking.players[1].begun


+ 14
- 12
scripts/networking.gd View File

@ -74,13 +74,6 @@ func send_all_info(new_peer):
set_info(key, val, p)
remote func register_player(new_peer):
var info = {}
info.is_right_team = right_team_next
info.ready = false
info.spectating = false
info.begun = false
right_team_next = not right_team_next
players[new_peer] = info
if get_tree().is_network_server():
# I tell new player about all the existing people
send_all_info(new_peer)
@ -115,16 +108,25 @@ sync func _set_info(key, value, peer=0):
if peer == 0:
# Was self. See https://github.com/godotengine/godot/issues/19026
peer = get_tree().get_network_unique_id()
if players.has(peer):
players[peer][key] = value
emit_signal("info_updated")
if not players.has(peer):
players[peer] = {}
players[peer][key] = value
emit_signal("info_updated")
func set_info(key, value, peer=0):
master func set_info(key, value, peer=0):
rpc("_set_info", str(key), value, peer)
# When connectivity is not yet guaranteed, the only one we know is always
# connected to everyone is the server. So in initial handshakes, it's better to
# tell the server what to tell everyone to do
func set_info_from_server(key, value, peer=0):
if not peer:
peer = get_tree().get_network_unique_id()
rpc_id(1, "set_info", key, value, peer)
func _on_connect():
emit_signal("info_updated")
register_player(get_tree().get_network_unique_id())
emit_signal("info_updated")
func _check_info():
# Check for "everyone is ready"


Loading…
Cancel
Save