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
+5 -5
View File
@@ -10,7 +10,7 @@ signal session_restored
signal logged_out
# Auth modes
enum AuthMode { GUEST, EMAIL, GOOGLE, APPLE, FACEBOOK, CUSTOM }
enum AuthMode {GUEST, EMAIL, GOOGLE, APPLE, FACEBOOK, CUSTOM}
# User data
var current_user: Dictionary = {}
@@ -43,7 +43,7 @@ func _try_restore_session() -> void:
print("[AuthManager] Could not open session file")
return
var session_data := file.get_var()
var session_data = file.get_var()
file.close()
if not session_data or not session_data is Dictionary:
@@ -59,7 +59,7 @@ func _try_restore_session() -> void:
print("[AuthManager] Attempting to restore session...")
# Try to restore the session
var session := NakamaClient.restore_session(token)
var session = NakamaClient.restore_session(token)
if session.is_expired():
# Try to refresh
@@ -379,7 +379,7 @@ func _connect_socket() -> bool:
return true
NakamaManager.socket = Nakama.create_socket_from(NakamaManager.client)
var result := await NakamaManager.socket.connect_async(NakamaManager.session)
var result = await NakamaManager.socket.connect_async(NakamaManager.session)
if result.is_exception():
push_error("[AuthManager] Socket connection failed: " + result.get_exception().message)
@@ -397,7 +397,7 @@ func _load_user_profile() -> void:
if not NakamaManager.session:
return
var account := await NakamaManager.client.get_account_async(NakamaManager.session)
var account = await NakamaManager.client.get_account_async(NakamaManager.session)
if account.is_exception():
push_error("[AuthManager] Failed to load account")
+1
View File
@@ -0,0 +1 @@
uid://b3huvqm8j7boj
@@ -0,0 +1 @@
uid://8wb6177udj3o
+12 -12
View File
@@ -49,7 +49,7 @@ func load_profile() -> Dictionary:
return {}
# First get basic account info
var account := await NakamaManager.client.get_account_async(NakamaManager.session)
var account = await NakamaManager.client.get_account_async(NakamaManager.session)
if account.is_exception():
push_error("[UserProfileManager] Failed to load account")
@@ -70,7 +70,7 @@ func load_profile() -> Dictionary:
}
# Load custom profile data from storage
var storage_result := await NakamaManager.client.read_storage_objects_async(
var storage_result = await NakamaManager.client.read_storage_objects_async(
NakamaManager.session,
[NakamaStorageObjectId.new(PROFILE_COLLECTION, "profile", account.user.id)]
)
@@ -93,7 +93,7 @@ func load_stats() -> Dictionary:
var user_id := NakamaManager.session.user_id
var storage_result := await NakamaManager.client.read_storage_objects_async(
var storage_result = await NakamaManager.client.read_storage_objects_async(
NakamaManager.session,
[NakamaStorageObjectId.new(STATS_COLLECTION, "game_stats", user_id)]
)
@@ -134,8 +134,8 @@ func update_display_name(new_name: String) -> bool:
var result := await NakamaManager.client.update_account_async(
NakamaManager.session,
null, # username (don't change)
new_name # display_name
null, # username (don't change)
new_name # display_name
)
if result.is_exception():
@@ -188,13 +188,13 @@ func _save_profile_data() -> bool:
var write_obj := NakamaWriteStorageObject.new(
PROFILE_COLLECTION,
"profile",
2, # Public read
1, # Owner write
2, # Public read
1, # Owner write
JSON.stringify(custom_data),
"" # Version (empty = overwrite)
"" # Version (empty = overwrite)
)
var result := await NakamaManager.client.write_storage_objects_async(
var result = await NakamaManager.client.write_storage_objects_async(
NakamaManager.session,
[write_obj]
)
@@ -219,13 +219,13 @@ func update_stats(new_stats: Dictionary) -> bool:
var write_obj := NakamaWriteStorageObject.new(
STATS_COLLECTION,
"game_stats",
2, # Public read
1, # Owner write
2, # Public read
1, # Owner write
JSON.stringify(stats),
""
)
var result := await NakamaManager.client.write_storage_objects_async(
var result = await NakamaManager.client.write_storage_objects_async(
NakamaManager.session,
[write_obj]
)
@@ -0,0 +1 @@
uid://w0d8hfhm6yek
+1
View File
@@ -0,0 +1 @@
uid://ic8fg0o0p0i4
+1
View File
@@ -0,0 +1 @@
uid://vgyrq5y5p7jw
+16 -2
View File
@@ -283,6 +283,10 @@ func _on_auth_started() -> void:
reg_status_label.text = ""
func _on_auth_completed(success: bool, _user_data: Dictionary) -> void:
# Check if node is still in tree (may have been freed during scene transition)
if not is_inside_tree():
return
is_loading = false
loading_spinner.visible = false
_set_inputs_enabled(true)
@@ -301,6 +305,8 @@ func _on_auth_failed(error: String) -> void:
_show_error(error)
func _on_session_restored() -> void:
if not is_inside_tree():
return
_go_to_lobby()
# =============================================================================
@@ -336,5 +342,13 @@ func _is_valid_email(email: String) -> bool:
return regex.search(email) != null
func _go_to_lobby() -> void:
# Navigate to lobby scene
get_tree().change_scene_to_file("res://assets/models/meshes/lobby.tscn")
# Navigate to lobby scene - use deferred call to avoid issues during signal callbacks
if get_tree():
get_tree().change_scene_to_file("res://scenes/lobby.tscn")
else:
# Fallback: try deferred call
call_deferred("_deferred_go_to_lobby")
func _deferred_go_to_lobby() -> void:
if get_tree():
get_tree().change_scene_to_file("res://scenes/lobby.tscn")
+1
View File
@@ -0,0 +1 @@
uid://b1lcy1ikdkknq
+1
View File
@@ -0,0 +1 @@
uid://y6wswtalyiho