feat : Refactored Game Over UI from programmatic to scene-based architecture and resolved critical multiplayer/spawn bugs
This commit is contained in:
@@ -844,20 +844,26 @@ func _on_server_disconnected() -> void:
|
||||
# Rematch Logic
|
||||
# =============================================================================
|
||||
|
||||
func _get_connected_human_count() -> int:
|
||||
"""Returns the number of connected real human players (peers + host, excluding bots)."""
|
||||
if multiplayer.has_multiplayer_peer():
|
||||
return multiplayer.get_peers().size() + 1 # peers + self (host)
|
||||
return max(1, players_in_room.size()) # Fallback to lobby list
|
||||
|
||||
func reset_rematch_votes() -> void:
|
||||
rematch_votes.clear()
|
||||
var required = max(1, ceili(players_in_room.size() / 2.0))
|
||||
var required = max(1, ceili(_get_connected_human_count() / 2.0))
|
||||
emit_signal("rematch_votes_updated", 0, required)
|
||||
|
||||
@rpc("any_peer", "call_local", "reliable")
|
||||
func request_rematch(player_id: int) -> void:
|
||||
"""Client requests a rematch. Votes needed depend on connected real players."""
|
||||
"""Client requests a rematch. Votes needed depend on connected real players (excluding bots)."""
|
||||
if not multiplayer.is_server():
|
||||
return
|
||||
|
||||
if player_id not in rematch_votes:
|
||||
rematch_votes.append(player_id)
|
||||
var required = max(1, ceili(players_in_room.size() / 2.0))
|
||||
var required = max(1, ceili(_get_connected_human_count() / 2.0))
|
||||
print("[LobbyManager] Rematch vote from %d. Total: %d/%d" % [player_id, rematch_votes.size(), required])
|
||||
|
||||
# Sync vote count to all clients
|
||||
|
||||
Reference in New Issue
Block a user