From 9bed800466d18f533a23b0b723c8e24ea6cf8d96 Mon Sep 17 00:00:00 2001 From: Stephen Gowen Date: Wed, 29 Nov 2017 18:30:22 -0500 Subject: [PATCH] wip, just gotta implement the AnimationState class itself now. --- .../spine-cpp/include/spine/AnimationState.h | 8 ++- .../spine-cpp/src/spine/AnimationState.cpp | 55 ++++++++++--------- 2 files changed, 36 insertions(+), 27 deletions(-) diff --git a/spine-cpp/spine-cpp/include/spine/AnimationState.h b/spine-cpp/spine-cpp/include/spine/AnimationState.h index 4408dd4c6..1b893a94b 100644 --- a/spine-cpp/spine-cpp/include/spine/AnimationState.h +++ b/spine-cpp/spine-cpp/include/spine/AnimationState.h @@ -52,11 +52,13 @@ namespace Spine class Animation; class Event; - typedef void (*OnAnimationEventFunc) (AnimationState* state, EventType type, TrackEntry* entry, Event* event); + typedef void (*OnAnimationEventFunc) (AnimationState& state, EventType type, TrackEntry* entry, Event* event); /// State for the playback of an animation class TrackEntry { + friend class EventQueue; + public: TrackEntry(); @@ -218,7 +220,7 @@ namespace Spine bool _loop; float _eventThreshold, _attachmentThreshold, _drawOrderThreshold; float _animationStart, _animationEnd, _animationLast, _nextAnimationLast; - float _delay, _trackTime, _trackLast, _nextTrackLast, _trackEnd, _timeScale = 1.0f; + float _delay, _trackTime, _trackLast, _nextTrackLast, _trackEnd, _timeScale; float _alpha, _mixTime, _mixDuration, _interruptAlpha, _totalAlpha; Vector _timelineData; Vector _timelineDipMix; @@ -288,6 +290,8 @@ namespace Spine friend class EventQueue; public: + AnimationState(); + void setOnAnimationEventFunc(OnAnimationEventFunc inValue); private: diff --git a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp index fedf61748..16954ade4 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp +++ b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp @@ -39,7 +39,12 @@ namespace Spine { - TrackEntry::TrackEntry() + void dummyOnAnimationEventFunc(AnimationState& state, EventType type, TrackEntry* entry, Event* event = NULL) + { + // Empty + } + + TrackEntry::TrackEntry() : _animation(NULL), _next(NULL), _mixingFrom(NULL), _trackIndex(0), _loop(false), _eventThreshold(0), _attachmentThreshold(0), _drawOrderThreshold(0), _animationStart(0), _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), _onAnimationEventFunc(dummyOnAnimationEventFunc) { // Empty } @@ -269,30 +274,25 @@ namespace Spine switch (queueEntry->_type) { -// case EventType_Start: -// trackEntry.onStart(); -// state.onStart(trackEntry); -// break; -// case EventType_Interrupt: -// trackEntry.onInterrupt(); -// state.onInterrupt(trackEntry); -// break; -// case EventType_End: -// trackEntry.onEnd(); -// state.onEnd(trackEntry); -// case EventType_Dispose: -// trackEntry.onDispose(); -// state.onDispose(trackEntry); -// trackEntryPool.Free(trackEntry); // Pooling -// break; -// case EventType_Complete: -// trackEntry.onComplete(); -// state.onComplete(trackEntry); -// break; -// case EventType_Event: -// trackEntry.onEvent(queueEntry.e); -// state.onEvent(trackEntry, queueEntry.e); -// break; + case EventType_Start: + case EventType_Interrupt: + case EventType_Complete: + trackEntry->_onAnimationEventFunc(state, queueEntry->_type, trackEntry, NULL); + state._onAnimationEventFunc(state, queueEntry->_type, trackEntry, NULL); + break; + case EventType_End: + trackEntry->_onAnimationEventFunc(state, queueEntry->_type, trackEntry, NULL); + state._onAnimationEventFunc(state, queueEntry->_type, trackEntry, NULL); + /* Yes, we want to fall through here */ + case EventType_Dispose: + trackEntry->_onAnimationEventFunc(state, EventType_Dispose, trackEntry, NULL); + state._onAnimationEventFunc(state, EventType_Dispose, trackEntry, NULL); + _trackEntryPool.free(trackEntry); + break; + case EventType_Event: + trackEntry->_onAnimationEventFunc(state, queueEntry->_type, trackEntry, queueEntry->_event); + state._onAnimationEventFunc(state, queueEntry->_type, trackEntry, queueEntry->_event); + break; } } _eventQueueEntries.clear(); @@ -310,6 +310,11 @@ namespace Spine const int AnimationState::Dip = 2; const int AnimationState::DipMix = 3; + AnimationState::AnimationState() : _onAnimationEventFunc(dummyOnAnimationEventFunc) + { + // Empty + } + void AnimationState::setOnAnimationEventFunc(OnAnimationEventFunc inValue) { _onAnimationEventFunc = inValue;