summaryrefslogtreecommitdiffstats
path: root/scene/animation/tween.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/animation/tween.cpp')
-rw-r--r--scene/animation/tween.cpp20
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);