diff options
Diffstat (limited to 'scene/animation/tween.cpp')
| -rw-r--r-- | scene/animation/tween.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index 32028bcf28..8193bbf3f1 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -420,13 +420,8 @@ Variant Tween::interpolate_variant(const Variant &p_initial_val, const Variant & ERR_FAIL_INDEX_V(p_trans, TransitionType::TRANS_MAX, Variant()); ERR_FAIL_INDEX_V(p_ease, EaseType::EASE_MAX, Variant()); - // Special case for bool. - if (p_initial_val.get_type() == Variant::BOOL) { - return run_equation(p_trans, p_ease, p_time, p_initial_val, p_delta_val, p_duration) >= 0.5; - } - Variant ret = Animation::add_variant(p_initial_val, p_delta_val); - ret = Animation::interpolate_variant(p_initial_val, ret, run_equation(p_trans, p_ease, p_time, 0.0, 1.0, p_duration)); + ret = Animation::interpolate_variant(p_initial_val, ret, run_equation(p_trans, p_ease, p_time, 0.0, 1.0, p_duration), p_initial_val.is_string()); return ret; } @@ -554,9 +549,12 @@ void PropertyTweener::start() { return; } - if (do_continue && Math::is_zero_approx(delay)) { - initial_val = target_instance->get_indexed(property); - do_continue = false; + if (do_continue) { + if (Math::is_zero_approx(delay)) { + initial_val = target_instance->get_indexed(property); + } else { + do_continue_delayed = true; + } } if (relative) { @@ -581,10 +579,10 @@ bool PropertyTweener::step(double &r_delta) { if (elapsed_time < delay) { r_delta = 0; return true; - } else if (do_continue && !Math::is_zero_approx(delay)) { + } else if (do_continue_delayed && !Math::is_zero_approx(delay)) { initial_val = target_instance->get_indexed(property); delta_val = Animation::subtract_variant(final_val, initial_val); - do_continue = false; + do_continue_delayed = false; } double time = MIN(elapsed_time - delay, duration); |
