浏览代码

[cpp] Copy EventQueueEntry instead of taking pointer to reallocatable instance. Closes #1827.

Mario Zechner 4 年之前
父节点
当前提交
6d384cd75c
共有 1 个文件被更改,包括 15 次插入15 次删除
  1. 15 15
      spine-cpp/spine-cpp/src/spine/AnimationState.cpp

+ 15 - 15
spine-cpp/spine-cpp/src/spine/AnimationState.cpp

@@ -265,23 +265,23 @@ void EventQueue::drain() {
 
 	// Don't cache _eventQueueEntries.size() so callbacks can queue their own events (eg, call setAnimation in AnimationState_Complete).
 	for (size_t i = 0; i < _eventQueueEntries.size(); ++i) {
-		EventQueueEntry *queueEntry = &_eventQueueEntries[i];
-		TrackEntry *trackEntry = queueEntry->_entry;
+		EventQueueEntry queueEntry = _eventQueueEntries[i];
+		TrackEntry *trackEntry = queueEntry._entry;
 
-		switch (queueEntry->_type) {
+		switch (queueEntry._type) {
 			case EventType_Start:
 			case EventType_Interrupt:
 			case EventType_Complete:
-				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);
+				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 (!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);
+				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);
 				/* Fall through. */
 			case EventType_Dispose:
 				if (!trackEntry->_listenerObject) trackEntry->_listener(&state, EventType_Dispose, trackEntry, NULL);
@@ -294,10 +294,10 @@ void EventQueue::drain() {
 				break;
 			case EventType_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);
+					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;
 		}
 	}