diff options
Diffstat (limited to 'UI/PlayerLobby')
-rw-r--r-- | UI/PlayerLobby/Lobby.tscn | 43 | ||||
-rw-r--r-- | UI/PlayerLobby/lobby.gd | 83 | ||||
-rw-r--r-- | UI/PlayerLobby/lobby.gd.uid | 1 | ||||
-rw-r--r-- | UI/PlayerLobby/lobby_setting.gd.uid | 1 | ||||
-rw-r--r-- | UI/PlayerLobby/lobby_setting.tscn | 2 | ||||
-rw-r--r-- | UI/PlayerLobby/map_button.gd | 6 | ||||
-rw-r--r-- | UI/PlayerLobby/map_button.gd.uid | 1 | ||||
-rw-r--r-- | UI/PlayerLobby/map_button.tscn | 9 |
8 files changed, 85 insertions, 61 deletions
diff --git a/UI/PlayerLobby/Lobby.tscn b/UI/PlayerLobby/Lobby.tscn index 228d512..05eaea1 100644 --- a/UI/PlayerLobby/Lobby.tscn +++ b/UI/PlayerLobby/Lobby.tscn @@ -1,15 +1,16 @@ -[gd_scene load_steps=11 format=3 uid="uid://r45j806p4a74"] +[gd_scene load_steps=12 format=3 uid="uid://r45j806p4a74"] -[ext_resource type="Script" path="res://UI/PlayerLobby/lobby.gd" id="1_mm4gt"] +[ext_resource type="Script" uid="uid://87etsgjm04nb" path="res://UI/PlayerLobby/lobby.gd" id="1_mm4gt"] [ext_resource type="Texture2D" uid="uid://kwgx33awj4y2" path="res://UI/Assets/Enjl-Starry Space Background/background_1.png" id="2_0pdjl"] [ext_resource type="Theme" uid="uid://bt84t61hrvoyn" path="res://UI/PlayerLobby/lobby_theme.tres" id="2_syjfh"] [ext_resource type="PackedScene" uid="uid://cq6p055yuac0o" path="res://UI/players_list_container.tscn" id="3_2r7nj"] -[ext_resource type="PackedScene" uid="uid://bl65jllb3e2py" path="res://Stages/Wintermaul/Wintermaul.tscn" id="3_3hc3h"] [ext_resource type="Texture2D" uid="uid://ci7qydmwbanbp" path="res://Stages/Wintermaul/Assets/thumbnail.png" id="3_8r1n2"] [ext_resource type="PackedScene" uid="uid://dwscklgkbhq28" path="res://Stages/Wintermaul2/Wintermaul2.tscn" id="4_v1caa"] +[ext_resource type="PackedScene" uid="uid://uwfmfa3c0gqk" path="res://UI/PlayerLobby/map_button.tscn" id="5_3omml"] [ext_resource type="Texture2D" uid="uid://cfiu7ah67vdpg" path="res://Stages/Square/Assets/thumbnail.png" id="5_5ewsi"] -[ext_resource type="PackedScene" uid="uid://jxy7fj7yymfl" path="res://Stages/TinySwords/WintermaulTinySwords.tscn" id="5_hnsfx"] [ext_resource type="Texture2D" uid="uid://cujvoqsqfrl4a" path="res://Stages/Wintermaul2/Assets/thumbnail.png" id="5_j23oc"] +[ext_resource type="PackedScene" uid="uid://bl65jllb3e2py" path="res://Stages/Wintermaul/Wintermaul.tscn" id="6_qk8ma"] +[ext_resource type="PackedScene" uid="uid://cw0hxxa1m1qm7" path="res://Stages/Square/square.tscn" id="8_qk8ma"] [node name="Lobby" type="Control"] layout_mode = 3 @@ -85,37 +86,23 @@ layout_mode = 2 size_flags_horizontal = 3 theme = ExtResource("2_syjfh") -[node name="MapButton" type="Button" parent="MarginContainer/VBoxContainer/CenterContainer/HBoxContainer/Maps"] +[node name="MapButton" parent="MarginContainer/VBoxContainer/CenterContainer/HBoxContainer/Maps" instance=ExtResource("5_3omml")] layout_mode = 2 -mouse_default_cursor_shape = 2 -toggle_mode = true -text = "Wintermaul" -metadata/map_scene = ExtResource("3_3hc3h") -metadata/thumbnail = ExtResource("3_8r1n2") -metadata/settings = ["starting_lives", "starting_money", "starting_income", "use_premade_teams"] +map_scene = ExtResource("6_qk8ma") +thumbnail = ExtResource("3_8r1n2") +settings = Array[String](["starting_lives", "starting_money", "starting_income", "use_premade_teams"]) -[node name="MapButton2" type="Button" parent="MarginContainer/VBoxContainer/CenterContainer/HBoxContainer/Maps"] +[node name="MapButton2" parent="MarginContainer/VBoxContainer/CenterContainer/HBoxContainer/Maps" instance=ExtResource("5_3omml")] layout_mode = 2 -mouse_default_cursor_shape = 2 -toggle_mode = true text = "Squares" -metadata/thumbnail = ExtResource("5_5ewsi") +map_scene = ExtResource("8_qk8ma") +thumbnail = ExtResource("5_5ewsi") -[node name="MapButton3" type="Button" parent="MarginContainer/VBoxContainer/CenterContainer/HBoxContainer/Maps"] +[node name="MapButton3" parent="MarginContainer/VBoxContainer/CenterContainer/HBoxContainer/Maps" instance=ExtResource("5_3omml")] layout_mode = 2 -mouse_default_cursor_shape = 2 -toggle_mode = true text = "Wintermaul 2" -metadata/map_scene = ExtResource("4_v1caa") -metadata/thumbnail = ExtResource("5_j23oc") - -[node name="MapButton4" type="Button" parent="MarginContainer/VBoxContainer/CenterContainer/HBoxContainer/Maps"] -visible = false -layout_mode = 2 -mouse_default_cursor_shape = 2 -toggle_mode = true -text = "Wintermaul Tiny Swords" -metadata/map_scene = ExtResource("5_hnsfx") +map_scene = ExtResource("4_v1caa") +thumbnail = ExtResource("5_j23oc") [node name="Thumbnail" type="TextureRect" parent="MarginContainer/VBoxContainer/CenterContainer/HBoxContainer"] unique_name_in_owner = true diff --git a/UI/PlayerLobby/lobby.gd b/UI/PlayerLobby/lobby.gd index 4169478..c391a11 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: @@ -45,7 +49,7 @@ func _ready() -> void: if multiplayer.is_server(): $KeepAliveTimer.start() $KeepAliveTimer.timeout.connect(func(): - GameLobby.request_post("/keep-alive") + await GameLobby.request_post("/keep-alive") ) @@ -72,7 +76,6 @@ 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) @@ -81,12 +84,14 @@ func update_list(current_list: Control, player_ids: Array): 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: @@ -97,19 +102,21 @@ func _on_cancel_button_pressed() -> void: @rpc("authority", "call_local") -func start(): - var packed_scene = %Maps.get_child(current_map_idx).get_meta("map_scene") +func start(host_settings: Dictionary): + var packed_scene = %Maps.get_child(current_map_idx).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"] scene.premade_teams = premade_teams + multiplayer.multiplayer_peer.refuse_new_connections = true + Client.change_scene_to_instance(scene) @@ -125,16 +132,18 @@ func set_map(index: int): node.add_theme_color_override("font_color", Color(1.0, 1.0, 1.0, 0.5)) var map_button = %Maps.get_child(index) - var thumbnail = map_button.get_meta("thumbnail") + var thumbnail = map_button.thumbnail # settings for child in %Settings.get_children(): - child.queue_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] + child.free() + + if map_button.settings.size() > 0: + current_map_scene = map_button.map_scene.instantiate() + for setting in map_button.settings: + 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] @@ -157,26 +166,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") diff --git a/UI/PlayerLobby/lobby.gd.uid b/UI/PlayerLobby/lobby.gd.uid new file mode 100644 index 0000000..f3af632 --- /dev/null +++ b/UI/PlayerLobby/lobby.gd.uid @@ -0,0 +1 @@ +uid://87etsgjm04nb diff --git a/UI/PlayerLobby/lobby_setting.gd.uid b/UI/PlayerLobby/lobby_setting.gd.uid new file mode 100644 index 0000000..b2bfbef --- /dev/null +++ b/UI/PlayerLobby/lobby_setting.gd.uid @@ -0,0 +1 @@ +uid://b47vm2uggdqxn diff --git a/UI/PlayerLobby/lobby_setting.tscn b/UI/PlayerLobby/lobby_setting.tscn index 62d1c66..d4baded 100644 --- a/UI/PlayerLobby/lobby_setting.tscn +++ b/UI/PlayerLobby/lobby_setting.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://fgqkxat8pwjk"] -[ext_resource type="Script" path="res://UI/PlayerLobby/lobby_setting.gd" id="1_ntovh"] +[ext_resource type="Script" uid="uid://b47vm2uggdqxn" path="res://UI/PlayerLobby/lobby_setting.gd" id="1_ntovh"] [node name="LobbySetting" type="HBoxContainer"] size_flags_vertical = 2 diff --git a/UI/PlayerLobby/map_button.gd b/UI/PlayerLobby/map_button.gd new file mode 100644 index 0000000..a52c2f7 --- /dev/null +++ b/UI/PlayerLobby/map_button.gd @@ -0,0 +1,6 @@ +extends Button + + +@export var map_scene: PackedScene +@export var thumbnail: Texture2D +@export var settings: Array[String] diff --git a/UI/PlayerLobby/map_button.gd.uid b/UI/PlayerLobby/map_button.gd.uid new file mode 100644 index 0000000..6c7009f --- /dev/null +++ b/UI/PlayerLobby/map_button.gd.uid @@ -0,0 +1 @@ +uid://c118jfgnuae7q diff --git a/UI/PlayerLobby/map_button.tscn b/UI/PlayerLobby/map_button.tscn new file mode 100644 index 0000000..c947db1 --- /dev/null +++ b/UI/PlayerLobby/map_button.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=3 uid="uid://uwfmfa3c0gqk"] + +[ext_resource type="Script" uid="uid://c118jfgnuae7q" path="res://UI/PlayerLobby/map_button.gd" id="1_ks6re"] + +[node name="MapButton" type="Button"] +mouse_default_cursor_shape = 2 +toggle_mode = true +text = "Wintermaul" +script = ExtResource("1_ks6re") |