diff --git a/scenes/lobby.tscn b/scenes/lobby.tscn index 9ec12fa..e888891 100644 --- a/scenes/lobby.tscn +++ b/scenes/lobby.tscn @@ -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 diff --git a/scripts/lobby.gd b/scripts/lobby.gd index ee2ca8f..da38b3b 100644 --- a/scripts/lobby.gd +++ b/scripts/lobby.gd @@ -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)