Files
DungeonsOfKharadum/src/scripts/level_complete_ui.gd
2026-01-11 03:34:14 +01:00

129 lines
4.2 KiB
GDScript

extends CanvasLayer
# Level Complete UI - Shows stats when level is completed
var title_label: Label = null
var stats_header_label: Label = null
var enemies_label: Label = null
var time_label: Label = null
var downed_label: Label = null
var exp_label: Label = null
var coins_label: Label = null
func _ready():
visible = false
_find_labels()
func _find_labels():
# Find labels (works for both scene-based and programmatically created UI)
var vbox = get_child(0) if get_child_count() > 0 else null
if vbox:
for child in vbox.get_children():
if child is Label:
# Check by name first (more reliable)
if child.name == "TitleLabel" or (title_label == null and (child.text == "LEVEL COMPLETE!" or child.text.begins_with("LEVEL"))):
title_label = child
elif child.name == "StatsHeaderLabel" or (stats_header_label == null and child.text == "stats"):
stats_header_label = child
# Check by name for other labels
elif child.name == "EnemiesLabel":
enemies_label = child
elif child.name == "TimeLabel":
time_label = child
elif child.name == "DownedLabel":
downed_label = child
elif child.name == "ExpLabel":
exp_label = child
elif child.name == "CoinsLabel":
coins_label = child
elif child is VBoxContainer:
# Stats container
for stat_child in child.get_children():
if stat_child.name == "EnemiesLabel":
enemies_label = stat_child
elif stat_child.name == "TimeLabel":
time_label = stat_child
elif stat_child.name == "DownedLabel":
downed_label = stat_child
elif stat_child.name == "ExpLabel":
exp_label = stat_child
elif stat_child.name == "CoinsLabel":
coins_label = stat_child
func show_stats(enemies_defeated: int, times_downed: int, exp_collected: float, coins_collected: int, level_time: float, level_number: int = 1):
# Ensure labels are found (in case _ready() hasn't run yet)
_find_labels()
# Update labels
if title_label:
title_label.text = "LEVEL " + str(level_number) + " COMPLETE!"
else:
print("LevelCompleteUI: WARNING - title_label not found!")
if stats_header_label:
stats_header_label.text = "stats"
if enemies_label:
enemies_label.text = "Enemies defeated: " + str(enemies_defeated)
enemies_label.visible = true
else:
print("LevelCompleteUI: WARNING - enemies_label not found!")
# Format level time as MM:SS
if time_label:
var minutes = int(level_time) / 60
var seconds = int(level_time) % 60
time_label.text = "Finish time: %02d:%02d" % [minutes, seconds]
time_label.visible = true
else:
print("LevelCompleteUI: WARNING - time_label not found!")
# Hide labels that are not needed (per user request: only show enemies, coins, and time)
if downed_label:
downed_label.visible = false
downed_label.text = "Times Downed: " + str(times_downed)
if exp_label:
exp_label.visible = false
exp_label.text = "EXP Collected: " + str(int(exp_collected))
if coins_label:
coins_label.text = "Coins collected: " + str(coins_collected)
coins_label.visible = true
else:
print("LevelCompleteUI: WARNING - coins_label not found!")
# Show UI
visible = true
# Fade in - fade the VBoxContainer and all labels
var vbox = get_child(0) if get_child_count() > 0 else null
if vbox:
vbox.modulate.a = 0.0
var fade_in = create_tween()
fade_in.set_parallel(true)
fade_in.tween_property(vbox, "modulate:a", 1.0, 0.5)
# Also fade individual labels if they exist
if title_label:
title_label.modulate.a = 0.0
fade_in.tween_property(title_label, "modulate:a", 1.0, 0.5)
if stats_header_label:
stats_header_label.modulate.a = 0.0
fade_in.tween_property(stats_header_label, "modulate:a", 1.0, 0.5)
if enemies_label:
enemies_label.modulate.a = 0.0
fade_in.tween_property(enemies_label, "modulate:a", 1.0, 0.5)
if time_label:
time_label.modulate.a = 0.0
fade_in.tween_property(time_label, "modulate:a", 1.0, 0.5)
if downed_label:
downed_label.modulate.a = 0.0
fade_in.tween_property(downed_label, "modulate:a", 1.0, 0.5)
if exp_label:
exp_label.modulate.a = 0.0
fade_in.tween_property(exp_label, "modulate:a", 1.0, 0.5)
if coins_label:
coins_label.modulate.a = 0.0
fade_in.tween_property(coins_label, "modulate:a", 1.0, 0.5)