summaryrefslogtreecommitdiff
path: root/UI/PlayerLobby/lobby.gd
diff options
context:
space:
mode:
Diffstat (limited to 'UI/PlayerLobby/lobby.gd')
-rw-r--r--UI/PlayerLobby/lobby.gd69
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")