diff --git a/spine-c/spine-c/include/spine/AnimationState.h b/spine-c/spine-c/include/spine/AnimationState.h index 02349b946..9e36dc14a 100644 --- a/spine-c/spine-c/include/spine/AnimationState.h +++ b/spine-c/spine-c/include/spine/AnimationState.h @@ -150,6 +150,8 @@ SP_API void spTrackEntry_setMixDuration(spTrackEntry *entry, float mixDuration, SP_API int/*bool*/ spTrackEntry_wasApplied(spTrackEntry *entry); +SP_API int/*bool*/ spTrackEntry_isNextReady(spTrackEntry *entry); + SP_API void spAnimationState_clearNext(spAnimationState *self, spTrackEntry *entry); /** Use this to dispose static memory before your app exits to appease your memory leak detector*/ diff --git a/spine-c/spine-c/src/spine/AnimationState.c b/spine-c/spine-c/src/spine/AnimationState.c index 83ac6ff1d..7ca4df419 100644 --- a/spine-c/spine-c/src/spine/AnimationState.c +++ b/spine-c/spine-c/src/spine/AnimationState.c @@ -1069,6 +1069,10 @@ int spTrackEntry_wasApplied(spTrackEntry *entry) { return entry->nextTrackLast != -1; } +int spTrackEntry_isNextReady(spTrackEntry *entry) { + return entry->next != NULL && entry->nextTrackLast - entry->next->delay >= 0; +} + void _spTrackEntry_computeHold(spTrackEntry *entry, spAnimationState *state) { spTrackEntry *to; spTimeline **timelines; diff --git a/spine-cpp/spine-cpp-lite/spine-cpp-lite.cpp b/spine-cpp/spine-cpp-lite/spine-cpp-lite.cpp index 9b7711507..72230195e 100644 --- a/spine-cpp/spine-cpp-lite/spine-cpp-lite.cpp +++ b/spine-cpp/spine-cpp-lite/spine-cpp-lite.cpp @@ -1412,6 +1412,18 @@ float spine_track_entry_get_track_complete(spine_track_entry entry) { return _entry->getTrackComplete(); } +spine_bool spine_track_entry_was_applied(spine_track_entry entry) { + if (entry == nullptr) return false; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->wasApplied(); +} + +spine_bool spine_track_entry_is_next_ready(spine_track_entry entry) { + if (entry == nullptr) return false; + TrackEntry *_entry = (TrackEntry *) entry; + return _entry->isNextReady(); +} + // Skeleton void spine_skeleton_update_cache(spine_skeleton skeleton) { diff --git a/spine-cpp/spine-cpp-lite/spine-cpp-lite.h b/spine-cpp/spine-cpp-lite/spine-cpp-lite.h index 91ba5f11c..a4e0ea0fa 100644 --- a/spine-cpp/spine-cpp-lite/spine-cpp-lite.h +++ b/spine-cpp/spine-cpp-lite/spine-cpp-lite.h @@ -371,6 +371,8 @@ SPINE_CPP_LITE_EXPORT spine_track_entry spine_track_entry_get_mixing_from(spine_ SPINE_CPP_LITE_EXPORT spine_track_entry spine_track_entry_get_mixing_to(spine_track_entry entry); SPINE_CPP_LITE_EXPORT void spine_track_entry_reset_rotation_directions(spine_track_entry entry); SPINE_CPP_LITE_EXPORT float spine_track_entry_get_track_complete(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT float spine_track_entry_was_applied(spine_track_entry entry); +SPINE_CPP_LITE_EXPORT float spine_track_entry_is_next_ready(spine_track_entry entry); // OMITTED setListener() // OMITTED setListener() diff --git a/spine-cpp/spine-cpp/include/spine/AnimationState.h b/spine-cpp/spine-cpp/include/spine/AnimationState.h index dcdd4334e..d130611db 100644 --- a/spine-cpp/spine-cpp/include/spine/AnimationState.h +++ b/spine-cpp/spine-cpp/include/spine/AnimationState.h @@ -284,6 +284,12 @@ namespace spine { /// See AnimationState::apply(Skeleton). bool wasApplied(); + /// Returns true if there is a getNext() track entry that is ready to become the current track entry during the + /// next AnimationState::update(float)} + bool isNextReady () { + return _next != NULL && _nextTrackLast - _next->_delay >= 0; + } + private: Animation *_animation; TrackEntry *_previous;