diff options
Diffstat (limited to 'UI/PlayerLobby/lobby.gd')
-rw-r--r-- | UI/PlayerLobby/lobby.gd | 69 |
1 files changed, 43 insertions, 26 deletions
diff --git a/UI/PlayerLobby/lobby.gd b/UI/PlayerLobby/lobby.gd index 8c1c4a9..a278a33 100644 --- a/UI/PlayerLobby/lobby.gd +++ b/UI/PlayerLobby/lobby.gd @@ -19,7 +19,11 @@ func _ready() -> void: if multiplayer.is_server(): joined.connect(func(): set_map.rpc(current_map_idx) + for setting in settings: + set_setting.rpc(setting, settings[setting]) + # TODO: check that use_premade_teams behaves correctly on join ) + for idx in %Maps.get_child_count(): %Maps.get_child(idx).pressed.connect(func(): if current_map_idx != idx: @@ -72,22 +76,22 @@ func update_list(current_list: Control, player_ids: Array): label.add_theme_constant_override("outline_size", 10) control.add_child(label) current_list.add_child(control) - #joined.emit() control.get_child(0).text = str(player.username) control.get_child(0).tooltip_text = str(id) current_list.move_child(control, player_ids.find(id) + 1) - # TODO: test with 3 players func _on_peer_connected(id): Network._on_peer_connected(id) + joined.emit() + func _on_peer_disconnected(id): Network._on_peer_disconnected(id) func _on_start_button_pressed() -> void: - start.rpc() + start.rpc(settings) func _on_cancel_button_pressed() -> void: @@ -98,14 +102,14 @@ func _on_cancel_button_pressed() -> void: @rpc("authority", "call_local") -func start(): +func start(host_settings: Dictionary): var packed_scene = %Maps.get_child(current_map_idx).get_meta("map_scene") var scene = packed_scene.instantiate() - for setting in settings: - scene[setting] = settings[setting] + for setting in host_settings: + scene[setting] = host_settings[setting] - if settings.get("use_premade_teams"): + if host_settings.get("use_premade_teams"): var premade_teams = {} for team_name in teams: premade_teams[team_name] = teams[team_name]["players"] @@ -130,12 +134,15 @@ func set_map(index: int): # settings for child in %Settings.get_children(): - child.queue_free() + child.free() + if map_button.has_meta("settings"): current_map_scene = map_button.get_meta("map_scene").instantiate() var map_settings = map_button.get_meta("settings", []) for setting in map_settings: - settings[setting] = current_map_scene[setting] + if not settings.has(setting): + settings[setting] = current_map_scene[setting] + var control = preload("res://UI/PlayerLobby/lobby_setting.tscn").instantiate() control.label = setting control.value = settings[setting] @@ -158,26 +165,36 @@ func set_setting(key: String, value: Variant): %Settings.get_node(key).value = value # generate PlayersLists per team with clickable labels to switch team - if settings.get("use_premade_teams"): - %PlayersListContainer.visible = false - var team_names = current_map_scene.teams.names() - var players_per_team = Network.get_ordered_player_ids().size() / team_names.size() - for idx in team_names.size(): - var team_name = team_names[idx] - - var new_list_container = preload("res://UI/players_list_container.tscn").instantiate() - new_list_container.label = team_name.to_upper() - new_list_container.clicked.connect(func(): - switch_team.rpc(team_name) + if key == "use_premade_teams": + if value: + %PlayersListContainer.visible = false + var team_names = current_map_scene.teams.names() + var players_per_team = ceil( + float(Network.get_ordered_player_ids().size()) / float(team_names.size()) ) - %Teams.add_child(new_list_container) - var offset = players_per_team * idx - teams[team_name] = {} - teams[team_name]["players"] = Network.get_ordered_player_ids().slice(offset, offset + players_per_team) - teams[team_name]["list"] = new_list_container.list + for idx in team_names.size(): + var team_name = team_names[idx] + + var new_list_container = preload("res://UI/players_list_container.tscn").instantiate() + new_list_container.label = team_name.to_upper() + new_list_container.clicked.connect(func(): + switch_team.rpc(team_name) + ) + %Teams.add_child(new_list_container) + + var offset = players_per_team * idx + teams[team_name] = {} + teams[team_name]["players"] = Network.get_ordered_player_ids().slice(offset, offset + players_per_team) + teams[team_name]["list"] = new_list_container.list + + update_list(teams[team_name]["list"], teams[team_name]["players"]) + else: + for node in %Teams.get_children().slice(1): # get all but the main list + node.queue_free() - update_list(teams[team_name]["list"], teams[team_name]["players"]) + update_list(list, Network.get_ordered_player_ids()) + %PlayersListContainer.visible = true @rpc("any_peer", "call_local") |