bugfix, desync, and add UI function
This commit is contained in:
+50
-18
@@ -59,9 +59,14 @@ func _init_managers():
|
||||
screen_shake_manager.initialize($Camera3D)
|
||||
|
||||
# Touch controls for mobile
|
||||
touch_controls = load("res://scripts/managers/touch_controls.gd").new()
|
||||
touch_controls.name = "TouchControls"
|
||||
add_child(touch_controls)
|
||||
# Touch controls for mobile
|
||||
touch_controls = get_node_or_null("TouchControls")
|
||||
if not touch_controls:
|
||||
print("TouchControls node not found in scene, creating instance...")
|
||||
touch_controls = load("res://scripts/managers/touch_controls.gd").new()
|
||||
touch_controls.name = "TouchControls"
|
||||
add_child(touch_controls)
|
||||
|
||||
touch_controls.initialize(self)
|
||||
|
||||
# Connect signals for UI updates
|
||||
@@ -180,8 +185,16 @@ func broadcast_message(player_name: String, message: String):
|
||||
|
||||
func _setup_global_match_timer_ui():
|
||||
"""Create the global match timer display at the top of the screen."""
|
||||
# Check if timer check is enabled in lobby settings
|
||||
if not LobbyManager.enable_cycle_timer:
|
||||
var existing = get_node_or_null("GlobalMatchTimer")
|
||||
if existing:
|
||||
existing.visible = false
|
||||
return
|
||||
|
||||
var existing = get_node_or_null("GlobalMatchTimer")
|
||||
if existing:
|
||||
existing.visible = true
|
||||
return
|
||||
|
||||
# Create timer panel
|
||||
@@ -345,21 +358,40 @@ func _setup_client_game():
|
||||
var my_id = multiplayer.get_unique_id()
|
||||
print("Client setup - my peer ID: ", my_id)
|
||||
|
||||
# Create local player immediately
|
||||
if not has_node(str(my_id)):
|
||||
var player_character = PlayerManager.add_player_character(my_id)
|
||||
add_child(player_character)
|
||||
player_character.add_to_group("Players", true)
|
||||
GameStateManager.add_player(my_id)
|
||||
GameStateManager.local_player_character = player_character
|
||||
ui_manager.set_local_player(player_character)
|
||||
if touch_controls:
|
||||
touch_controls.set_player(player_character)
|
||||
ui_manager.update_button_states()
|
||||
print("Created local player for client: ", my_id)
|
||||
# Pre-spawn ALL players known from LobbyManager (including Host ID 1)
|
||||
# This ensures nodes exist to receive RPCs (like 'set_spawn_position') that might arrive before full sync
|
||||
var lobby_players = LobbyManager.get_players()
|
||||
for player_data in lobby_players:
|
||||
var p_id = player_data.get("id", 0)
|
||||
if p_id != 0:
|
||||
add_player_character(p_id)
|
||||
print("Client: Pre-spawned player ", p_id)
|
||||
|
||||
# Wait for host to be ready, then request full sync
|
||||
await get_tree().create_timer(2.0).timeout
|
||||
# Pre-spawn potential bots (IDs 2 to MaxPlayers) to prevent RPC "Node not found" errors
|
||||
# Bots use small integer IDs (2, 3, 4...) while clients use large unique IDs
|
||||
if GameStateManager.enable_bots:
|
||||
for i in range(2, GameStateManager.max_players + 1):
|
||||
# Only spawn if not already existing (e.g. if a human somehow got this ID, though unlikely)
|
||||
if not has_node(str(i)):
|
||||
add_player_character(i)
|
||||
get_node(str(i)).is_bot = true # Assume bot initially
|
||||
get_node(str(i)).add_to_group("Bots", true)
|
||||
print("Client: Pre-spawned potential bot ", i)
|
||||
|
||||
# Ensure local player setup (UI, controls) is verified
|
||||
var player_character = get_node_or_null(str(my_id))
|
||||
if player_character:
|
||||
# If we just spawned it above, we need to set these locally too
|
||||
if GameStateManager.local_player_character != player_character:
|
||||
GameStateManager.local_player_character = player_character
|
||||
ui_manager.set_local_player(player_character)
|
||||
if touch_controls:
|
||||
touch_controls.set_player(player_character)
|
||||
ui_manager.update_button_states()
|
||||
print("Client: Configured local player ", my_id)
|
||||
|
||||
# Wait shorter time for host to be ready, then request full sync to correct positions/state
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
rpc_id(1, "request_full_player_sync", my_id)
|
||||
|
||||
func _auto_start_from_lobby():
|
||||
@@ -483,7 +515,7 @@ func add_player_character(peer_id: int):
|
||||
|
||||
func _on_peer_connected(new_peer_id: int):
|
||||
if multiplayer.is_server():
|
||||
await get_tree().create_timer(1.5).timeout
|
||||
await get_tree().create_timer(0.1).timeout
|
||||
add_player_character(new_peer_id)
|
||||
rpc("add_newly_connected_player_character", new_peer_id)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user