Browse Source

Have server assign team to all players

master
Luna 7 years ago
parent
commit
9bb565d07e
2 changed files with 71 additions and 10 deletions
  1. +42
    -3
      scenes/lobby.tscn
  2. +29
    -7
      scripts/lobby.gd

+ 42
- 3
scenes/lobby.tscn View File

@ -335,7 +335,46 @@ selected = -1
items = [ ]
script = ExtResource( 2 )
[node name="HSeparator3" type="HSeparator" parent="." index="13"]
[node name="TeamLabel" type="Label" parent="." index="13"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 459.0
margin_top = 132.0
margin_right = 558.0
margin_bottom = 146.0
rect_pivot_offset = Vector2( 0, 0 )
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "Assigned team:"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="Team" type="Label" parent="." index="14"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 460.0
margin_top = 157.0
margin_right = 500.0
margin_bottom = 171.0
rect_pivot_offset = Vector2( 0, 0 )
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="HSeparator3" type="HSeparator" parent="." index="15"]
anchor_left = 0.0
anchor_top = 0.0
@ -351,7 +390,7 @@ mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 1
[node name="PlayerListLabel" type="Label" parent="." index="14"]
[node name="PlayerListLabel" type="Label" parent="." index="16"]
anchor_left = 0.0
anchor_top = 0.0
@ -371,7 +410,7 @@ percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="PlayerList" type="Label" parent="." index="15"]
[node name="PlayerList" type="Label" parent="." index="17"]
anchor_left = 0.5
anchor_top = 0.5


+ 29
- 7
scripts/lobby.gd View File

@ -58,20 +58,29 @@ func _connected_ok():
func collect_info():
my_info.username = get_node("Username").get_text()
my_info.hero = get_node("HeroSelect").get_selected_id()
my_info.is_right_team = false # Server assigns team, wait for that
remote func register_player(new_peer, info):
player_info[new_peer] = info
render_player_list()
if (get_tree().is_network_server()):
var right_team_count = 0
# Send current players' info to new player
for old_peer in player_info:
# Send new player, old player's info
rpc_id(new_peer, "register_player", old_peer, player_info[old_peer])
# You'd think this part could be met with a simple `rpc(`, but actually it can't
# My best guess is this is because we haven't registered the names yet, but I'm not sure (TODO)
if old_peer != 1 and old_peer != new_peer:
# Send old player, new player's info (not us, no infinite loop)
rpc_id(old_peer, "register_player", new_peer, info)
if old_peer != new_peer:
# We need to assign team later, so count current
if player_info[old_peer].is_right_team:
print(right_team_count)
right_team_count += 1
# You'd think this part could be met with a simple `rpc(`, but actually it can't
# My best guess is this is because we haven't registered the names yet, but I'm not sure (TODO)
if old_peer != 1:
# Send old player, new player's info (not us, no infinite loop)
rpc_id(old_peer, "register_player", new_peer, info)
var assign_right_team = right_team_count * 2 <= player_info.size()
rpc("assign_team", new_peer, assign_right_team)
if (player_info.size() == MAX_PLAYERS):
start_game()
@ -82,12 +91,25 @@ sync func set_hero(peer, hero):
player_info[peer].hero = hero
render_player_list()
sync func assign_team(peer, is_right_team):
player_info[peer].is_right_team = is_right_team
if peer == get_tree().get_network_unique_id():
if is_right_team:
get_node("Team").set_text("Right Team")
else:
get_node("Team").set_text("Left Team")
render_player_list()
func render_player_list():
var list = ""
var hero_names = get_node("HeroSelect").hero_names
for p in player_info:
list += "%-12s" % player_info[p].username
list += "%-12s" % hero_names[player_info[p].hero]
list += "%-15s" % player_info[p].username
list += "%-20s" % hero_names[player_info[p].hero]
if player_info[p].is_right_team:
list += "Right Team"
else:
list += "Left Team"
list += "\n"
get_node("PlayerList").set_text(list)


Loading…
Cancel
Save