summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
authorSilc 'Tokage' Renew <tokage.it.lab@gmail.com>2022-02-11 12:43:21 +0900
committerSilc 'Tokage' Renew <tokage.it.lab@gmail.com>2022-02-12 18:11:17 +0900
commit865da09871b0242471e7426ed54e9815193df5ae (patch)
tree414aa43ae1741a3ed392463c15373192cbc55953 /scene
parentdaf9729b925ea13d77312bb3ce18198e158c03a8 (diff)
Implement cubic_interpolate() as MathFunc for refactoring
Diffstat (limited to 'scene')
-rw-r--r--scene/resources/animation.cpp20
1 files changed, 5 insertions, 15 deletions
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp
index b6151bccf4..bc533ff022 100644
--- a/scene/resources/animation.cpp
+++ b/scene/resources/animation.cpp
@@ -2320,22 +2320,12 @@ Variant Animation::_cubic_interpolate(const Variant &p_pre_a, const Variant &p_a
if (vformat == ((1 << Variant::INT) | (1 << Variant::FLOAT)) || vformat == (1 << Variant::FLOAT)) {
//mix of real and int
+ real_t a = p_a;
+ real_t b = p_b;
+ real_t pa = p_pre_a;
+ real_t pb = p_post_b;
- real_t p0 = p_pre_a;
- real_t p1 = p_a;
- real_t p2 = p_b;
- real_t p3 = p_post_b;
-
- real_t t = p_c;
- real_t t2 = t * t;
- real_t t3 = t2 * t;
-
- return 0.5f *
- ((p1 * 2.0f) +
- (-p0 + p2) * t +
- (2.0f * p0 - 5.0f * p1 + 4 * p2 - p3) * t2 +
- (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3);
-
+ return Math::cubic_interpolate(a, b, pa, pb, p_c);
} else if ((vformat & (vformat - 1))) {
return p_a; //can't interpolate, mix of types
}