1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-09 12:50:35 +00:00

Freelook interpolation fixes

- Smooth freelook position more explicitely
- Don't let orbit zoom produce translation when it shouldn't
- Make base speed framerate-independent (and tweaked setting for that)
- Don't rely on camera for calculations because it no longer reflect immediate state
- Avoid potential divide-by-zero with zoom inertia
- Make speed/zoom relation optional (if enabled, speed is adjusted from zoom)
- Never change zoom distance when freelook is active
- Orbit inertia also applies on freelook
This commit is contained in:
Marc Gilleron
2017-10-08 02:43:57 +02:00
parent bd10a00240
commit de42e53671
3 changed files with 133 additions and 54 deletions

View File

@@ -131,7 +131,7 @@ private:
float gizmo_scale;
bool freelook_active;
Vector3 freelook_target_position;
real_t freelook_speed;
PanelContainer *info;
Label *info_label;
@@ -231,6 +231,7 @@ private:
Vector3 pos;
float x_rot, y_rot, distance;
Vector3 eye_pos; // Used in freelook mode
bool region_select;
Point2 region_begin, region_end;
@@ -239,10 +240,17 @@ private:
distance = 4;
region_select = false;
}
} cursor, camera_cursor;
};
// Viewport camera supports movement smoothing,
// so one cursor is the real cursor, while the other can be an interpolated version.
Cursor cursor; // Immediate cursor
Cursor camera_cursor; // That one may be interpolated (don't modify this one except for smoothing purposes)
void scale_cursor_distance(real_t scale);
void set_freelook_active(bool active_now);
void scale_freelook_speed(real_t scale);
real_t zoom_indicator_delay;
RID move_gizmo_instance[3], move_plane_gizmo_instance[3], rotate_gizmo_instance[3], scale_gizmo_instance[3];