mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 21:51:22 +00:00 
			
		
		
		
	Merge pull request #52377 from Calinou/tweak-3d-inertia-3.x
Tweak the 3D editor inertia defaults for better responsiveness (3.x)
This commit is contained in:
		
						commit
						7d852bd98a
					
				
					 2 changed files with 15 additions and 36 deletions
				
			
		|  | @ -266,15 +266,13 @@ void SpatialEditorViewport::_update_camera(float 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.linear_interpolate(cursor.eye_pos, CLAMP(factor, 0, 1)); | ||||
| 
 | ||||
| 			float orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia"); | ||||
| 			orbit_inertia = MAX(0.0001, orbit_inertia); | ||||
| 			const float 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 SpatialEditorViewport::_update_camera(float p_interp_delta) { | |||
| 			camera_cursor.pos = camera_cursor.eye_pos + forward * camera_cursor.distance; | ||||
| 
 | ||||
| 		} else { | ||||
| 			//when not being manipulated, move softly
 | ||||
| 			float free_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia"); | ||||
| 			float free_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia"); | ||||
| 			//when being manipulated, move more quickly
 | ||||
| 			float manip_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_orbit_inertia"); | ||||
| 			float manip_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_translation_inertia"); | ||||
| 
 | ||||
| 			float 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_CONTROL); | ||||
| 
 | ||||
| 			float orbit_inertia = MAX(0.00001, manipulated ? manip_orbit_inertia : free_orbit_inertia); | ||||
| 			float translation_inertia = MAX(0.0001, manipulated ? manip_translation_inertia : free_translation_inertia); | ||||
| 			zoom_inertia = MAX(0.0001, zoom_inertia); | ||||
| 			const float orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia"); | ||||
| 			const float translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia"); | ||||
| 			const float 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
	
	 Rémi Verschelde
						Rémi Verschelde