diff --git a/doc/classes/Camera2D.xml b/doc/classes/Camera2D.xml index 289f2f0ce9e..76bc758edcd 100644 --- a/doc/classes/Camera2D.xml +++ b/doc/classes/Camera2D.xml @@ -153,6 +153,8 @@ If [code]true[/code], the camera smoothly stops when reaches its limits. + This has no effect if smoothing is disabled. + [b]Note:[/b] To immediately update the camera's position to be within limits without smoothing, even with this setting enabled, invoke [method reset_smoothing]. Top scroll limit in pixels. The camera stops moving when reaching this value. diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index f070191a11f..bc03d77fe86 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -196,20 +196,23 @@ Transform2D Camera2D::get_camera_transform() { } Rect2 screen_rect(-screen_offset + ret_camera_pos, screen_size * zoom); - if (screen_rect.position.x < limit[MARGIN_LEFT]) { - screen_rect.position.x = limit[MARGIN_LEFT]; - } - if (screen_rect.position.x + screen_rect.size.x > limit[MARGIN_RIGHT]) { - screen_rect.position.x = limit[MARGIN_RIGHT] - screen_rect.size.x; - } + if (!limit_smoothing_enabled) { + if (screen_rect.position.x < limit[MARGIN_LEFT]) { + screen_rect.position.x = limit[MARGIN_LEFT]; + } - if (screen_rect.position.y + screen_rect.size.y > limit[MARGIN_BOTTOM]) { - screen_rect.position.y = limit[MARGIN_BOTTOM] - screen_rect.size.y; - } + if (screen_rect.position.x + screen_rect.size.x > limit[MARGIN_RIGHT]) { + screen_rect.position.x = limit[MARGIN_RIGHT] - screen_rect.size.x; + } - if (screen_rect.position.y < limit[MARGIN_TOP]) { - screen_rect.position.y = limit[MARGIN_TOP]; + if (screen_rect.position.y + screen_rect.size.y > limit[MARGIN_BOTTOM]) { + screen_rect.position.y = limit[MARGIN_BOTTOM] - screen_rect.size.y; + } + + if (screen_rect.position.y < limit[MARGIN_TOP]) { + screen_rect.position.y = limit[MARGIN_TOP]; + } } if (offset != Vector2()) {