|
@@ -419,14 +419,26 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float
|
|
|
pa->capture = pa->object->get_indexed(pa->subpath);
|
|
|
}
|
|
|
|
|
|
- if (a->track_get_key_count(i) == 0)
|
|
|
+ int key_count = a->track_get_key_count(i);
|
|
|
+ if (key_count == 0)
|
|
|
continue; //eeh not worth it
|
|
|
|
|
|
float first_key_time = a->track_get_key_time(i, 0);
|
|
|
+ float transition = 1.0;
|
|
|
+ int first_key = 0;
|
|
|
+
|
|
|
+ if (first_key_time == 0.0) {
|
|
|
+ //ignore, use for transition
|
|
|
+ if (key_count == 1)
|
|
|
+ continue; //with one key we cant do anything
|
|
|
+ transition = a->track_get_key_transition(i, 0);
|
|
|
+ first_key_time = a->track_get_key_time(i, 1);
|
|
|
+ first_key = 1;
|
|
|
+ }
|
|
|
|
|
|
if (p_time < first_key_time) {
|
|
|
- float c = p_time / first_key_time;
|
|
|
- Variant first_value = a->track_get_key_value(i, 0);
|
|
|
+ float c = Math::ease(p_time / first_key_time, transition);
|
|
|
+ Variant first_value = a->track_get_key_value(i, first_key);
|
|
|
Variant interp_value;
|
|
|
Variant::interpolate(pa->capture, first_value, c, interp_value);
|
|
|
|