@@ -78,6 +78,7 @@ void Camera2D::set_zoom(const Vector2 &p_zoom) {
7878 ERR_FAIL_COND_MSG (Math::is_zero_approx (p_zoom.x ) || Math::is_zero_approx (p_zoom.y ), " Zoom level must be different from 0 (can be negative)." );
7979
8080 zoom = p_zoom;
81+ zoom_scale = Vector2 (1 , 1 ) / zoom;
8182 Point2 old_smoothed_camera_pos = smoothed_camera_pos;
8283 _update_scroll ();
8384 smoothed_camera_pos = old_smoothed_camera_pos;
@@ -102,8 +103,8 @@ Transform2D Camera2D::get_camera_transform() {
102103 if (!first) {
103104 if (anchor_mode == ANCHOR_MODE_DRAG_CENTER) {
104105 if (drag_horizontal_enabled && !Engine::get_singleton ()->is_editor_hint () && !drag_horizontal_offset_changed) {
105- camera_pos.x = MIN (camera_pos.x , (new_camera_pos.x + screen_size.x * 0.5 * zoom .x * drag_margin[SIDE_LEFT]));
106- camera_pos.x = MAX (camera_pos.x , (new_camera_pos.x - screen_size.x * 0.5 * zoom .x * drag_margin[SIDE_RIGHT]));
106+ camera_pos.x = MIN (camera_pos.x , (new_camera_pos.x + screen_size.x * 0.5 * zoom_scale .x * drag_margin[SIDE_LEFT]));
107+ camera_pos.x = MAX (camera_pos.x , (new_camera_pos.x - screen_size.x * 0.5 * zoom_scale .x * drag_margin[SIDE_RIGHT]));
107108 } else {
108109 if (drag_horizontal_offset < 0 ) {
109110 camera_pos.x = new_camera_pos.x + screen_size.x * 0.5 * drag_margin[SIDE_RIGHT] * drag_horizontal_offset;
@@ -115,8 +116,8 @@ Transform2D Camera2D::get_camera_transform() {
115116 }
116117
117118 if (drag_vertical_enabled && !Engine::get_singleton ()->is_editor_hint () && !drag_vertical_offset_changed) {
118- camera_pos.y = MIN (camera_pos.y , (new_camera_pos.y + screen_size.y * 0.5 * zoom .y * drag_margin[SIDE_TOP]));
119- camera_pos.y = MAX (camera_pos.y , (new_camera_pos.y - screen_size.y * 0.5 * zoom .y * drag_margin[SIDE_BOTTOM]));
119+ camera_pos.y = MIN (camera_pos.y , (new_camera_pos.y + screen_size.y * 0.5 * zoom_scale .y * drag_margin[SIDE_TOP]));
120+ camera_pos.y = MAX (camera_pos.y , (new_camera_pos.y - screen_size.y * 0.5 * zoom_scale .y * drag_margin[SIDE_BOTTOM]));
120121
121122 } else {
122123 if (drag_vertical_offset < 0 ) {
@@ -132,8 +133,8 @@ Transform2D Camera2D::get_camera_transform() {
132133 camera_pos = new_camera_pos;
133134 }
134135
135- Point2 screen_offset = (anchor_mode == ANCHOR_MODE_DRAG_CENTER ? (screen_size * 0.5 * zoom ) : Point2 ());
136- Rect2 screen_rect (-screen_offset + camera_pos, screen_size * zoom );
136+ Point2 screen_offset = (anchor_mode == ANCHOR_MODE_DRAG_CENTER ? (screen_size * 0.5 * zoom_scale ) : Point2 ());
137+ Rect2 screen_rect (-screen_offset + camera_pos, screen_size * zoom_scale );
137138
138139 if (limit_smoothing_enabled) {
139140 if (screen_rect.position .x < limit[SIDE_LEFT]) {
@@ -167,14 +168,14 @@ Transform2D Camera2D::get_camera_transform() {
167168 first = false ;
168169 }
169170
170- Point2 screen_offset = (anchor_mode == ANCHOR_MODE_DRAG_CENTER ? (screen_size * 0.5 * zoom ) : Point2 ());
171+ Point2 screen_offset = (anchor_mode == ANCHOR_MODE_DRAG_CENTER ? (screen_size * 0.5 * zoom_scale ) : Point2 ());
171172
172173 real_t angle = get_global_rotation ();
173174 if (rotating) {
174175 screen_offset = screen_offset.rotated (angle);
175176 }
176177
177- Rect2 screen_rect (-screen_offset + ret_camera_pos, screen_size * zoom );
178+ Rect2 screen_rect (-screen_offset + ret_camera_pos, screen_size * zoom_scale );
178179
179180 if (!smoothing_enabled || !limit_smoothing_enabled) {
180181 if (screen_rect.position .x < limit[SIDE_LEFT]) {
@@ -201,7 +202,7 @@ Transform2D Camera2D::get_camera_transform() {
201202 camera_screen_center = screen_rect.get_center ();
202203
203204 Transform2D xform;
204- xform.scale_basis (zoom );
205+ xform.scale_basis (zoom_scale );
205206 if (rotating) {
206207 xform.set_rotation (angle);
207208 }
0 commit comments