88 lines
2.9 KiB
GDScript
88 lines
2.9 KiB
GDScript
extends Node2D
|
|
|
|
const ScoreItem = preload("SmallScoreItem.tscn")
|
|
const SWLogger = preload("res://addons/silent_wolf/utils/SWLogger.gd")
|
|
|
|
var ld_names = ["Weekly", "Monthly", "main"]
|
|
|
|
var scores = []
|
|
|
|
func _ready():
|
|
SilentWolf.Scores.sw_get_scores_complete.connect(_on_scores_received)
|
|
|
|
#var scores = SilentWolf.Scores.scores
|
|
add_loading_scores_message()
|
|
var sw_result = SilentWolf.Scores.get_scores(10, "main")
|
|
scores = sw_result.scores
|
|
# the other leaderboard scores will be called once the main call in finished
|
|
# (see signal connected above and _on_scores_received function below)
|
|
# when all the scores are loaded the leaderboard scene can be opened
|
|
|
|
|
|
func render_boards(leaderboards: Array) -> void:
|
|
#print("leaderboards: " + str(leaderboards))
|
|
var board_number = 0
|
|
for board in leaderboards:
|
|
var list_index = 1
|
|
#print("ld name: " + str(ld_names[board_number]))
|
|
#print("ld scores: " + str(board))
|
|
for score in board:
|
|
add_item(ld_names[board_number], score.player_name, str(int(score.score)), list_index)
|
|
list_index += 1
|
|
board_number += 1
|
|
|
|
|
|
func add_item(ld_name: String, player_name: String, score: String, list_index: int) -> void:
|
|
var item = ScoreItem.instantiate()
|
|
item.get_node("PlayerName").text = str(list_index) + str(". ") + player_name
|
|
item.get_node("Score").text = score
|
|
item.offset_top = list_index * 100
|
|
get_node("MainContainer/Boards/" + ld_name + "/HighScores/ScoreItemContainer").add_child(item)
|
|
|
|
|
|
func add_no_scores_message() -> void:
|
|
var item = $"MainContainer/MessageContainer/TextMessage"
|
|
item.text = "No scores yet!"
|
|
$"MainContainer/MessageContainer".show()
|
|
item.offset_top = 135
|
|
|
|
|
|
func add_loading_scores_message() -> void:
|
|
var item = $"MainContainer/MessageContainer/TextMessage"
|
|
item.text = "Loading scores..."
|
|
$"MainContainer/MessageContainer".show()
|
|
item.offset_top = 135
|
|
|
|
|
|
func hide_message() -> void:
|
|
$"MainContainer/MessageContainer".hide()
|
|
|
|
|
|
func _on_CloseButton_pressed() -> void:
|
|
var scene_name = SilentWolf.scores_config.open_scene_on_close
|
|
SWLogger.info("Closing SilentWolf leaderboard, switching to scene: " + str(scene_name))
|
|
get_tree().change_scene_to_file(scene_name)
|
|
|
|
|
|
func _on_scores_received(get_scores_result: Dictionary) -> void:
|
|
var ld_name: String = get_scores_result.ld_name
|
|
var scores: Array = get_scores_result.scores
|
|
|
|
if ld_name == "main":
|
|
SilentWolf.Scores.get_scores(10, "Weekly")
|
|
#SilentWolf.Scores.get_scores(10, "Weekly", -1)
|
|
elif ld_name == "Weekly":
|
|
SilentWolf.Scores.get_scores(10, "Monthly")
|
|
else:
|
|
#print("SilentWolf.Scores.leaderboards: " + str(SilentWolf.Scores.leaderboards))
|
|
var ld_scores = []
|
|
for i in [0, 1, 2]:
|
|
if ld_names[i] in SilentWolf.Scores.leaderboards:
|
|
ld_scores.append(SilentWolf.Scores.leaderboards[ld_names[i]])
|
|
#elif (ld_names[i] + ";-1") in SilentWolf.Scores.leaderboards_past_periods:
|
|
# ld_scores.append(SilentWolf.Scores.leaderboards_past_periods[(ld_names[i] + ";-1")])
|
|
else:
|
|
ld_scores.append([])
|
|
hide_message()
|
|
render_boards(ld_scores)
|