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