Make the buttons consistent and rework the player list
Build / test (push) Successful in 1m30s
Build / build (push) Successful in 1m17s

Buttons get 12 px of side padding. The top bar buttons, the quiz toolbar and
Show answer/Next are laid out in rows with 12 px gaps and are all 36 px tall,
and the ±1 buttons use a compact StepButton style. "Randomize new track" is now
"Next song".

Player rows show the name and the score apart, alternate like the other lists
and highlight the character under the mouse. The name field is a LineEdit with
a 10-letter limit; blank and duplicate names are refused, and a full list says
"Up to 7 players". Remove buttons update when editing is switched instead of
every frame, and the spacer panels are gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
SansanandClaude Opus 5.5 committed 2026-10-11 21:35:24 +02:00
1 parent e4352a9f34
commit 70e970b24c
39 files changed
+2054 -2177

No files matched your search

+40 -13
View File
@@ -21,35 +21,52 @@ var _player_row: PackedScene = preload("res://quiz/PlayerRow.tscn")
@onready var add_players_button: TextureButton = %AddPlayersButton
@onready var add_player_container: HBoxContainer = %AddPlayerContainer
@onready var add_player_button: Button = %AddPlayerButton
@onready var new_player_name_field: PlayerNameField = %PlayerNameField
@onready var add_player_hint: Label = %AddPlayerHint
@onready var new_player_name_field: LineEdit = %PlayerNameField
@onready var players_list_container: VBoxContainer = %PlayersListVBoxContainer
func _ready() -> void:
add_players_button.pressed.connect(add_players)
add_player_button.pressed.connect(add_player)
new_player_name_field.enter_key_pressed.connect(add_player)
new_player_name_field.text_submitted.connect(func(_text: String) -> void: add_player())
## Shows or hides the row for adding players, and the buttons for removing them.
func add_players() -> void:
GameLog.debug("add_players")
Settings.edit_players = !Settings.edit_players
add_player_container.visible = !add_player_container.visible
new_player_name_field.grab_focus()
add_player_container.visible = Settings.edit_players
for row: PlayerRow in players_list_container.get_children():
row.set_editing(Settings.edit_players)
_update_add_row()
if Settings.edit_players:
new_player_name_field.grab_focus()
## Adds a player with the name in the name field, unless it is empty or there are
## already as many players as there can be.
## Adds a player with the name in the name field. Blank names, names another player
## already has, and players beyond [constant Settings.MAX_NUMBER_OF_PLAYERS] are not
## added.
func add_player() -> void:
GameLog.debug("add_player")
if new_player_name_field.text != "" \
&& Settings.player_array.size() < Settings.MAX_NUMBER_OF_PLAYERS:
var new_player_object: PlayerObject = PlayerObject.new(new_player_name_field.text)
new_player_name_field.text = ""
Settings.player_array.append(new_player_object)
player_added.emit(new_player_object)
reload()
var player_name: String = new_player_name_field.text.strip_edges()
if !can_add(player_name):
return
var new_player_object: PlayerObject = PlayerObject.new(player_name)
new_player_name_field.text = ""
Settings.player_array.append(new_player_object)
player_added.emit(new_player_object)
reload()
## Whether a player called [param player_name] can be added.
func can_add(player_name: String) -> bool:
if player_name.is_empty() || Settings.player_array.size() >= Settings.MAX_NUMBER_OF_PLAYERS:
return false
for player: PlayerObject in Settings.player_array:
if player.player_name.to_lower() == player_name.to_lower():
return false
return true
## Shows the players in [code]Settings.player_array[/code] again, e.g. after their
@@ -71,6 +88,16 @@ func reload() -> void:
players_list_container.add_child(new_player)
counter += 1
_update_add_row()
# A full list can't take more players, so the name field gives way to a note saying so
func _update_add_row() -> void:
var full: bool = Settings.player_array.size() >= Settings.MAX_NUMBER_OF_PLAYERS
add_player_hint.text = "Up to %d players" % Settings.MAX_NUMBER_OF_PLAYERS
add_player_hint.visible = full
new_player_name_field.visible = !full
add_player_button.visible = !full
func _on_change_character_clicked(row: PlayerRow, player_name: String) -> void: