[cpp] Fixed SkeletonJson deform timeline parsing. Fxied leak in EventQueue.

This commit is contained in:
badlogic 2018-02-22 17:13:45 +01:00
parent 6e8f0eaa27
commit 425b2936d1
3 changed files with 10 additions and 13 deletions

View File

@ -255,14 +255,14 @@ namespace Spine {
friend class AnimationState;
private:
Vector<EventQueueEntry*> _eventQueueEntries;
Vector<EventQueueEntry> _eventQueueEntries;
AnimationState& _state;
Pool<TrackEntry>& _trackEntryPool;
bool _drainDisabled;
static EventQueue* newEventQueue(AnimationState& state, Pool<TrackEntry>& trackEntryPool);
static EventQueueEntry* newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event = NULL);
static EventQueueEntry newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event = NULL);
EventQueue(AnimationState& state, Pool<TrackEntry>& trackEntryPool);

View File

@ -214,15 +214,14 @@ namespace Spine {
return new (__FILE__, __LINE__) EventQueue(state, trackEntryPool);
}
EventQueueEntry* EventQueue::newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event) {
return new (__FILE__, __LINE__) EventQueueEntry(eventType, entry, event);
EventQueueEntry EventQueue::newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event) {
return EventQueueEntry(eventType, entry, event);
}
EventQueue::EventQueue(AnimationState& state, Pool<TrackEntry>& trackEntryPool) : _state(state), _trackEntryPool(trackEntryPool), _drainDisabled(false) {
}
EventQueue::~EventQueue() {
ContainerUtil::cleanUpVectorOfPointers(_eventQueueEntries);
}
void EventQueue::start(TrackEntry* entry) {
@ -263,7 +262,7 @@ namespace Spine {
// Don't cache _eventQueueEntries.size() so callbacks can queue their own events (eg, call setAnimation in AnimationState_Complete).
for (int i = 0; i < _eventQueueEntries.size(); ++i) {
EventQueueEntry* queueEntry = _eventQueueEntries[i];
EventQueueEntry* queueEntry = &_eventQueueEntries[i];
TrackEntry* trackEntry = queueEntry->_entry;
switch (queueEntry->_type) {

View File

@ -1038,11 +1038,6 @@ namespace Spine {
weighted = attachment->_bones.size() != 0;
Vector<float>& vertices = attachment->_vertices;
deformLength = weighted ? static_cast<int>(vertices.size()) / 3 * 2 : static_cast<int>(vertices.size());
Vector<float> tempDeform;
tempDeform.ensureCapacity(deformLength);
for (int i = 0; i < deformLength; ++i) {
tempDeform.add(0);
}
timeline = new (__FILE__, __LINE__) DeformTimeline(timelineMap->_size);
@ -1054,7 +1049,10 @@ namespace Spine {
Vector<float> deform;
if (!vertices) {
if (weighted) {
deform = tempDeform;
deform.setSize(deformLength);
for (int i = 0; i < deformLength; ++i) {
deform[i] = 0;
}
}
else {
deform = attachment->_vertices;
@ -1063,7 +1061,7 @@ namespace Spine {
else {
int v, start = Json::getInt(valueMap, "offset", 0);
Json* vertex;
deform = tempDeform;
deform.setSize(deformLength);
if (_scale == 1) {
for (vertex = vertices->_child, v = start; vertex; vertex = vertex->_next, ++v) {
deform[v] = vertex->_valueFloat;