feat: overhaul the nakama user management, leaderboard, prep for 2.1
This commit is contained in:
@@ -19,6 +19,7 @@ signal profile_updated
|
||||
@onready var high_score_label := %HighScore as Label
|
||||
@onready var account_type_label := %AccountType as Label
|
||||
@onready var link_account_btn := %LinkAccountBtn as Button
|
||||
@onready var admin_panel_btn := %AdminPanelBtn as Button
|
||||
@onready var logout_btn := %LogoutBtn as Button
|
||||
@onready var status_label := %StatusLabel as Label
|
||||
@onready var avatar_popup := %AvatarSelectionPopup as PopupPanel
|
||||
@@ -62,6 +63,7 @@ func _connect_signals() -> void:
|
||||
change_avatar_btn.pressed.connect(_on_change_avatar_pressed)
|
||||
save_name_btn.pressed.connect(_on_save_name_pressed)
|
||||
link_account_btn.pressed.connect(_on_link_account_pressed)
|
||||
admin_panel_btn.pressed.connect(_on_admin_panel_pressed)
|
||||
logout_btn.pressed.connect(_on_logout_pressed)
|
||||
char_left_btn.pressed.connect(func(): _cycle_loadout_char(-1))
|
||||
char_right_btn.pressed.connect(func(): _cycle_loadout_char(1))
|
||||
@@ -284,6 +286,12 @@ func _on_logout_pressed() -> void:
|
||||
AuthManager.logout()
|
||||
get_tree().change_scene_to_file("res://scenes/ui/login_screen.tscn")
|
||||
|
||||
func _on_admin_panel_pressed() -> void:
|
||||
if has_node("/root/AdminManager"):
|
||||
get_node("/root/AdminManager").toggle_admin_panel()
|
||||
else:
|
||||
AdminManager.toggle_admin_panel()
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Close / Show
|
||||
# -------------------------------------------------------------------------
|
||||
@@ -294,8 +302,27 @@ func _on_close_pressed() -> void:
|
||||
func show_panel() -> void:
|
||||
_load_profile_data()
|
||||
_load_loadout()
|
||||
_check_admin_visibility()
|
||||
show()
|
||||
|
||||
func _check_admin_visibility() -> void:
|
||||
admin_panel_btn.hide()
|
||||
if not NakamaManager.client or not NakamaManager.session:
|
||||
return
|
||||
|
||||
# Use native Nakama account API to check user metadata for admin role
|
||||
var account = await NakamaManager.client.get_account_async(NakamaManager.session)
|
||||
if account.is_exception():
|
||||
return
|
||||
|
||||
# Check account metadata for role
|
||||
var metadata_str: String = account.user.metadata if account.user.metadata else "{}"
|
||||
var metadata = JSON.parse_string(metadata_str)
|
||||
if metadata and metadata is Dictionary:
|
||||
var role = metadata.get("role", "")
|
||||
if role in ["owner", "admin"]:
|
||||
admin_panel_btn.show()
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Signal handlers
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user