diff options
author | tpart <tpart120@proton.me> | 2024-08-15 21:33:50 +0200 |
---|---|---|
committer | tpart <tpart120@proton.me> | 2024-08-15 21:34:00 +0200 |
commit | bac2a7a1bae77b6aae1f65de894fb634a8b077d6 (patch) | |
tree | 45e1ad2b4782c92a0db99397b41a4091220d52f2 | |
parent | 3b5e46e4118b0c5e3f2f9a4ea0f2860a1641e842 (diff) | |
download | hurrycurry-bac2a7a1bae77b6aae1f65de894fb634a8b077d6.tar hurrycurry-bac2a7a1bae77b6aae1f65de894fb634a8b077d6.tar.bz2 hurrycurry-bac2a7a1bae77b6aae1f65de894fb634a8b077d6.tar.zst |
Add bot UI to lobby menu
-rw-r--r-- | client/game.gd | 6 | ||||
-rw-r--r-- | client/menu/lobby.gd | 51 | ||||
-rw-r--r-- | client/menu/lobby.tscn | 13 | ||||
-rw-r--r-- | client/multiplayer.gd | 6 |
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"] |