diff --git a/spine-cpp/spine-cpp/include/spine/AnimationState.h b/spine-cpp/spine-cpp/include/spine/AnimationState.h index e4551f852..1145af569 100644 --- a/spine-cpp/spine-cpp/include/spine/AnimationState.h +++ b/spine-cpp/spine-cpp/include/spine/AnimationState.h @@ -393,7 +393,7 @@ namespace spine { Vector _events; EventQueue* _queue; - Vector _propertyIDs; + HashMap _propertyIDs; bool _animationsChanged; AnimationStateListener _listener; diff --git a/spine-cpp/spine-cpp/include/spine/Extension.h b/spine-cpp/spine-cpp/include/spine/Extension.h index c442ca98d..c9eb16f5e 100644 --- a/spine-cpp/spine-cpp/include/spine/Extension.h +++ b/spine-cpp/spine-cpp/include/spine/Extension.h @@ -30,6 +30,7 @@ #ifndef Spine_Extension_h #define Spine_Extension_h + #include #include diff --git a/spine-cpp/spine-cpp/include/spine/HashMap.h b/spine-cpp/spine-cpp/include/spine/HashMap.h index 6ab4f0e1a..3ec2f5d24 100755 --- a/spine-cpp/spine-cpp/include/spine/HashMap.h +++ b/spine-cpp/spine-cpp/include/spine/HashMap.h @@ -89,11 +89,17 @@ public: } ~HashMap() { + clear(); + } + + void clear() { for (Entry *entry = _head; entry != NULL;) { Entry* next = entry->next; delete entry; entry = next; } + _head = NULL; + _size = 0; } size_t size() { diff --git a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp index d5142a9d4..afa1dcab2 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp +++ b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp @@ -976,7 +976,7 @@ void AnimationState::computeHold(TrackEntry *entry) { if (to != NULL && to->_holdPrevious) { for (size_t i = 0; i < timelinesCount; i++) { int id = timelines[i]->getPropertyId(); - if (!_propertyIDs.contains(id)) _propertyIDs.add(id); + if (!_propertyIDs.containsKey(id)) _propertyIDs.put(id, true); timelineMode[i] = Hold; } return; @@ -988,10 +988,10 @@ void AnimationState::computeHold(TrackEntry *entry) { for (; i < timelinesCount; ++i) { Timeline *timeline = timelines[i]; int id = timeline->getPropertyId(); - if (_propertyIDs.contains(id)) { + if (_propertyIDs.containsKey(id)) { timelineMode[i] = Subsequent; } else { - _propertyIDs.add(id); + _propertyIDs.put(id, true); if (to == NULL || timeline->getRTTI().isExactly(AttachmentTimeline::rtti) || timeline->getRTTI().isExactly(DrawOrderTimeline::rtti) || @@ -1022,8 +1022,8 @@ void AnimationState::computeNotLast(TrackEntry *entry) { for (size_t i = 0; i < timelinesCount; i++) { if (timelines[i]->getRTTI().isExactly(AttachmentTimeline::rtti)) { AttachmentTimeline *timeline = static_cast(timelines[i]); - if (!_propertyIDs.contains(timeline->getSlotIndex())) - _propertyIDs.add(timeline->getSlotIndex()); + if (!_propertyIDs.containsKey(timeline->getSlotIndex())) + _propertyIDs.put(timeline->getSlotIndex(), true); else timelineMode[i] |= NotLast; }