diff --git a/scenes/player.gd b/scenes/player.gd index e2c8986..93a250c 100644 --- a/scenes/player.gd +++ b/scenes/player.gd @@ -1954,6 +1954,9 @@ func set_spawn_position(pos: Vector2i): # Reveal character now that it's in the correct position visible = true + # Notify systems that position changed (for Camera snap) + position_changed.emit() + emit_signal("position_changed") diff --git a/scripts/managers/camera_context_manager.gd b/scripts/managers/camera_context_manager.gd index c364ea9..e411a47 100644 --- a/scripts/managers/camera_context_manager.gd +++ b/scripts/managers/camera_context_manager.gd @@ -39,13 +39,13 @@ func set_player(p_player: Node3D): var has_snap_signal = player.has_signal("position_changed") if movement_mgr and has_snap_signal: - # 1. Follow during movement + # 1. Follow during movement finished if not movement_mgr.movement_finished.is_connected(_on_player_moved): movement_mgr.movement_finished.connect(_on_player_moved) - # 2. Snap on spawn/teleport - if not player.position_changed.is_connected(_on_player_moved): - player.position_changed.connect(_on_player_moved) + # 2. Snap on spawn/teleport (Resets setups for immediate catch-up) + if not player.position_changed.is_connected(_on_player_snapped): + player.position_changed.connect(_on_player_snapped) print("[CameraContextManager] Successfully connected to all player signals") else: @@ -58,7 +58,14 @@ func set_player(p_player: Node3D): _update_camera_target() func _on_player_moved(): - # print("[CameraContextManager] Player moved signal received") + # Normal movement finish (keeps hysteresis) + _update_camera_target() + +func _on_player_snapped(): + # Sharp snap (spawn/teleport) - Reset setup indices to force immediate re-eval + current_row_setup = -1 + current_col_setup = -1 + # print("[CameraContextManager] Player snapped, resetting setups") _update_camera_target() func _update_camera_target(): @@ -174,9 +181,9 @@ func _update_freemode_camera(current_row: int, current_col: int): 2: target_z = 22.5; target_y = 19.22636 match current_col_setup: - 0: target_x = 5.0 - 1: target_x = 7.0 - 2: target_x = 9.0 + 0: target_x = 3.0 # Left zone center + 1: target_x = 7.0 # Main center + 2: target_x = 11.0 # Right zone center _apply_camera_tween(Vector3(target_x, target_y, target_z))