93 lines
2.6 KiB
GDScript
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)
|