main/ holds the main window and top bar, quiz/ the quiz and its parts, player/ the music player, popups/ every popup and what they share, data/ the songs, players, playlist and settings, server/ the MusicServer client, common/ the list row and GameLog, and themes/ the themes and style boxes.
79 lines
2.3 KiB
GDScript
79 lines
2.3 KiB
GDScript
class_name PlayerRow
|
|
extends Control
|
|
|
|
signal change_character_clicked
|
|
signal player_removed
|
|
|
|
## The player shown in this row.
|
|
var player_object: PlayerObject
|
|
|
|
## Position in Settings.player_array. Only used for the keybinds: Alt+<list_index + 1>
|
|
## gives this player a point and Ctrl+Alt+<list_index + 1> takes one away.
|
|
var list_index: int
|
|
|
|
@onready var player_name_field: Label = %Name
|
|
@onready var add_button: Button = %AddPoint
|
|
@onready var minus_button: Button = %RemovePoint
|
|
@onready var character: TextureButton = %Character
|
|
@onready var remove_player: TextureButton = %RemovePlayer
|
|
|
|
|
|
func _ready() -> void:
|
|
add_button.pressed.connect(add_point)
|
|
add_button.set_shortcut(create_button_shortcut(list_index, false))
|
|
minus_button.pressed.connect(minus_point)
|
|
minus_button.set_shortcut(create_button_shortcut(list_index, true))
|
|
character.pressed.connect(change_character)
|
|
remove_player.pressed.connect(func() -> void: player_removed.emit())
|
|
update_score()
|
|
set_player_character()
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
remove_player.visible = Settings.edit_players
|
|
|
|
|
|
func create_button_shortcut(index: int, ctrl_pressed: bool) -> Shortcut:
|
|
var button_shortcut: Shortcut = Shortcut.new()
|
|
var button_event: InputEventKey = InputEventKey.new()
|
|
button_event.keycode = KEY_1 + index
|
|
button_event.alt_pressed = true
|
|
button_event.ctrl_pressed = ctrl_pressed
|
|
button_shortcut.events.append(button_event)
|
|
return button_shortcut
|
|
|
|
|
|
func add_point() -> void:
|
|
player_object.add_point()
|
|
update_score()
|
|
|
|
|
|
func minus_point() -> void:
|
|
player_object.minus_point()
|
|
update_score()
|
|
|
|
|
|
func change_character() -> void:
|
|
change_character_clicked.emit()
|
|
|
|
|
|
func new_character_selected(character_texture: ImageTexture) -> void:
|
|
GameLog.debug("Back in player list with new")
|
|
player_object.character = character_texture
|
|
set_player_character()
|
|
|
|
|
|
func set_player_character() -> void:
|
|
character.custom_minimum_size = Vector2(80, 40)
|
|
character.ignore_texture_size = true
|
|
character.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT_CENTERED
|
|
character.texture_normal = player_object.character
|
|
|
|
|
|
func update_score() -> void:
|
|
if OS.has_feature("debug"):
|
|
player_name_field.text = "%d %s: %d" % [list_index + 1, player_object.player_name,
|
|
player_object.player_score]
|
|
else:
|
|
player_name_field.text = player_object.player_name + ": " + str(player_object.player_score)
|