|
@@ -40,21 +40,25 @@ using std::vector;
|
|
|
|
|
|
namespace spine {
|
|
|
|
|
|
-void animationCallback (spAnimationState* state, int trackIndex, spEventType type, spEvent* event, int loopCount) {
|
|
|
- ((SkeletonAnimation*)state->rendererObject)->onAnimationStateEvent(trackIndex, type, event, loopCount);
|
|
|
+typedef struct _TrackEntryListeners {
|
|
|
+ StartListener startListener;
|
|
|
+ InterruptListener interruptListener;
|
|
|
+ EndListener endListener;
|
|
|
+ DisposeListener disposeListener;
|
|
|
+ CompleteListener completeListener;
|
|
|
+ EventListener eventListener;
|
|
|
+} _TrackEntryListeners;
|
|
|
+
|
|
|
+void animationCallback (spAnimationState* state, spEventType type, spTrackEntry* entry, spEvent* event) {
|
|
|
+ ((SkeletonAnimation*)state->rendererObject)->onAnimationStateEvent(entry, type, event);
|
|
|
}
|
|
|
|
|
|
-void trackEntryCallback (spAnimationState* state, int trackIndex, spEventType type, spEvent* event, int loopCount) {
|
|
|
- ((SkeletonAnimation*)state->rendererObject)->onTrackEntryEvent(trackIndex, type, event, loopCount);
|
|
|
+void trackEntryCallback (spAnimationState* state, spEventType type, spTrackEntry* entry, spEvent* event) {
|
|
|
+ ((SkeletonAnimation*)state->rendererObject)->onTrackEntryEvent(entry, type, event);
|
|
|
+ if (type == SP_ANIMATION_DISPOSE)
|
|
|
+ if (entry->rendererObject) delete (spine::_TrackEntryListeners*)entry->rendererObject;
|
|
|
}
|
|
|
|
|
|
-typedef struct _TrackEntryListeners {
|
|
|
- StartListener startListener;
|
|
|
- EndListener endListener;
|
|
|
- CompleteListener completeListener;
|
|
|
- EventListener eventListener;
|
|
|
-} _TrackEntryListeners;
|
|
|
-
|
|
|
static _TrackEntryListeners* getListeners (spTrackEntry* entry) {
|
|
|
if (!entry->rendererObject) {
|
|
|
entry->rendererObject = new spine::_TrackEntryListeners();
|
|
@@ -62,12 +66,7 @@ static _TrackEntryListeners* getListeners (spTrackEntry* entry) {
|
|
|
}
|
|
|
return (_TrackEntryListeners*)entry->rendererObject;
|
|
|
}
|
|
|
-
|
|
|
-void disposeTrackEntry (spTrackEntry* entry) {
|
|
|
- if (entry->rendererObject) delete (spine::_TrackEntryListeners*)entry->rendererObject;
|
|
|
- _spTrackEntry_dispose(entry);
|
|
|
-}
|
|
|
-
|
|
|
+
|
|
|
//
|
|
|
|
|
|
SkeletonAnimation* SkeletonAnimation::createWithData (spSkeletonData* skeletonData, bool ownsSkeletonData) {
|
|
@@ -117,7 +116,6 @@ void SkeletonAnimation::initialize () {
|
|
|
_state->listener = animationCallback;
|
|
|
|
|
|
_spAnimationState* stateInternal = (_spAnimationState*)_state;
|
|
|
- stateInternal->disposeTrackEntry = disposeTrackEntry;
|
|
|
}
|
|
|
|
|
|
SkeletonAnimation::SkeletonAnimation ()
|
|
@@ -188,39 +186,50 @@ void SkeletonAnimation::clearTrack (int trackIndex) {
|
|
|
spAnimationState_clearTrack(_state, trackIndex);
|
|
|
}
|
|
|
|
|
|
-void SkeletonAnimation::onAnimationStateEvent (int trackIndex, spEventType type, spEvent* event, int loopCount) {
|
|
|
+void SkeletonAnimation::onAnimationStateEvent (spTrackEntry* entry, spEventType type, spEvent* event) {
|
|
|
switch (type) {
|
|
|
case SP_ANIMATION_START:
|
|
|
- if (_startListener) _startListener(trackIndex);
|
|
|
+ if (_startListener) _startListener(entry);
|
|
|
break;
|
|
|
+ case SP_ANIMATION_INTERRUPT:
|
|
|
+ if (_interruptListener) _interruptListener(entry);
|
|
|
+ break;
|
|
|
case SP_ANIMATION_END:
|
|
|
- if (_endListener) _endListener(trackIndex);
|
|
|
+ if (_endListener) _endListener(entry);
|
|
|
break;
|
|
|
+ case SP_ANIMATION_DISPOSE:
|
|
|
+ if (_disposeListener) _disposeListener(entry);
|
|
|
+ break;
|
|
|
case SP_ANIMATION_COMPLETE:
|
|
|
- if (_completeListener) _completeListener(trackIndex, loopCount);
|
|
|
+ if (_completeListener) _completeListener(entry);
|
|
|
break;
|
|
|
case SP_ANIMATION_EVENT:
|
|
|
- if (_eventListener) _eventListener(trackIndex, event);
|
|
|
+ if (_eventListener) _eventListener(entry, event);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void SkeletonAnimation::onTrackEntryEvent (int trackIndex, spEventType type, spEvent* event, int loopCount) {
|
|
|
- spTrackEntry* entry = spAnimationState_getCurrent(_state, trackIndex);
|
|
|
+void SkeletonAnimation::onTrackEntryEvent (spTrackEntry* entry, spEventType type, spEvent* event) {
|
|
|
if (!entry->rendererObject) return;
|
|
|
_TrackEntryListeners* listeners = (_TrackEntryListeners*)entry->rendererObject;
|
|
|
switch (type) {
|
|
|
case SP_ANIMATION_START:
|
|
|
- if (listeners->startListener) listeners->startListener(trackIndex);
|
|
|
+ if (listeners->startListener) listeners->startListener(entry);
|
|
|
break;
|
|
|
+ case SP_ANIMATION_INTERRUPT:
|
|
|
+ if (listeners->interruptListener) listeners->interruptListener(entry);
|
|
|
+ break;
|
|
|
case SP_ANIMATION_END:
|
|
|
- if (listeners->endListener) listeners->endListener(trackIndex);
|
|
|
+ if (listeners->endListener) listeners->endListener(entry);
|
|
|
break;
|
|
|
+ case SP_ANIMATION_DISPOSE:
|
|
|
+ if (listeners->disposeListener) listeners->disposeListener(entry);
|
|
|
+ break;
|
|
|
case SP_ANIMATION_COMPLETE:
|
|
|
- if (listeners->completeListener) listeners->completeListener(trackIndex, loopCount);
|
|
|
+ if (listeners->completeListener) listeners->completeListener(entry);
|
|
|
break;
|
|
|
case SP_ANIMATION_EVENT:
|
|
|
- if (listeners->eventListener) listeners->eventListener(trackIndex, event);
|
|
|
+ if (listeners->eventListener) listeners->eventListener(entry, event);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -228,10 +237,18 @@ void SkeletonAnimation::onTrackEntryEvent (int trackIndex, spEventType type, spE
|
|
|
void SkeletonAnimation::setStartListener (const StartListener& listener) {
|
|
|
_startListener = listener;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+void SkeletonAnimation::setInterruptListener (const InterruptListener& listener) {
|
|
|
+ _interruptListener = listener;
|
|
|
+}
|
|
|
+
|
|
|
void SkeletonAnimation::setEndListener (const EndListener& listener) {
|
|
|
_endListener = listener;
|
|
|
}
|
|
|
+
|
|
|
+void SkeletonAnimation::setDisposeListener (const DisposeListener& listener) {
|
|
|
+ _disposeListener = listener;
|
|
|
+}
|
|
|
|
|
|
void SkeletonAnimation::setCompleteListener (const CompleteListener& listener) {
|
|
|
_completeListener = listener;
|
|
@@ -244,10 +261,18 @@ void SkeletonAnimation::setEventListener (const EventListener& listener) {
|
|
|
void SkeletonAnimation::setTrackStartListener (spTrackEntry* entry, const StartListener& listener) {
|
|
|
getListeners(entry)->startListener = listener;
|
|
|
}
|
|
|
+
|
|
|
+void SkeletonAnimation::setTrackInterruptListener (spTrackEntry* entry, const InterruptListener& listener) {
|
|
|
+ getListeners(entry)->interruptListener = listener;
|
|
|
+}
|
|
|
|
|
|
void SkeletonAnimation::setTrackEndListener (spTrackEntry* entry, const EndListener& listener) {
|
|
|
getListeners(entry)->endListener = listener;
|
|
|
}
|
|
|
+
|
|
|
+void SkeletonAnimation::setTrackDisposeListener (spTrackEntry* entry, const DisposeListener& listener) {
|
|
|
+ getListeners(entry)->disposeListener = listener;
|
|
|
+}
|
|
|
|
|
|
void SkeletonAnimation::setTrackCompleteListener (spTrackEntry* entry, const CompleteListener& listener) {
|
|
|
getListeners(entry)->completeListener = listener;
|