mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-04 14:24:53 +08:00
[cpp] Updated CHANGELOG and clean-up.
This commit is contained in:
parent
4ac0a86193
commit
962aaa1c9f
@ -18,6 +18,7 @@
|
||||
|
||||
## C++
|
||||
* ** Additions **
|
||||
* `AnimationState` and `TrackEntry` now also accept a subclass of `AnimationStateListenerObject` as a listener for animation events in the overloaded `setListener()` method.
|
||||
|
||||
* **Breaking changes**
|
||||
|
||||
|
||||
@ -60,11 +60,10 @@ namespace spine {
|
||||
typedef void (*AnimationStateListener) (AnimationState* state, EventType type, TrackEntry* entry, Event* event);
|
||||
|
||||
/// Abstract class to inherit from to create a callback object
|
||||
class SP_API AnimationStateListenerClass
|
||||
{
|
||||
class SP_API AnimationStateListenerObject {
|
||||
public:
|
||||
AnimationStateListenerClass() = default;
|
||||
virtual ~AnimationStateListenerClass() = default;
|
||||
AnimationStateListenerObject() = default;
|
||||
virtual ~AnimationStateListenerObject() = default;
|
||||
public:
|
||||
/// The callback function to be called
|
||||
virtual void callback(AnimationState* state, EventType type, TrackEntry* entry, Event* event) = 0;
|
||||
@ -252,7 +251,7 @@ namespace spine {
|
||||
|
||||
void setListener(AnimationStateListener listener);
|
||||
|
||||
void setListener(AnimationStateListenerClass* listener);
|
||||
void setListener(AnimationStateListenerObject* listener);
|
||||
|
||||
private:
|
||||
Animation* _animation;
|
||||
@ -272,7 +271,7 @@ namespace spine {
|
||||
Vector<TrackEntry*> _timelineHoldMix;
|
||||
Vector<float> _timelinesRotation;
|
||||
AnimationStateListener _listener;
|
||||
AnimationStateListenerClass* _listenerObj;
|
||||
AnimationStateListenerObject* _listenerObject;
|
||||
|
||||
void reset();
|
||||
};
|
||||
@ -410,7 +409,7 @@ namespace spine {
|
||||
void setTimeScale(float inValue);
|
||||
|
||||
void setListener(AnimationStateListener listener);
|
||||
void setListener(AnimationStateListenerClass* listener);
|
||||
void setListener(AnimationStateListenerObject* listener);
|
||||
|
||||
void disableQueue();
|
||||
void enableQueue();
|
||||
@ -428,7 +427,7 @@ namespace spine {
|
||||
bool _animationsChanged;
|
||||
|
||||
AnimationStateListener _listener;
|
||||
AnimationStateListenerClass* _listenerObj;
|
||||
AnimationStateListenerObject* _listenerObject;
|
||||
|
||||
float _timeScale;
|
||||
|
||||
|
||||
@ -59,7 +59,7 @@ TrackEntry::TrackEntry() : _animation(NULL), _next(NULL), _mixingFrom(NULL), _mi
|
||||
_animationEnd(0), _animationLast(0), _nextAnimationLast(0), _delay(0), _trackTime(0),
|
||||
_trackLast(0), _nextTrackLast(0), _trackEnd(0), _timeScale(1.0f), _alpha(0), _mixTime(0),
|
||||
_mixDuration(0), _interruptAlpha(0), _totalAlpha(0), _mixBlend(MixBlend_Replace),
|
||||
_listener(dummyOnAnimationEventFunc), _listenerObj(NULL) {
|
||||
_listener(dummyOnAnimationEventFunc), _listenerObject(NULL) {
|
||||
}
|
||||
|
||||
TrackEntry::~TrackEntry() { }
|
||||
@ -164,12 +164,12 @@ void TrackEntry::resetRotationDirections() {
|
||||
|
||||
void TrackEntry::setListener(AnimationStateListener inValue) {
|
||||
_listener = inValue;
|
||||
_listenerObj = NULL;
|
||||
_listenerObject = NULL;
|
||||
}
|
||||
|
||||
void TrackEntry::setListener(AnimationStateListenerClass* inValue) {
|
||||
void TrackEntry::setListener(AnimationStateListenerObject* inValue) {
|
||||
_listener = dummyOnAnimationEventFunc;
|
||||
_listenerObj = inValue;
|
||||
_listenerObject = inValue;
|
||||
}
|
||||
|
||||
void TrackEntry::reset() {
|
||||
@ -185,7 +185,7 @@ void TrackEntry::reset() {
|
||||
_timelinesRotation.clear();
|
||||
|
||||
_listener = dummyOnAnimationEventFunc;
|
||||
_listenerObj = NULL;
|
||||
_listenerObject = NULL;
|
||||
}
|
||||
|
||||
EventQueueEntry::EventQueueEntry(EventType eventType, TrackEntry *trackEntry, Event *event) :
|
||||
@ -255,48 +255,32 @@ void EventQueue::drain() {
|
||||
case EventType_Start:
|
||||
case EventType_Interrupt:
|
||||
case EventType_Complete:
|
||||
if (NULL == trackEntry->_listenerObj)
|
||||
trackEntry->_listener(&state, queueEntry->_type, trackEntry, NULL);
|
||||
else
|
||||
trackEntry->_listenerObj->callback(&state, queueEntry->_type, trackEntry, NULL);
|
||||
if (NULL == state._listenerObj)
|
||||
state._listener(&state, queueEntry->_type, trackEntry, NULL);
|
||||
else
|
||||
state._listenerObj->callback(&state, queueEntry->_type, trackEntry, NULL);
|
||||
if (!trackEntry->_listenerObject) trackEntry->_listener(&state, queueEntry->_type, trackEntry, NULL);
|
||||
else trackEntry->_listenerObject->callback(&state, queueEntry->_type, trackEntry, NULL);
|
||||
if(!state._listenerObject) state._listener(&state, queueEntry->_type, trackEntry, NULL);
|
||||
else state._listenerObject->callback(&state, queueEntry->_type, trackEntry, NULL);
|
||||
break;
|
||||
case EventType_End:
|
||||
if (NULL == trackEntry->_listenerObj)
|
||||
trackEntry->_listener(&state, queueEntry->_type, trackEntry, NULL);
|
||||
else
|
||||
trackEntry->_listenerObj->callback(&state, queueEntry->_type, trackEntry, NULL);
|
||||
if (NULL == state._listenerObj)
|
||||
state._listener(&state, queueEntry->_type, trackEntry, NULL);
|
||||
else
|
||||
state._listenerObj->callback(&state, queueEntry->_type, trackEntry, NULL);
|
||||
if (!trackEntry->_listenerObject) trackEntry->_listener(&state, queueEntry->_type, trackEntry, NULL);
|
||||
else trackEntry->_listenerObject->callback(&state, queueEntry->_type, trackEntry, NULL);
|
||||
if (!state._listenerObject) state._listener(&state, queueEntry->_type, trackEntry, NULL);
|
||||
else state._listenerObject->callback(&state, queueEntry->_type, trackEntry, NULL);
|
||||
/* Yes, we want to fall through here */
|
||||
case EventType_Dispose:
|
||||
|
||||
if (NULL == trackEntry->_listenerObj)
|
||||
trackEntry->_listener(&state, EventType_Dispose, trackEntry, NULL);
|
||||
else
|
||||
trackEntry->_listenerObj->callback(&state, EventType_Dispose, trackEntry, NULL);
|
||||
if (NULL == state._listenerObj)
|
||||
state._listener(&state, EventType_Dispose, trackEntry, NULL);
|
||||
else
|
||||
state._listenerObj->callback(&state, EventType_Dispose, trackEntry, NULL);
|
||||
if (!trackEntry->_listenerObject) trackEntry->_listener(&state, EventType_Dispose, trackEntry, NULL);
|
||||
else trackEntry->_listenerObject->callback(&state, EventType_Dispose, trackEntry, NULL);
|
||||
if (!state._listenerObject) state._listener(&state, EventType_Dispose, trackEntry, NULL);
|
||||
else state._listenerObject->callback(&state, EventType_Dispose, trackEntry, NULL);
|
||||
|
||||
trackEntry->reset();
|
||||
_trackEntryPool.free(trackEntry);
|
||||
break;
|
||||
case EventType_Event:
|
||||
if (NULL == trackEntry->_listenerObj)
|
||||
trackEntry->_listener(&state, queueEntry->_type, trackEntry, queueEntry->_event);
|
||||
else
|
||||
trackEntry->_listenerObj->callback(&state, queueEntry->_type, trackEntry, queueEntry->_event);
|
||||
if (NULL == state._listenerObj)
|
||||
state._listener(&state, queueEntry->_type, trackEntry, queueEntry->_event);
|
||||
else
|
||||
state._listenerObj->callback(&state, queueEntry->_type, trackEntry, queueEntry->_event);
|
||||
if (!trackEntry->_listenerObject) trackEntry->_listener(&state, queueEntry->_type, trackEntry, queueEntry->_event);
|
||||
else trackEntry->_listenerObject->callback(&state, queueEntry->_type, trackEntry, queueEntry->_event);
|
||||
if (!state._listenerObject) state._listener(&state, queueEntry->_type, trackEntry, queueEntry->_event);
|
||||
else state._listenerObject->callback(&state, queueEntry->_type, trackEntry, queueEntry->_event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -316,7 +300,7 @@ AnimationState::AnimationState(AnimationStateData *data) :
|
||||
_queue(EventQueue::newEventQueue(*this, _trackEntryPool)),
|
||||
_animationsChanged(false),
|
||||
_listener(dummyOnAnimationEventFunc),
|
||||
_listenerObj(NULL),
|
||||
_listenerObject(NULL),
|
||||
_timeScale(1) {
|
||||
}
|
||||
|
||||
@ -652,12 +636,12 @@ void AnimationState::setTimeScale(float inValue) {
|
||||
|
||||
void AnimationState::setListener(AnimationStateListener inValue) {
|
||||
_listener = inValue;
|
||||
_listenerObj = NULL;
|
||||
_listenerObject = NULL;
|
||||
}
|
||||
|
||||
void AnimationState::setListener(AnimationStateListenerClass* inValue) {
|
||||
void AnimationState::setListener(AnimationStateListenerObject* inValue) {
|
||||
_listener = dummyOnAnimationEventFunc;
|
||||
_listenerObj = inValue;
|
||||
_listenerObject = inValue;
|
||||
}
|
||||
|
||||
void AnimationState::disableQueue() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user