feat: edit some login indicator
This commit is contained in:
@@ -9,6 +9,7 @@ signal avatar_changed(url: String)
|
||||
# Profile data
|
||||
var profile: Dictionary = {}
|
||||
var stats: Dictionary = {}
|
||||
var is_profile_loaded: bool = false
|
||||
|
||||
# Nakama storage collection names
|
||||
const PROFILE_COLLECTION := "profiles"
|
||||
@@ -36,6 +37,7 @@ func _on_auth_completed(success: bool, _user_data: Dictionary) -> void:
|
||||
func _on_logged_out() -> void:
|
||||
profile = {}
|
||||
stats = {}
|
||||
is_profile_loaded = false
|
||||
|
||||
# =============================================================================
|
||||
# Profile Loading
|
||||
@@ -81,6 +83,7 @@ func load_profile() -> Dictionary:
|
||||
# Load stats
|
||||
await load_stats()
|
||||
|
||||
is_profile_loaded = true
|
||||
emit_signal("profile_loaded", profile)
|
||||
print("[UserProfileManager] Profile loaded: ", profile.display_name)
|
||||
return profile
|
||||
@@ -257,8 +260,10 @@ func record_game_result(won: bool, score: int) -> void:
|
||||
# Getters
|
||||
# =============================================================================
|
||||
|
||||
func get_display_name() -> String:
|
||||
return profile.get("display_name", "Guest")
|
||||
func get_display_name(fallback: String = "Guest") -> String:
|
||||
if not is_profile_loaded:
|
||||
return fallback
|
||||
return profile.get("display_name", fallback)
|
||||
|
||||
func get_avatar_url() -> String:
|
||||
var index: int = profile.get("avatar_index", 0)
|
||||
|
||||
@@ -9,6 +9,7 @@ signal closed
|
||||
# UI References
|
||||
# -------------------------------------------------------------------------
|
||||
@onready var back_btn := %BackBtn as Button
|
||||
@onready var refresh_btn := %RefreshBtn as Button
|
||||
@onready var sort_score_btn := %SortScoreBtn as Button
|
||||
@onready var sort_win_rate_btn := %SortWinRateBtn as Button
|
||||
@onready var sort_games_btn := %SortGamesBtn as Button
|
||||
@@ -28,7 +29,6 @@ var current_sort_key: String = "high_score"
|
||||
var _anim_player: AnimationPlayer
|
||||
|
||||
# Maps game character name -> GLB node name in the SubViewport
|
||||
# Must match the mapping in player.gd's set_character()
|
||||
const CHAR_NODE_MAP: Dictionary = {
|
||||
"Copper": "Oldpop",
|
||||
"Dabro": "Masbro",
|
||||
@@ -40,6 +40,7 @@ const AVATAR_TO_CHAR: Array[String] = ["Pip", "Gatot", "Dabro", "Copper"]
|
||||
|
||||
func _ready() -> void:
|
||||
back_btn.pressed.connect(_on_close_pressed)
|
||||
refresh_btn.pressed.connect(_fetch_leaderboard_data)
|
||||
sort_score_btn.pressed.connect(func(): _sort_by("high_score"))
|
||||
sort_win_rate_btn.pressed.connect(func(): _sort_by("win_rate"))
|
||||
sort_games_btn.pressed.connect(func(): _sort_by("games_played"))
|
||||
@@ -65,12 +66,12 @@ func _fetch_leaderboard_data() -> void:
|
||||
status_label.text = "Not connected to Nakama"
|
||||
return
|
||||
|
||||
status_label.text = "Loading data..."
|
||||
status_label.text = "Fetching Global Records..."
|
||||
for child in leaderboard_list.get_children():
|
||||
child.queue_free()
|
||||
|
||||
var payload = JSON.stringify({})
|
||||
var result = await NakamaManager.client.rpc_async(NakamaManager.session, "get_leaderboard_stats", payload)
|
||||
# Calls the updated RPC that returns ONLY native global_high_score records
|
||||
var result = await NakamaManager.client.rpc_async(NakamaManager.session, "get_leaderboard_stats", "{}")
|
||||
|
||||
if result.is_exception():
|
||||
status_label.text = "Failed to load leaderboard"
|
||||
@@ -90,9 +91,9 @@ func _fetch_leaderboard_data() -> void:
|
||||
if leaderboard_data.size() > 0:
|
||||
_show_entry_preview(0)
|
||||
else:
|
||||
status_label.text = "No data found"
|
||||
status_label.text = "No records found"
|
||||
else:
|
||||
status_label.text = "Error parsing data"
|
||||
status_label.text = "Error parsing server data"
|
||||
|
||||
func _calculate_win_rates() -> void:
|
||||
for entry in leaderboard_data:
|
||||
|
||||
Reference in New Issue
Block a user