From c46e28a69dad4f5931c8c49e1e97c6d0ca7e6fde Mon Sep 17 00:00:00 2001 From: Yogi Wiguna Date: Wed, 25 Mar 2026 17:45:42 +0800 Subject: [PATCH] feat: Introduce main game scene script to orchestrate managers, UI, multiplayer, and game mode setup. --- scenes/main.gd | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/scenes/main.gd b/scenes/main.gd index af4eca5..0f16cf4 100644 --- a/scenes/main.gd +++ b/scenes/main.gd @@ -1474,13 +1474,23 @@ func sync_player_goals(player_id: int, goals: Array): call_deferred("_deferred_set_player_goals", player_id, goals) func _deferred_set_player_goals(player_id: int, goals: Array): - # Reduce delay to 0.05s for snappier updates (just enough to ensure nodes are in tree) - if not get_node_or_null(str(player_id)): - await get_tree().create_timer(0.1).timeout - + # The player node waits 0.5s in its _ready() function before initializing managers. + # We MUST cleanly wait until it finishes creating them, instead of silently aborting. var player = get_node_or_null(str(player_id)) + + # Wait until player and its race_manager thoroughly exist + var wait_limit = 2.0 # Safety limit + var waited = 0.0 + while (not player or not player.race_manager) and waited < wait_limit: + await get_tree().create_timer(0.1).timeout + waited += 0.1 + player = get_node_or_null(str(player_id)) + if player and player.race_manager: player.goals = goals.duplicate() + # UI UPDATE FIX: explicitly refresh local UI upon receiving starting goals + if player_id == multiplayer.get_unique_id() and GameStateManager.local_player_character: + ui_manager.update_playerboard_ui() @rpc("any_peer", "call_local")