Merge pull request #99058 from UnfavorableEnhancer/animation_snapping_fix

[4.3] Fix animation snapping in seconds mode
This commit is contained in:
Rémi Verschelde 2024-11-15 19:08:22 +01:00
commit 305bdbfb3b
No known key found for this signature in database
GPG Key ID: C3336907360768E1

View File

@ -7052,25 +7052,23 @@ void AnimationTrackEditor::_update_snap_unit() {
if (timeline->is_using_fps()) { if (timeline->is_using_fps()) {
snap_unit = 1.0 / step->get_value(); snap_unit = 1.0 / step->get_value();
} else { } else {
double integer; snap_unit = step->get_value();
double fraction = Math::modf(step->get_value(), &integer);
fraction = 1.0 / Math::round(1.0 / fraction);
snap_unit = integer + fraction;
} }
} }
float AnimationTrackEditor::snap_time(float p_value, bool p_relative) { float AnimationTrackEditor::snap_time(float p_value, bool p_relative) {
if (is_snap_enabled()) { if (is_snap_enabled()) {
double current_snap = snap_unit;
if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) { if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
// Use more precise snapping when holding Shift. // Use more precise snapping when holding Shift.
snap_unit *= 0.25; current_snap *= 0.25;
} }
if (p_relative) { if (p_relative) {
double rel = Math::fmod(timeline->get_value(), snap_unit); double rel = Math::fmod(timeline->get_value(), current_snap);
p_value = Math::snapped(p_value + rel, snap_unit) - rel; p_value = Math::snapped(p_value + rel, current_snap) - rel;
} else { } else {
p_value = Math::snapped(p_value, snap_unit); p_value = Math::snapped(p_value, current_snap);
} }
} }