diff --git a/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.cpp b/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.cpp index 2f11c4183..e2ef49e07 100755 --- a/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.cpp +++ b/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.cpp @@ -179,4 +179,44 @@ void MemoryTestFixture::reproduceIssue_777() DisposeAll(skeleton, state, stateData, skeletonData, atlas); } +spSkeleton* skeleton = nullptr; +static void spineAnimStateHandler(spAnimationState* state, int type, spTrackEntry* entry, spEvent* event) +{ + if (type == SP_ANIMATION_COMPLETE) + { + spAnimationState_setAnimationByName(state, 0, "walk", false); + spAnimationState_update(state, 0); + spAnimationState_apply(state, skeleton); + } +} + +void MemoryTestFixture::reproduceIssue_Loop() +{ + spAtlas* atlas = nullptr; + spSkeletonData* skeletonData = nullptr; + spAnimationStateData* stateData = nullptr; + spAnimationState* state = nullptr; + + ////////////////////////////////////////////////////////////////////////// + // Initialize Animations + LoadSpineboyExample(atlas, skeletonData, stateData, skeleton, state); + + /////////////////////////////////////////////////////////////////////////// + + if (state) + state->listener = (spAnimationStateListener)&spineAnimStateHandler; + + spAnimationState_setAnimationByName(state, 0, "walk", false); + + // run normal update + for (int i = 0; i < 50; ++i) { + const float timeSlice = 1.0f / 60.0f; + spSkeleton_update(skeleton, timeSlice); + spAnimationState_update(state, timeSlice); + spAnimationState_apply(state, skeleton); + } + + DisposeAll(skeleton, state, stateData, skeletonData, atlas); +} + diff --git a/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.h b/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.h index d71ece96a..daeff7cd6 100755 --- a/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.h +++ b/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.h @@ -17,6 +17,7 @@ public: // Comment out here to disable individual test cases TEST_CASE(reproduceIssue_776); TEST_CASE(reproduceIssue_777); + TEST_CASE(reproduceIssue_Loop); initialize(); } @@ -29,6 +30,7 @@ public: public: void reproduceIssue_776(); void reproduceIssue_777(); + void reproduceIssue_Loop(); // http://esotericsoftware.com/forum/spine-c-3-5-animation-jerking-7451 ////////////////////////////////////////////////////////////////////////// // test fixture setup