aboutsummaryrefslogtreecommitdiff
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
parent3b5e46e4118b0c5e3f2f9a4ea0f2860a1641e842 (diff)
downloadhurrycurry-bac2a7a1bae77b6aae1f65de894fb634a8b077d6.tar
hurrycurry-bac2a7a1bae77b6aae1f65de894fb634a8b077d6.tar.bz2
hurrycurry-bac2a7a1bae77b6aae1f65de894fb634a8b077d6.tar.zst
Add bot UI to lobby menu
-rw-r--r--client/game.gd6
-rw-r--r--client/menu/lobby.gd51
-rw-r--r--client/menu/lobby.tscn13
-rw-r--r--client/multiplayer.gd6
4 files changed, 72 insertions, 4 deletions
diff --git a/client/game.gd b/client/game.gd
index 98c8fd84..d7bb90a7 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -36,6 +36,8 @@ var tile_index_by_name: Dictionary = {}
var tile_collide: Array = []
var tile_interact: Array = []
var maps: Array = []
+var bot_algos: Array
+
var in_lobby := false
var is_replay := false
var is_joined := false
@@ -69,13 +71,15 @@ func _ready():
tile_names_: Array,
tile_collide_: Array,
tile_interact_: Array,
- maps_: Array
+ maps_: Array,
+ bot_algos_: Array
):
item_names = item_names_
tile_names = tile_names_
tile_collide = tile_collide_
tile_interact = tile_interact_
maps = maps_
+ bot_algos = bot_algos_
tile_index_by_name = {}
for id in tile_names.size():
tile_index_by_name[tile_names[id]] = id
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"]
diff --git a/client/multiplayer.gd b/client/multiplayer.gd
index 299db369..e77b74c5 100644
--- a/client/multiplayer.gd
+++ b/client/multiplayer.gd
@@ -24,7 +24,8 @@ signal data(
tile_names: Array[String],
tile_collide: Array[String],
tile_interact: Array[String],
- maps: Array
+ maps: Array,
+ bot_algos: Array
)
signal set_tile(tile: Vector2i, kind: int, neighbors: Array[String])
signal remove_tile(tile: Vector2i)
@@ -114,7 +115,8 @@ func handle_packet(bytes: PackedByteArray):
var tile_collide = decoded["data"]["tile_collide"]
var tile_interact = decoded["data"]["tile_interact"]
var maps = decoded["data"]["maps"]
- data.emit(item_names, tile_names, tile_collide, tile_interact, maps)
+ var bot_algos = decoded["data"]["bot_algos"]
+ data.emit(item_names, tile_names, tile_collide, tile_interact, maps, bot_algos)
"add_player":
var id = decoded["id"]
var player_name = decoded["name"]