From a674fef72eb6f8bc1ba25ef6c7aef0193a0e59dc Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 16 Feb 2013 01:25:53 +0300 Subject: Fix crash with particle effects with animation/rotation without emitter. This bug first was detected in brazilian tmw server. --- src/simpleanimation.cpp | 13 ++++++++++--- src/simpleanimation.h | 3 +++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/simpleanimation.cpp b/src/simpleanimation.cpp index 3e5b40817..67c697348 100644 --- a/src/simpleanimation.cpp +++ b/src/simpleanimation.cpp @@ -40,7 +40,8 @@ SimpleAnimation::SimpleAnimation(Animation *const animation) : mAnimationTime(0), mAnimationPhase(0), mCurrentFrame(&mAnimation->mFrames[0]), - mInitialized(true) + mInitialized(true), + mImageSet(nullptr) { } @@ -50,7 +51,8 @@ SimpleAnimation::SimpleAnimation(const XmlNodePtr animationNode, mAnimationTime(0), mAnimationPhase(0), mCurrentFrame(nullptr), - mInitialized(false) + mInitialized(false), + mImageSet(nullptr) { initializeAnimation(animationNode, dyePalettes); if (mAnimation) @@ -63,6 +65,11 @@ SimpleAnimation::~SimpleAnimation() { delete mAnimation; mAnimation = nullptr; + if (mImageSet) + { + mImageSet->decRef(); + mImageSet = nullptr; + } } bool SimpleAnimation::draw(Graphics *const graphics, @@ -231,6 +238,6 @@ void SimpleAnimation::initializeAnimation(const XmlNodePtr animationNode, } } - imageset->decRef(); +// imageset->decRef(); mInitialized = true; } diff --git a/src/simpleanimation.h b/src/simpleanimation.h index 131cd4c07..e30455a04 100644 --- a/src/simpleanimation.h +++ b/src/simpleanimation.h @@ -30,6 +30,7 @@ class Animation; class Graphics; class Image; +class ImageSet; struct Frame; @@ -91,6 +92,8 @@ class SimpleAnimation final /** Tell whether the animation is ready */ bool mInitialized; + + ImageSet *mImageSet; }; #endif -- cgit v1.2.3-70-g09d2