class_name CameraController extends Camera2D func apply_drag(delta: Vector2) -> void: var half_view: Vector2 = get_viewport_rect().size * 0.5 / zoom var min_pos := Vector2(limit_left, limit_top) + half_view var max_pos := Vector2(limit_right, limit_bottom) - half_view # Guard against maps smaller than the viewport (min > max) max_pos.x = max(min_pos.x, max_pos.x) max_pos.y = max(min_pos.y, max_pos.y) position = (position + delta / zoom).clamp(min_pos, max_pos) func set_map_bounds(rect: Rect2) -> void: limit_left = int(rect.position.x) limit_top = int(rect.position.y) limit_right = int(rect.position.x + rect.size.x) limit_bottom = int(rect.position.y + rect.size.y)