Show a message when trying to zoom farther than the limit

(cherry picked from commit b8f66d58b6)
This commit is contained in:
Aaron Franke 2021-04-09 08:52:10 -04:00 committed by Rémi Verschelde
parent c4f941114c
commit 9b928cbd9e
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 19 additions and 0 deletions

View file

@ -2220,6 +2220,12 @@ void SpatialEditorViewport::scale_cursor_distance(real_t scale) {
cursor.distance = CLAMP(cursor.distance * scale, min_distance, max_distance); cursor.distance = CLAMP(cursor.distance * scale, min_distance, max_distance);
} }
if (cursor.distance == max_distance || cursor.distance == min_distance) {
zoom_failed_attempts_count++;
} else {
zoom_failed_attempts_count = 0;
}
zoom_indicator_delay = ZOOM_FREELOOK_INDICATOR_DELAY_S; zoom_indicator_delay = ZOOM_FREELOOK_INDICATOR_DELAY_S;
surface->update(); surface->update();
} }
@ -2371,6 +2377,7 @@ void SpatialEditorViewport::_notification(int p_what) {
zoom_indicator_delay -= delta; zoom_indicator_delay -= delta;
if (zoom_indicator_delay <= 0) { if (zoom_indicator_delay <= 0) {
surface->update(); surface->update();
zoom_limit_label->hide();
} }
} }
@ -2732,6 +2739,7 @@ void SpatialEditorViewport::_draw() {
} else { } else {
// Show zoom // Show zoom
zoom_limit_label->set_visible(zoom_failed_attempts_count > 15);
real_t min_distance = MAX(camera->get_znear() * 4, ZOOM_FREELOOK_MIN); real_t min_distance = MAX(camera->get_znear() * 4, ZOOM_FREELOOK_MIN);
real_t max_distance = MIN(camera->get_zfar() / 2, ZOOM_FREELOOK_MAX); real_t max_distance = MIN(camera->get_zfar() / 2, ZOOM_FREELOOK_MAX);
@ -4004,6 +4012,15 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
locked_label->set_text(TTR("View Rotation Locked")); locked_label->set_text(TTR("View Rotation Locked"));
locked_label->hide(); locked_label->hide();
zoom_limit_label = memnew(Label);
zoom_limit_label->set_anchors_and_margins_preset(LayoutPreset::PRESET_BOTTOM_LEFT);
zoom_limit_label->set_margin(Margin::MARGIN_TOP, -28 * EDSCALE);
zoom_limit_label->set_text(TTR("To zoom further, change the camera's clipping planes (View -> Settings...)"));
zoom_limit_label->set_name("ZoomLimitMessageLabel");
zoom_limit_label->add_color_override("font_color", Color(1, 1, 1, 1));
zoom_limit_label->hide();
surface->add_child(zoom_limit_label);
top_right_vbox = memnew(VBoxContainer); top_right_vbox = memnew(VBoxContainer);
top_right_vbox->set_anchors_and_margins_preset(PRESET_TOP_RIGHT, PRESET_MODE_MINSIZE, 2.0 * EDSCALE); top_right_vbox->set_anchors_and_margins_preset(PRESET_TOP_RIGHT, PRESET_MODE_MINSIZE, 2.0 * EDSCALE);
top_right_vbox->set_h_grow_direction(GROW_DIRECTION_BEGIN); top_right_vbox->set_h_grow_direction(GROW_DIRECTION_BEGIN);

View file

@ -272,6 +272,7 @@ private:
Label *info_label; Label *info_label;
Label *cinema_label; Label *cinema_label;
Label *locked_label; Label *locked_label;
Label *zoom_limit_label;
VBoxContainer *top_right_vbox; VBoxContainer *top_right_vbox;
ViewportRotationControl *rotation_control; ViewportRotationControl *rotation_control;
@ -394,6 +395,7 @@ private:
void scale_freelook_speed(real_t scale); void scale_freelook_speed(real_t scale);
real_t zoom_indicator_delay; real_t zoom_indicator_delay;
int zoom_failed_attempts_count = 0;
RID move_gizmo_instance[3], move_plane_gizmo_instance[3], rotate_gizmo_instance[4], scale_gizmo_instance[3], scale_plane_gizmo_instance[3]; RID move_gizmo_instance[3], move_plane_gizmo_instance[3], rotate_gizmo_instance[4], scale_gizmo_instance[3], scale_plane_gizmo_instance[3];