summaryrefslogtreecommitdiff
path: root/UI/PlayerLobby
diff options
context:
space:
mode:
Diffstat (limited to 'UI/PlayerLobby')
-rw-r--r--UI/PlayerLobby/Lobby.tscn43
-rw-r--r--UI/PlayerLobby/lobby.gd83
-rw-r--r--UI/PlayerLobby/lobby.gd.uid1
-rw-r--r--UI/PlayerLobby/lobby_setting.gd.uid1
-rw-r--r--UI/PlayerLobby/lobby_setting.tscn2
-rw-r--r--UI/PlayerLobby/map_button.gd6
-rw-r--r--UI/PlayerLobby/map_button.gd.uid1
-rw-r--r--UI/PlayerLobby/map_button.tscn9
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")