Kaynağa Gözat

[c][cpp] Port: Added TrackEntry#isNextReady() #2547

Mario Zechner 1 yıl önce
ebeveyn
işleme
f2d1a2104d

+ 2 - 0
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*/

+ 4 - 0
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;

+ 12 - 0
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) {

+ 2 - 0
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()
 

+ 6 - 0
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;