Skip to content

Commit

Permalink
[c][cpp] Port: Added TrackEntry#isNextReady() #2547
Browse files Browse the repository at this point in the history
  • Loading branch information
badlogic committed Jun 11, 2024
1 parent c0efb54 commit f2d1a21
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 0 deletions.
2 changes: 2 additions & 0 deletions spine-c/spine-c/include/spine/AnimationState.h
Original file line number Diff line number Diff line change
Expand Up @@ -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*/
Expand Down
4 changes: 4 additions & 0 deletions spine-c/spine-c/src/spine/AnimationState.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
12 changes: 12 additions & 0 deletions spine-cpp/spine-cpp-lite/spine-cpp-lite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
2 changes: 2 additions & 0 deletions spine-cpp/spine-cpp-lite/spine-cpp-lite.h
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
6 changes: 6 additions & 0 deletions spine-cpp/spine-cpp/include/spine/AnimationState.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit f2d1a21

Please sign in to comment.