aboutsummaryrefslogtreecommitdiff
path: root/client/menu
diff options
context:
space:
mode:
authortpart <tpart120@proton.me>2024-08-15 21:33:50 +0200
committertpart <tpart120@proton.me>2024-08-15 21:34:00 +0200
commitbac2a7a1bae77b6aae1f65de894fb634a8b077d6 (patch)
tree45e1ad2b4782c92a0db99397b41a4091220d52f2 /client/menu
parent3b5e46e4118b0c5e3f2f9a4ea0f2860a1641e842 (diff)
downloadhurrycurry-bac2a7a1bae77b6aae1f65de894fb634a8b077d6.tar
hurrycurry-bac2a7a1bae77b6aae1f65de894fb634a8b077d6.tar.bz2
hurrycurry-bac2a7a1bae77b6aae1f65de894fb634a8b077d6.tar.zst
Add bot UI to lobby menu
Diffstat (limited to 'client/menu')
-rw-r--r--client/menu/lobby.gd51
-rw-r--r--client/menu/lobby.tscn13
2 files changed, 63 insertions, 1 deletions
diff --git a/client/menu/lobby.gd b/client/menu/lobby.gd
index d1b186f7..ed46e848 100644
--- a/client/menu/lobby.gd
+++ b/client/menu/lobby.gd
@@ -22,6 +22,14 @@ const PLAYER = preload("res://menu/lobby/player.tscn")
var map_count
var selected_map := 0
var selected_map_name: String
+
+var bot_counts := {}
+var bot_reset_buttons := {}
+var bot_display_names := {
+ "simple": tr("Simple chef"),
+ "waiter": tr("Waiter"),
+}
+
var difficulty_names = [tr("Easy"), tr("Moderate"), tr("Hard"), tr("Very hard"), tr("Unplayable")]
@onready var game: Game = $"../Game"
@@ -35,6 +43,9 @@ var difficulty_names = [tr("Easy"), tr("Moderate"), tr("Hard"), tr("Very hard"),
@onready var map_selector = $HBoxContainer/Bottom/MarginContainer/VBoxContainer/HBoxContainer
@onready var prev_map = $HBoxContainer/Bottom/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/Left
@onready var next_map = $HBoxContainer/Bottom/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer2/Right
+
+@onready var bot_settings = $HBoxContainer/Bottom/MarginContainer/VBoxContainer/Bots/BotSettings
+
@onready var join_spectate = $HBoxContainer/Bottom/MarginContainer/VBoxContainer/VBoxContainer/JoinSpectate
@onready var start_button = $HBoxContainer/Bottom/MarginContainer/VBoxContainer/VBoxContainer/Start
@@ -52,7 +63,7 @@ func initialize():
c.queue_free()
var i := 0
for m in game.maps:
- var b = Button.new()
+ var b := Button.new()
b.name = m[0]
b.text = "%s (%d)" % [m[1]["name"], m[1]["players"]]
b.pressed.connect(select_map.bind(i))
@@ -60,6 +71,26 @@ func initialize():
map_list.add_child(b)
i += 1
select_map(0)
+
+ for algo_id: String in game.bot_algos:
+ bot_counts[algo_id] = 0
+
+ var h := HBoxContainer.new()
+ h.name = algo_id
+ var add := Button.new()
+ add.text = "+"
+ var reset := Button.new()
+ bot_reset_buttons[algo_id] = reset
+ update_bot_reset_text(algo_id)
+ reset.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+ var remove := Button.new()
+ remove.text = "-"
+ h.add_child(remove)
+ h.add_child(reset)
+ h.add_child(add)
+ add.pressed.connect(increase_bot_count.bind(algo_id))
+ remove.pressed.connect(decrease_bot_count.bind(algo_id))
+ bot_settings.add_child(h)
func select_map(i: int):
if i >= map_count:
@@ -72,6 +103,21 @@ func select_map(i: int):
selected_map_name = game.maps[i][0]
map_list.get_child(i).grab_focus()
+func increase_bot_count(algo_id: String):
+ bot_counts[algo_id] = bot_counts[algo_id] + 1
+ update_bot_reset_text(algo_id)
+
+func decrease_bot_count(algo_id: String):
+ var new_count = bot_counts[algo_id] - 1
+ if new_count < 0:
+ return
+ bot_counts[algo_id] = new_count
+ update_bot_reset_text(algo_id)
+
+func update_bot_reset_text(algo_id: String):
+ var display_name: String = bot_display_names[algo_id] if bot_display_names.has(algo_id) else algo_id
+ bot_reset_buttons[algo_id].text = "%s (%d)" % [display_name, bot_counts[algo_id]]
+
func update_players(player_list: Dictionary):
for i in player_container.get_children():
i.queue_free()
@@ -124,3 +170,6 @@ func check_for_music():
Sound.play_music("Lobby")
else:
Sound.play_music("stop") # TODO: Game music enter
+
+func _on_enable_bots_toggled(toggled_on):
+ bot_settings.visible = toggled_on
diff --git a/client/menu/lobby.tscn b/client/menu/lobby.tscn
index ebf5871b..69ad83fd 100644
--- a/client/menu/lobby.tscn
+++ b/client/menu/lobby.tscn
@@ -123,6 +123,18 @@ size_flags_horizontal = 3
layout_mode = 2
alignment = 1
+[node name="Bots" type="VBoxContainer" parent="HBoxContainer/Bottom/MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="EnableBots" type="CheckButton" parent="HBoxContainer/Bottom/MarginContainer/VBoxContainer/Bots"]
+layout_mode = 2
+text = "Enable bots"
+
+[node name="BotSettings" type="VBoxContainer" parent="HBoxContainer/Bottom/MarginContainer/VBoxContainer/Bots"]
+visible = false
+layout_mode = 2
+size_flags_vertical = 3
+
[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/Bottom/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 15
@@ -147,5 +159,6 @@ press_action = "start_game"
[connection signal="visibility_changed" from="." to="." method="check_for_music"]
[connection signal="pressed" from="HBoxContainer/Bottom/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/Left" to="." method="_on_left_pressed"]
[connection signal="pressed" from="HBoxContainer/Bottom/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer2/Right" to="." method="_on_right_pressed"]
+[connection signal="toggled" from="HBoxContainer/Bottom/MarginContainer/VBoxContainer/Bots/EnableBots" to="." method="_on_enable_bots_toggled"]
[connection signal="pressed" from="HBoxContainer/Bottom/MarginContainer/VBoxContainer/VBoxContainer/JoinSpectate" to="." method="_on_join_spectate_pressed"]
[connection signal="pressed" from="HBoxContainer/Bottom/MarginContainer/VBoxContainer/VBoxContainer/Start" to="." method="_on_controller_button_pressed"]