The popups, the volume slider, the player name field and the main window get a class_name, so the main window and the quiz hold them by their real type instead of Control. The classes already use the names the files will get.
60 lines
1.7 KiB
GDScript
60 lines
1.7 KiB
GDScript
class_name WinnerPopup
|
|
extends PopupWindow
|
|
|
|
@onready
|
|
var winner_panel: Panel = %WinnerPanel
|
|
|
|
@onready
|
|
var winner_picture: TextureRect = %WinnerPicture
|
|
|
|
@onready
|
|
var winner_label: Label = %WinnerLabel
|
|
|
|
@onready
|
|
var players_list: VBoxContainer = %PlayersList
|
|
|
|
|
|
func _ready() -> void:
|
|
visible = false
|
|
|
|
|
|
func show_winner(winner: PlayerObject) -> void:
|
|
visible = true
|
|
# Set winner info
|
|
winner_label.text = winner.player_name + " won with " + str(winner.player_score) + \
|
|
" points!!"
|
|
winner_picture.texture = winner.character
|
|
# The "no character" placeholder is pixel art, which blurs when scaled up smoothly
|
|
if winner.character.resource_path == PlayerObject.NO_CHARACTER_PATH:
|
|
winner_picture.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
|
|
else:
|
|
winner_picture.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR
|
|
winner_picture.custom_minimum_size = Vector2(480, 200)
|
|
winner_picture.expand_mode = TextureRect.EXPAND_FIT_WIDTH_PROPORTIONAL
|
|
winner_picture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
|
|
|
# Clear previous player list entries
|
|
for child: Node in players_list.get_children():
|
|
child.queue_free()
|
|
|
|
# Sort players by score (descending) and add to list
|
|
var sorted_players: Array = Settings.player_array.duplicate()
|
|
sorted_players.sort_custom(
|
|
func(a: PlayerObject, b: PlayerObject) -> bool:
|
|
return a.player_score > b.player_score
|
|
)
|
|
|
|
var placing: int = 2
|
|
for player: PlayerObject in sorted_players:
|
|
if player == winner:
|
|
continue # Skip the winner, already shown above
|
|
var label: Label = Label.new()
|
|
label.text = str(placing) + ". " + player.player_name + " - " + \
|
|
str(player.player_score) + " points"
|
|
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
|
players_list.add_child(label)
|
|
placing += 1
|
|
|
|
|
|
|