mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-14 19:11:36 +08:00
[cpp] Fixed SkeletonJson deform timeline parsing. Fxied leak in EventQueue.
This commit is contained in:
parent
6e8f0eaa27
commit
425b2936d1
@ -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);
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user