feat: Implement a new lobby system with configurable match duration, game over screen, and core game state management.

This commit is contained in:
2025-12-20 01:10:49 +08:00
parent 75eb398649
commit b0d45d4569
12 changed files with 1241 additions and 338 deletions
+6 -6
View File
@@ -22,7 +22,7 @@ signal player_banned(player_id: String)
# Player data cache
var players: Array = []
var banned_players: Array = [] # [{user_id, username, banned_at, reason, expires}]
var banned_players: Array = [] # [{user_id, username, banned_at, reason, expires}]
var is_admin: bool = false
var is_host: bool = false
@@ -77,7 +77,7 @@ func _rpc_call(rpc_name: String, payload: Dictionary) -> Dictionary:
push_error("[AdminPanel] Not connected to Nakama")
return {"error": "Not connected"}
var result := await NakamaManager.client.rpc_async(
var result = await NakamaManager.client.rpc_async(
NakamaManager.session,
rpc_name,
JSON.stringify(payload)
@@ -185,10 +185,10 @@ func _update_action_buttons() -> void:
var idx: int = selected[0]
var meta: Dictionary = player_list.get_item_metadata(idx)
var is_player_host := meta.get("peer_id", 0) == 1
var is_player_host: bool = meta.get("peer_id", 0) == 1
# Can't kick/ban the host or yourself
var is_self := meta.get("user_id", "") == AuthManager.current_user.get("user_id", "")
var is_self: bool = meta.get("user_id", "") == AuthManager.current_user.get("user_id", "")
kick_btn.disabled = is_player_host or is_self
ban_btn.disabled = is_player_host or is_self or not is_admin
@@ -267,8 +267,8 @@ func _create_ban_dialog(user_id: String, player_name: String) -> ConfirmationDia
var duration_input := SpinBox.new()
duration_input.min_value = 0
duration_input.max_value = 8760 # 1 year
duration_input.value = 24 # Default 24 hours
duration_input.max_value = 8760 # 1 year
duration_input.value = 24 # Default 24 hours
vbox.add_child(duration_input)
dialog.add_child(vbox)