Ouroboros/addons/silent_wolf/examples/CustomLeaderboards/ReverseLeaderboard.gd

93 lines
2.6 KiB
GDScript

@tool
extends Node2D
const ScoreItem = preload("res://addons/silent_wolf/Scores/ScoreItem.tscn")
const SWLogger = preload("res://addons/silent_wolf/utils/SWLogger.gd")
var list_index = 0
var ld_name = "main"
func _ready():
var scores = []
if ld_name in SilentWolf.Scores.leaderboards:
scores = SilentWolf.Scores.leaderboards[ld_name]
if len(scores) > 0:
render_board(scores)
else:
# use a signal to notify when the high scores have been returned, and show a "loading" animation until it's the case...
add_loading_scores_message()
var sw_result = await SilentWolf.Scores.get_high_scores().sw_get_scores_complete
scores = sw_result["scores"]
hide_message()
render_board(scores)
func render_board(scores: Array) -> void:
if scores.is_empty():
add_no_scores_message()
else:
if len(scores) > 1 and scores[0].score > scores[-1].score:
scores.reverse()
for i in range(len(scores)):
var score = scores[i]
add_item(score.player_name, str(int(score.score)))
#var time = display_time(scores[i].score)
#add_item(score.player_name, time)
#func display_time(time_in_millis):
# var minutes = int(floor(time_in_millis / 60000))
# var seconds = int(floor((time_in_millis % 60000) / 1000))
# var millis = time_in_millis - minutes*60000 - seconds*1000
# var displayable_time = str(minutes) + ":" + str(seconds) + ":" + str(millis)
# return displayable_time
func reverse_order(scores: Array) -> Array:
if len(scores) > 1 and scores[0].score > scores[-1].score:
scores.reverse()
return scores
func sort_by_score(a: Dictionary, b: Dictionary) -> bool:
if a.score > b.score:
return true;
else:
if a.score < b.score:
return false;
else:
return true;
func add_item(player_name: String, score_value: String) -> void:
var item = ScoreItem.instance()
list_index += 1
item.get_node("PlayerName").text = str(list_index) + str(". ") + player_name
item.get_node("Score").text = score_value
item.offset_top = list_index * 100
$"Board/HighScores/ScoreItemContainer".add_child(item)
func add_no_scores_message():
var item = $"Board/MessageContainer/TextMessage"
item.text = "No scores yet!"
$"Board/MessageContainer".show()
item.offset_top = 135
func add_loading_scores_message() -> void:
var item = $"Board/MessageContainer/TextMessage"
item.text = "Loading scores..."
$"Board/MessageContainer".show()
item.offset_top = 135
func hide_message() -> void:
$"Board/MessageContainer".hide()
func _on_CloseButton_pressed() -> void:
var scene_name = SilentWolf.scores_config.open_scene_on_close
print("scene_name: " + str(scene_name))
get_tree().change_scene_to_file(scene_name)