fuzzyworld

godot-shooter / commit

Scores are now constantly being updated, they should always show the latest values.

176d22dbea2683006c708296bc9eeedfe4986b77 · Pavel Safronov · 2023-12-01 11:49:06 -0800 · parents c39514ed14ae

Scores are now constantly being updated, they should always show the latest values.
Fixed an issue where the scores weren't being sorted.
Added a "no high scores yet" label if there are no high scores at the moment.
 actors/Player.gd | 10 +++++++---
 scenes/Scores.gd | 17 ++++++++++++++---
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/actors/Player.gd b/actors/Player.gd
index 2f8e7b4..beea228 100644
--- a/actors/Player.gd
+++ b/actors/Player.gd
@@ -236,13 +236,17 @@ func _on_ShowItemsInRadarCheckBox_pressed() -> void:
 	settings.show_items = show_items
 	settings.save_user_settings()
 
+func sort_high_scores(a, b):
+	return (a as Settings.HighScore).score > (b as Settings.HighScore).score
+
 func add_high_score(new_score: int) -> void:
 	var hs = Settings.HighScore.new(new_score, Time.get_datetime_dict_from_system())
 	var hss = settings.high_scores
 	hss.push_back(hs)
-	settings.high_scores.sort_custom(self, "sort_high_scores")
-	while settings.high_scores.size() > 10:
-		settings.high_scores.pop_back()
+	hss.sort_custom(self, "sort_high_scores")
+	while hss.size() > 10:
+		hss.pop_back()
+	settings.high_scores = hss
 	settings.save_user_settings()
 
 func _on_LinkButton_pressed() -> void:
diff --git a/scenes/Scores.gd b/scenes/Scores.gd
index 2173b2f..0c63936 100644
--- a/scenes/Scores.gd
+++ b/scenes/Scores.gd
@@ -6,19 +6,30 @@ const PowerUp = preload("res://items/PowerUp.tscn")
 const Settings = preload("res://utils/Settings.gd")
 onready var scores_list = $ScoresList
 
-func _ready() -> void:
+func _process(_delta: float) -> void:
+	update_scores()
+	pass
+
+func update_scores() -> void:
+	Utils.remove_all_children(scores_list)
 	var settings = Utils.load_user_settings()
 	if settings.high_scores.size() > 0:
-		Utils.remove_all_children(scores_list)
 		settings.high_scores.sort_custom(self, "sort_high_scores")
 		var now = Time.get_datetime_dict_from_system()
 		for hs in settings.high_scores:
-			var label = Label.new()
 			var date_dict = hs.date
 			var date_diff_secs = Utils.time_diff_secs(date_dict, now)
 			var date_diff = Utils.timespan_to_english(date_diff_secs)
+			var label = Label.new()
 			label.text = " %s points, %s" % [hs.score, date_diff]
 			scores_list.add_child(label)
+	else:
+		var no_scores_label = Label.new()
+		no_scores_label.text = "No high scores yet"
+		scores_list.add_child(no_scores_label)
+#	var debug_label = Label.new()
+#	debug_label.text = "List populated at %s" % Time.get_datetime_string_from_system(false, true)
+#	scores_list.add_child(debug_label)
 
 func sort_high_scores(a, b):
 	return (a as Settings.HighScore).score > (b as Settings.HighScore).score