From 0d17544b3e3220a7493319271b79ce435f991a0b Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Sat, 15 Feb 2025 12:35:53 +0100 Subject: next commit --- UI/GameLobby/game_lobby.gd | 76 -------------------------- UI/GameLobby/game_lobby.tscn | 117 ----------------------------------------- UI/GameLobby/lobby_game.gd | 23 -------- UI/GameLobby/lobby_game.tscn | 19 ------- UI/GamesLobby/games_lobby.gd | 76 ++++++++++++++++++++++++++ UI/GamesLobby/games_lobby.tscn | 117 +++++++++++++++++++++++++++++++++++++++++ UI/GamesLobby/lobby_game.gd | 23 ++++++++ UI/GamesLobby/lobby_game.tscn | 19 +++++++ UI/PlayerLobby/lobby.gd | 69 +++++++++++++++--------- UI/Start.gd | 2 +- 10 files changed, 279 insertions(+), 262 deletions(-) delete mode 100644 UI/GameLobby/game_lobby.gd delete mode 100644 UI/GameLobby/game_lobby.tscn delete mode 100644 UI/GameLobby/lobby_game.gd delete mode 100644 UI/GameLobby/lobby_game.tscn create mode 100644 UI/GamesLobby/games_lobby.gd create mode 100644 UI/GamesLobby/games_lobby.tscn create mode 100644 UI/GamesLobby/lobby_game.gd create mode 100644 UI/GamesLobby/lobby_game.tscn (limited to 'UI') diff --git a/UI/GameLobby/game_lobby.gd b/UI/GameLobby/game_lobby.gd deleted file mode 100644 index f80015b..0000000 --- a/UI/GameLobby/game_lobby.gd +++ /dev/null @@ -1,76 +0,0 @@ -extends Control - - -var games := [] - -var refresh_interval := 15.0 - -@onready var lobby_game_scene := preload("res://UI/GameLobby/lobby_game.tscn") - - -func _ready() -> void: - %GamesList.get_child(0).queue_free() - - %ServerUrl.text = GameLobby.server_base_url - - if await check_game_lobby_available(): - get_server_list() - $RefreshTimer.wait_time = refresh_interval - $RefreshTimer.start() - else: - %ServerNotReachable.text = %ServerNotReachable.text.replace("%SERVER%", GameLobby.server_base_url) - - -func check_game_lobby_available(): - var is_available = await GameLobby.check_available() - - %ServerNotReachable.visible = !is_available - - return is_available - - -func get_server_list(): - var response = await GameLobby.request_get("/get-list") - var result = response.parse_json() - print(result) - - if result["success"]: - for node in %GamesList.get_children(): - node.queue_free() - - if result["data"].size() > 0: - %NoGamesFound.visible = false - - for game in result["data"]: - var lobby_game = lobby_game_scene.instantiate() - lobby_game.game_id = game["id"] - lobby_game.game_name = game["name"] - %GamesList.add_child(lobby_game) - else: - %NoGamesFound.visible = true - - -func _on_back_button_pressed() -> void: - get_tree().change_scene_to_file("res://UI/Start.tscn") - - -func _on_refresh_pressed() -> void: - if await check_game_lobby_available(): - get_server_list() - $RefreshTimer.start(refresh_interval) - - -func _on_refresh_timer_timeout() -> void: - get_server_list() - - -func _on_set_server_pressed() -> void: - var config = Client.get_config() - config.set_value( - "general", - "game_lobby_server_base_url", - %ServerUrl.text - ) - config.save("user://config") - - GameLobby.server_base_url = %ServerUrl.text diff --git a/UI/GameLobby/game_lobby.tscn b/UI/GameLobby/game_lobby.tscn deleted file mode 100644 index 8c632d6..0000000 --- a/UI/GameLobby/game_lobby.tscn +++ /dev/null @@ -1,117 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://b0uqf5h2j7fvk"] - -[ext_resource type="Script" path="res://UI/GameLobby/game_lobby.gd" id="1_1vvm7"] -[ext_resource type="Texture2D" uid="uid://kwgx33awj4y2" path="res://UI/Assets/Enjl-Starry Space Background/background_1.png" id="2_tyk1u"] -[ext_resource type="Theme" uid="uid://bt84t61hrvoyn" path="res://UI/PlayerLobby/lobby_theme.tres" id="3_3iumi"] -[ext_resource type="PackedScene" uid="uid://cs2a7wfrj4wn0" path="res://UI/GameLobby/lobby_game.tscn" id="3_83gpr"] - -[node name="GameLobby" type="Control"] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -script = ExtResource("1_1vvm7") - -[node name="Background" type="Control" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="ColorRect" type="ColorRect" parent="Background"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -color = Color(0, 0, 0, 1) - -[node name="TextureRect" type="TextureRect" parent="Background"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -texture = ExtResource("2_tyk1u") -stretch_mode = 1 - -[node name="MarginContainer" type="MarginContainer" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_constants/margin_left = 4 -theme_override_constants/margin_top = 4 -theme_override_constants/margin_right = 4 -theme_override_constants/margin_bottom = 4 - -[node name="CenterContainer" type="CenterContainer" parent="MarginContainer"] -layout_mode = 2 - -[node name="GamesList" type="VBoxContainer" parent="MarginContainer/CenterContainer"] -unique_name_in_owner = true -layout_mode = 2 - -[node name="LobbyGame" parent="MarginContainer/CenterContainer/GamesList" instance=ExtResource("3_83gpr")] -visible = false -layout_mode = 2 - -[node name="ServerNotReachable" type="Label" parent="MarginContainer/CenterContainer"] -unique_name_in_owner = true -visible = false -layout_mode = 2 -text = "Game Lobby Server at %SERVER% not reachable" - -[node name="NoGamesFound" type="Label" parent="MarginContainer/CenterContainer"] -unique_name_in_owner = true -visible = false -layout_mode = 2 -text = "No Games Found" - -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] -layout_mode = 2 -size_flags_horizontal = 8 -size_flags_vertical = 8 -theme = ExtResource("3_3iumi") - -[node name="Refresh" type="Button" parent="MarginContainer/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -mouse_default_cursor_shape = 2 -text = "Refresh" - -[node name="BackButton" type="Button" parent="MarginContainer/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -mouse_default_cursor_shape = 2 -text = "Back" - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] -layout_mode = 2 -size_flags_horizontal = 8 -size_flags_vertical = 0 - -[node name="ServerUrl" type="LineEdit" parent="MarginContainer/HBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -expand_to_text_length = true - -[node name="SetServer" type="Button" parent="MarginContainer/HBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -text = "Set Server" - -[node name="RefreshTimer" type="Timer" parent="."] - -[connection signal="pressed" from="MarginContainer/VBoxContainer/Refresh" to="." method="_on_refresh_pressed"] -[connection signal="pressed" from="MarginContainer/VBoxContainer/BackButton" to="." method="_on_back_button_pressed"] -[connection signal="pressed" from="MarginContainer/HBoxContainer/SetServer" to="." method="_on_set_server_pressed"] -[connection signal="timeout" from="RefreshTimer" to="." method="_on_refresh_timer_timeout"] diff --git a/UI/GameLobby/lobby_game.gd b/UI/GameLobby/lobby_game.gd deleted file mode 100644 index 39f9076..0000000 --- a/UI/GameLobby/lobby_game.gd +++ /dev/null @@ -1,23 +0,0 @@ -extends HBoxContainer - -@export var game_id := "" -@export var game_name := "": - set = set_game_name - - -func set_game_name(value): - game_name = value - %Name.text = value - - -func _on_join_pressed() -> void: - var response = await GameLobby.request_get("/join?id=%s" % [game_id]) - if response.response_code == 200: - var result = response.parse_json() - var game_data = result["data"] - - print(game_data) - Network.join_game(game_data["ip"], game_data["port"]) - get_tree().change_scene_to_file("res://UI/PlayerLobby/Lobby.tscn") - else: - print(response.response_code) diff --git a/UI/GameLobby/lobby_game.tscn b/UI/GameLobby/lobby_game.tscn deleted file mode 100644 index a6809ac..0000000 --- a/UI/GameLobby/lobby_game.tscn +++ /dev/null @@ -1,19 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://cs2a7wfrj4wn0"] - -[ext_resource type="Script" path="res://UI/GameLobby/lobby_game.gd" id="1_cvsql"] - -[node name="LobbyGame" type="HBoxContainer"] -script = ExtResource("1_cvsql") - -[node name="Name" type="Label" parent="."] -unique_name_in_owner = true -layout_mode = 2 -text = "Game Name" - -[node name="Join" type="Button" parent="."] -unique_name_in_owner = true -layout_mode = 2 -mouse_default_cursor_shape = 2 -text = "Join" - -[connection signal="pressed" from="Join" to="." method="_on_join_pressed"] diff --git a/UI/GamesLobby/games_lobby.gd b/UI/GamesLobby/games_lobby.gd new file mode 100644 index 0000000..b829337 --- /dev/null +++ b/UI/GamesLobby/games_lobby.gd @@ -0,0 +1,76 @@ +extends Control + + +var games := [] + +var refresh_interval := 15.0 + +@onready var lobby_game_scene := preload("res://UI/GamesLobby/lobby_game.tscn") + + +func _ready() -> void: + %GamesList.get_child(0).queue_free() + + %ServerUrl.text = GameLobby.server_base_url + + if await check_game_lobby_available(): + get_server_list() + $RefreshTimer.wait_time = refresh_interval + $RefreshTimer.start() + else: + %ServerNotReachable.text = %ServerNotReachable.text.replace("%SERVER%", GameLobby.server_base_url) + + +func check_game_lobby_available(): + var is_available = await GameLobby.check_available() + + %ServerNotReachable.visible = !is_available + + return is_available + + +func get_server_list(): + var response = await GameLobby.request_get("/get-list") + var result = response.parse_json() + print(result) + + if result["success"]: + for node in %GamesList.get_children(): + node.queue_free() + + if result["data"].size() > 0: + %NoGamesFound.visible = false + + for game in result["data"]: + var lobby_game = lobby_game_scene.instantiate() + lobby_game.game_id = game["id"] + lobby_game.game_name = game["name"] + %GamesList.add_child(lobby_game) + else: + %NoGamesFound.visible = true + + +func _on_back_button_pressed() -> void: + get_tree().change_scene_to_file("res://UI/Start.tscn") + + +func _on_refresh_pressed() -> void: + if await check_game_lobby_available(): + get_server_list() + $RefreshTimer.start(refresh_interval) + + +func _on_refresh_timer_timeout() -> void: + get_server_list() + + +func _on_set_server_pressed() -> void: + var config = Client.get_config() + config.set_value( + "general", + "game_lobby_server_base_url", + %ServerUrl.text + ) + config.save("user://config") + + GameLobby.server_base_url = %ServerUrl.text diff --git a/UI/GamesLobby/games_lobby.tscn b/UI/GamesLobby/games_lobby.tscn new file mode 100644 index 0000000..cfba68c --- /dev/null +++ b/UI/GamesLobby/games_lobby.tscn @@ -0,0 +1,117 @@ +[gd_scene load_steps=5 format=3 uid="uid://b0uqf5h2j7fvk"] + +[ext_resource type="Script" path="res://UI/GamesLobby/games_lobby.gd" id="1_4dbpy"] +[ext_resource type="Texture2D" uid="uid://kwgx33awj4y2" path="res://UI/Assets/Enjl-Starry Space Background/background_1.png" id="2_up3jk"] +[ext_resource type="PackedScene" uid="uid://cs2a7wfrj4wn0" path="res://UI/GamesLobby/lobby_game.tscn" id="3_wofvj"] +[ext_resource type="Theme" uid="uid://bt84t61hrvoyn" path="res://UI/PlayerLobby/lobby_theme.tres" id="4_k7oqv"] + +[node name="GamesLobby" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_4dbpy") + +[node name="Background" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ColorRect" type="ColorRect" parent="Background"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) + +[node name="TextureRect" type="TextureRect" parent="Background"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_up3jk") +stretch_mode = 1 + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 4 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 4 +theme_override_constants/margin_bottom = 4 + +[node name="CenterContainer" type="CenterContainer" parent="MarginContainer"] +layout_mode = 2 + +[node name="GamesList" type="VBoxContainer" parent="MarginContainer/CenterContainer"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="LobbyGame" parent="MarginContainer/CenterContainer/GamesList" instance=ExtResource("3_wofvj")] +visible = false +layout_mode = 2 + +[node name="ServerNotReachable" type="Label" parent="MarginContainer/CenterContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +text = "Game Lobby Server at %SERVER% not reachable" + +[node name="NoGamesFound" type="Label" parent="MarginContainer/CenterContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +text = "No Games Found" + +[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 8 +theme = ExtResource("4_k7oqv") + +[node name="Refresh" type="Button" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +mouse_default_cursor_shape = 2 +text = "Refresh" + +[node name="BackButton" type="Button" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +mouse_default_cursor_shape = 2 +text = "Back" + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 0 + +[node name="ServerUrl" type="LineEdit" parent="MarginContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +expand_to_text_length = true + +[node name="SetServer" type="Button" parent="MarginContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Set Server" + +[node name="RefreshTimer" type="Timer" parent="."] + +[connection signal="pressed" from="MarginContainer/VBoxContainer/Refresh" to="." method="_on_refresh_pressed"] +[connection signal="pressed" from="MarginContainer/VBoxContainer/BackButton" to="." method="_on_back_button_pressed"] +[connection signal="pressed" from="MarginContainer/HBoxContainer/SetServer" to="." method="_on_set_server_pressed"] +[connection signal="timeout" from="RefreshTimer" to="." method="_on_refresh_timer_timeout"] diff --git a/UI/GamesLobby/lobby_game.gd b/UI/GamesLobby/lobby_game.gd new file mode 100644 index 0000000..39f9076 --- /dev/null +++ b/UI/GamesLobby/lobby_game.gd @@ -0,0 +1,23 @@ +extends HBoxContainer + +@export var game_id := "" +@export var game_name := "": + set = set_game_name + + +func set_game_name(value): + game_name = value + %Name.text = value + + +func _on_join_pressed() -> void: + var response = await GameLobby.request_get("/join?id=%s" % [game_id]) + if response.response_code == 200: + var result = response.parse_json() + var game_data = result["data"] + + print(game_data) + Network.join_game(game_data["ip"], game_data["port"]) + get_tree().change_scene_to_file("res://UI/PlayerLobby/Lobby.tscn") + else: + print(response.response_code) diff --git a/UI/GamesLobby/lobby_game.tscn b/UI/GamesLobby/lobby_game.tscn new file mode 100644 index 0000000..1517416 --- /dev/null +++ b/UI/GamesLobby/lobby_game.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=2 format=3 uid="uid://cs2a7wfrj4wn0"] + +[ext_resource type="Script" path="res://UI/GamesLobby/lobby_game.gd" id="1_cvsql"] + +[node name="LobbyGame" type="HBoxContainer"] +script = ExtResource("1_cvsql") + +[node name="Name" type="Label" parent="."] +unique_name_in_owner = true +layout_mode = 2 +text = "Game Name" + +[node name="Join" type="Button" parent="."] +unique_name_in_owner = true +layout_mode = 2 +mouse_default_cursor_shape = 2 +text = "Join" + +[connection signal="pressed" from="Join" to="." method="_on_join_pressed"] 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") diff --git a/UI/Start.gd b/UI/Start.gd index 85a7946..8724cee 100644 --- a/UI/Start.gd +++ b/UI/Start.gd @@ -57,4 +57,4 @@ func _on_join_pressed() -> void: func _on_search_pressed() -> void: Client.player.username = %Username.text - get_tree().change_scene_to_file("res://UI/GameLobby/game_lobby.tscn") + get_tree().change_scene_to_file("res://UI/GamesLobby/games_lobby.tscn") -- cgit v1.2.3