aboutsummaryrefslogtreecommitdiff
path: root/scene/resources/animation.cpp
diff options
context:
space:
mode:
authorPedro J. Estébanez2017-10-15 01:28:08 +0200
committerPedro J. Estébanez2017-10-15 01:28:08 +0200
commitf4959ee32b2b40521cb622bfb211f1309c820b03 (patch)
treee64230e444d110c300989cfc6bc7465db0abbb4d /scene/resources/animation.cpp
parentba9486a4d30f1bef11ff3629af67a87c6264f569 (diff)
downloadgodot-f4959ee32b2b40521cb622bfb211f1309c820b03.tar.gz
godot-f4959ee32b2b40521cb622bfb211f1309c820b03.tar.zst
godot-f4959ee32b2b40521cb622bfb211f1309c820b03.zip
Diffstat (limited to 'scene/resources/animation.cpp')
-rw-r--r--scene/resources/animation.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp
index 8dcc8d4e1..21e4a85cd 100644
--- a/scene/resources/animation.cpp
+++ b/scene/resources/animation.cpp
@@ -1171,9 +1171,7 @@ T Animation::_interpolate(const Vector<TKey<T> > &p_keys, float p_time, Interpol
ERR_FAIL_COND_V(idx == -2, T());
- if (p_ok)
- *p_ok = true;
-
+ bool result = true;
int next = 0;
float c = 0;
// prepare for all cases of interpolation
@@ -1243,10 +1241,19 @@ T Animation::_interpolate(const Vector<TKey<T> > &p_keys, float p_time, Interpol
} else if (idx < 0) {
- idx = next = 0;
+ // only allow extending first key to anim start if looping
+ if (loop)
+ idx = next = 0;
+ else
+ result = false;
}
}
+ if (p_ok)
+ *p_ok = result;
+ if (!result)
+ return T();
+
float tr = p_keys[idx].transition;
if (tr == 0 || idx == next) {
@@ -1298,7 +1305,7 @@ Error Animation::transform_track_interpolate(int p_track, float p_time, Vector3
TransformKey tk = _interpolate(tt->transforms, p_time, tt->interpolation, tt->loop_wrap, &ok);
- if (!ok) // ??
+ if (!ok)
return ERR_UNAVAILABLE;
if (r_loc)