Merge pull request #76899 from rakkarage/spring-tween
Add TRANS_SPRING to Tween
This commit is contained in:
commit
7a176459b1
4 changed files with 35 additions and 0 deletions
|
@ -501,6 +501,9 @@
|
|||
<constant name="TRANS_BACK" value="10" enum="TransitionType">
|
||||
The animation is interpolated backing out at ends.
|
||||
</constant>
|
||||
<constant name="TRANS_SPRING" value="11" enum="TransitionType">
|
||||
The animation is interpolated like a spring towards the end.
|
||||
</constant>
|
||||
<constant name="EASE_IN" value="0" enum="EaseType">
|
||||
The interpolation starts slowly and speeds up towards the end.
|
||||
</constant>
|
||||
|
|
|
@ -413,4 +413,33 @@ static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
|
|||
}
|
||||
}; // namespace back
|
||||
|
||||
namespace spring {
|
||||
static real_t out(real_t t, real_t b, real_t c, real_t d) {
|
||||
t /= d;
|
||||
real_t s = 1.0 - t;
|
||||
t = (sin(t * Math_PI * (0.2 + 2.5 * t * t * t)) * pow(s, 2.2) + t) * (1.0 + (1.2 * s));
|
||||
return c * t + b;
|
||||
}
|
||||
|
||||
static real_t in(real_t t, real_t b, real_t c, real_t d) {
|
||||
return c - out(d - t, 0, c, d) + b;
|
||||
}
|
||||
|
||||
static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
|
||||
if (t < d / 2) {
|
||||
return in(t * 2, b, c / 2, d);
|
||||
}
|
||||
real_t h = c / 2;
|
||||
return out(t * 2 - d, b + h, h, d);
|
||||
}
|
||||
|
||||
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
|
||||
if (t < d / 2) {
|
||||
return out(t * 2, b, c / 2, d);
|
||||
}
|
||||
real_t h = c / 2;
|
||||
return in(t * 2 - d, b + h, h, d);
|
||||
}
|
||||
}; // namespace spring
|
||||
|
||||
#endif // EASING_EQUATIONS_H
|
||||
|
|
|
@ -50,6 +50,7 @@ Tween::interpolater Tween::interpolaters[Tween::TRANS_MAX][Tween::EASE_MAX] = {
|
|||
{ &circ::in, &circ::out, &circ::in_out, &circ::out_in },
|
||||
{ &bounce::in, &bounce::out, &bounce::in_out, &bounce::out_in },
|
||||
{ &back::in, &back::out, &back::in_out, &back::out_in },
|
||||
{ &spring::in, &spring::out, &spring::in_out, &spring::out_in },
|
||||
};
|
||||
|
||||
void Tweener::set_tween(const Ref<Tween> &p_tween) {
|
||||
|
@ -483,6 +484,7 @@ void Tween::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(TRANS_CIRC);
|
||||
BIND_ENUM_CONSTANT(TRANS_BOUNCE);
|
||||
BIND_ENUM_CONSTANT(TRANS_BACK);
|
||||
BIND_ENUM_CONSTANT(TRANS_SPRING);
|
||||
|
||||
BIND_ENUM_CONSTANT(EASE_IN);
|
||||
BIND_ENUM_CONSTANT(EASE_OUT);
|
||||
|
|
|
@ -87,6 +87,7 @@ public:
|
|||
TRANS_CIRC,
|
||||
TRANS_BOUNCE,
|
||||
TRANS_BACK,
|
||||
TRANS_SPRING,
|
||||
TRANS_MAX
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue