This commit is contained in:
2025-12-10 23:11:59 +08:00
parent 7ad20497d8
commit a04be19af5
31 changed files with 985 additions and 389 deletions
+50 -3
View File
@@ -31,6 +31,7 @@ extends Control
# UI References - User Profile Bar (will be added to scene)
var user_profile_bar: Control
var profile_panel_instance: Control
var admin_panel_instance: Control
# Store current match ID for copy function
var current_match_id: String = ""
@@ -38,8 +39,8 @@ var current_match_id: String = ""
func _ready():
# Check if user is authenticated
if not AuthManager.is_logged_in():
# Redirect to login screen
get_tree().change_scene_to_file("res://scenes/ui/login_screen.tscn")
# Redirect to login screen - must use deferred call during _ready()
call_deferred("_go_to_login")
return
# Initialize user profile bar
@@ -125,6 +126,14 @@ func _create_profile_bar() -> Control:
profile_btn.pressed.connect(_on_profile_btn_pressed)
bar.add_child(profile_btn)
# Admin button (only visible for admins/hosts)
var admin_btn := Button.new()
admin_btn.name = "AdminBtn"
admin_btn.text = "Admin"
admin_btn.visible = false # Hidden by default, shown if user is admin
admin_btn.pressed.connect(_on_admin_btn_pressed)
bar.add_child(admin_btn)
# Logout button
var logout_btn := Button.new()
logout_btn.name = "LogoutBtn"
@@ -151,6 +160,13 @@ func _update_profile_bar() -> void:
var avatar_url := UserProfileManager.get_avatar_url()
if ResourceLoader.exists(avatar_url):
avatar.texture = load(avatar_url)
# Show admin button if user is admin or host
var admin_btn := user_profile_bar.get_node_or_null("AdminBtn") as Button
if admin_btn:
# Check if user is admin (you can define admin check logic here)
var is_admin = _check_if_admin()
admin_btn.visible = is_admin
func _on_profile_btn_pressed() -> void:
# Show profile panel
@@ -167,7 +183,38 @@ func _on_profile_btn_pressed() -> void:
func _on_logout_pressed() -> void:
AuthManager.logout()
get_tree().change_scene_to_file("res://scenes/ui/login_screen.tscn")
_go_to_login()
func _go_to_login() -> void:
if get_tree():
get_tree().change_scene_to_file("res://scenes/ui/login_screen.tscn")
func _on_admin_btn_pressed() -> void:
# Show admin panel
if not admin_panel_instance:
var admin_panel_scene := load("res://scenes/ui/admin_panel.tscn")
admin_panel_instance = admin_panel_scene.instantiate()
# Connect close signal if available
if admin_panel_instance.has_signal("closed"):
admin_panel_instance.closed.connect(func(): admin_panel_instance.hide())
add_child(admin_panel_instance)
admin_panel_instance.show()
# Center the panel
admin_panel_instance.position = (get_viewport_rect().size - admin_panel_instance.size) / 2
func _check_if_admin() -> bool:
# Check if user is admin - can be host or have specific admin role
# You can extend this to check Nakama user metadata or roles
if LobbyManager.is_host:
return true
# Check if user has admin role in their profile (optional)
var user_id = AuthManager.get_user_id() if AuthManager.has_method("get_user_id") else ""
# Add your admin user IDs here or check from Nakama metadata
var admin_user_ids = ["admin_user_id_1", "admin_user_id_2"] # Configure as needed
return user_id in admin_user_ids
# =============================================================================
# Panel Management