extends Camera2D @onready var basketball = $"../Basketball" @onready var hoop = $"../Hoop" func _process(_delta): if !basketball.waiting_for_shoot: position = (basketball.position + hoop.position) / 2 adjust_zoom() func adjust_zoom(): var dist_to_hoop = basketball.position.distance_to(hoop.position) if basketball.waiting_for_shoot: dist_to_hoop = basketball.start_position.distance_to(hoop.position) # Min and max widths of the court we want visible on screen at once var min_width = dist_to_hoop + basketball.drag_radius * 3 var max_width = limit_right - limit_left var zoom_level = Vector2(1, 1) # Zoom out the camera if we need to show more on screen if min_width > limit_right: zoom_level /= (min_width / limit_right) # Width of the view when the zoom is set to 1 var view_width = get_viewport().get_visible_rect().size.x # Fit the zoom level within the max width if needed # TODO: There should also be a vertical limit var max_zoom = float(view_width) / float(max_width) zoom_level.x = clamp(zoom_level.x, max_zoom, 1) zoom_level.y = clamp(zoom_level.y, max_zoom, 1) set_zoom(zoom_level) func _on_Basketball_reset(): position = (basketball.start_position + hoop.position) / 2 adjust_zoom()