Tweak the 3D editor inertia defaults for better responsiveness
The default orbit sensitivity was decreased to account for this change. Rotational inertia (orbit + freelook) was disabled by default due to known issues. This also removes the need for separate manipulation inertia settings, as the default settings are more responsive.
This commit is contained in:
parent
2d1699ef82
commit
e2718b7717
2 changed files with 12 additions and 31 deletions
|
|
@ -265,15 +265,13 @@ void Node3DEditorViewport::_update_camera(real_t p_interp_delta) {
|
|||
if (is_freelook_active()) {
|
||||
// Higher inertia should increase "lag" (lerp with factor between 0 and 1)
|
||||
// Inertia of zero should produce instant movement (lerp with factor of 1) in this case it returns a really high value and gets clamped to 1.
|
||||
real_t inertia = EDITOR_GET("editors/3d/freelook/freelook_inertia");
|
||||
inertia = MAX(0.001, inertia);
|
||||
const real_t inertia = EDITOR_GET("editors/3d/freelook/freelook_inertia");
|
||||
real_t factor = (1.0 / inertia) * p_interp_delta;
|
||||
|
||||
// We interpolate a different point here, because in freelook mode the focus point (cursor.pos) orbits around eye_pos
|
||||
camera_cursor.eye_pos = old_camera_cursor.eye_pos.lerp(cursor.eye_pos, CLAMP(factor, 0, 1));
|
||||
|
||||
real_t orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia");
|
||||
orbit_inertia = MAX(0.0001, orbit_inertia);
|
||||
const real_t orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia");
|
||||
camera_cursor.x_rot = Math::lerp(old_camera_cursor.x_rot, cursor.x_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia)));
|
||||
camera_cursor.y_rot = Math::lerp(old_camera_cursor.y_rot, cursor.y_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia)));
|
||||
|
||||
|
|
@ -289,24 +287,9 @@ void Node3DEditorViewport::_update_camera(real_t p_interp_delta) {
|
|||
camera_cursor.pos = camera_cursor.eye_pos + forward * camera_cursor.distance;
|
||||
|
||||
} else {
|
||||
//when not being manipulated, move softly
|
||||
real_t free_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia");
|
||||
real_t free_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia");
|
||||
//when being manipulated, move more quickly
|
||||
real_t manip_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_orbit_inertia");
|
||||
real_t manip_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_translation_inertia");
|
||||
|
||||
real_t zoom_inertia = EDITOR_GET("editors/3d/navigation_feel/zoom_inertia");
|
||||
|
||||
//determine if being manipulated
|
||||
bool manipulated = Input::get_singleton()->get_mouse_button_mask() & (2 | 4);
|
||||
manipulated |= Input::get_singleton()->is_key_pressed(KEY_SHIFT);
|
||||
manipulated |= Input::get_singleton()->is_key_pressed(KEY_ALT);
|
||||
manipulated |= Input::get_singleton()->is_key_pressed(KEY_CTRL);
|
||||
|
||||
real_t orbit_inertia = MAX(0.00001, manipulated ? manip_orbit_inertia : free_orbit_inertia);
|
||||
real_t translation_inertia = MAX(0.0001, manipulated ? manip_translation_inertia : free_translation_inertia);
|
||||
zoom_inertia = MAX(0.0001, zoom_inertia);
|
||||
const real_t orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia");
|
||||
const real_t translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia");
|
||||
const real_t zoom_inertia = EDITOR_GET("editors/3d/navigation_feel/zoom_inertia");
|
||||
|
||||
camera_cursor.x_rot = Math::lerp(old_camera_cursor.x_rot, cursor.x_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia)));
|
||||
camera_cursor.y_rot = Math::lerp(old_camera_cursor.y_rot, cursor.y_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia)));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue