diff options
author | Pedro J. Estébanez <pedrojrulez@gmail.com> | 2017-11-13 12:46:30 +0100 |
---|---|---|
committer | Pedro J. Estébanez <pedrojrulez@gmail.com> | 2017-11-13 12:49:31 +0100 |
commit | e477fa2bd2d6cca37540e1c0791288f52bbb50b2 (patch) | |
tree | 7adfbfe67c870622a89a4467fdaae39587135205 | |
parent | 2fce0010f0d0eb2476028ed62335508bceabd820 (diff) |
Change AnimationPlayer looping logic
So now it can seek to the actual values at time=length when instructed to seek to time=N*length.
That is, formerly in the editor you had no way of seeing the actual state at time=length other than temporarily disabling looping. Now you can preview both endpoints.
As a side effect, the values at anim time 0 will only be applied when actually seeking to 0, instead of at every time=N*length, as formerly. No issue.
-rw-r--r-- | scene/animation/animation_player.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 80b7748078..6be3ff88d9 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -545,7 +545,14 @@ void AnimationPlayer::_animation_process_data(PlaybackData &cd, float p_delta, f } else { - next_pos = Math::fposmod(next_pos, len); + float looped_next_pos = Math::fposmod(next_pos, len); + if (looped_next_pos == 0 && next_pos != 0) { + // Loop multiples of the length to it, rather than 0 + // so state at time=length is previewable in the editor + next_pos = len; + } else { + next_pos = looped_next_pos; + } } cd.pos = next_pos; |