From a3a0648ce7df85884e8217969e3d70bbd90e8fde Mon Sep 17 00:00:00 2001 From: badlogic Date: Wed, 16 May 2018 11:52:28 +0200 Subject: [PATCH] [cpp] Fixes completion event firing for 0 duration animations. See #1112. --- spine-cpp/spine-cpp/src/spine/AnimationState.cpp | 10 ++++++---- spine-sfml/cpp/example/main.cpp | 8 ++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp index a3ec1aa47..57f55b4bb 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp +++ b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp @@ -879,10 +879,12 @@ void AnimationState::queueEvents(TrackEntry *entry, float animationTime) { } // Queue complete if completed a loop iteration or the animation. - if (entry->_loop ? (trackLastWrapped > MathUtil::fmod(entry->_trackTime, duration)) : ( - animationTime >= animationEnd && entry->_animationLast < animationEnd)) { - _queue->complete(entry); - } + bool complete = false; + if (entry->_loop) + complete = duration == 0 || (trackLastWrapped > MathUtil::fmod(entry->_trackTime, duration)); + else + complete = animationTime >= animationEnd && entry->_animationLast < animationEnd; + if (complete) _queue->complete(entry); // Queue events after complete. for (; i < n; ++i) { diff --git a/spine-sfml/cpp/example/main.cpp b/spine-sfml/cpp/example/main.cpp index 83a7a910f..c958abacd 100644 --- a/spine-sfml/cpp/example/main.cpp +++ b/spine-sfml/cpp/example/main.cpp @@ -455,10 +455,10 @@ int main () { DebugExtension dbgExtension; SpineExtension::setInstance(&dbgExtension); - // testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor.atlas", 0.5f); - // testcase(test, "data/tank-pro.json", "data/tank-pro.skel", "data/tank.atlas", 1.0f); - // testcase(spineboy, "data/spineboy-ess.json", "data/spineboy-ess.skel", "data/spineboy.atlas", 0.6f); - // testcase(owl, "data/owl-pro.json", "data/owl-pro.skel", "data/owl.atlas", 0.5f); + testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor.atlas", 0.5f); + testcase(test, "data/tank-pro.json", "data/tank-pro.skel", "data/tank.atlas", 1.0f); + testcase(spineboy, "data/spineboy-ess.json", "data/spineboy-ess.skel", "data/spineboy.atlas", 0.6f); + testcase(owl, "data/owl-pro.json", "data/owl-pro.skel", "data/owl.atlas", 0.5f); testcase(coin, "data/coin-pro.json", "data/coin-pro.skel", "data/coin.atlas", 0.5f); testcase(vine, "data/vine-pro.json", "data/vine-pro.skel", "data/vine.atlas", 0.5f); testcase(tank, "data/tank-pro.json", "data/tank-pro.skel", "data/tank.atlas", 0.2f);