From 5de95ae6a741ac8549a9e51be4a3872e91764d24 Mon Sep 17 00:00:00 2001 From: Fate Date: Tue, 9 Dec 2008 09:42:59 -0700 Subject: Defer re-adding of particles to next call to Being::logic() to avoid crash --- src/being.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/being.cpp') diff --git a/src/being.cpp b/src/being.cpp index 2be72360..68b1a791 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -78,7 +78,8 @@ Being::Being(int id, int job, Map *map): mSpriteIDs(VECTOREND_SPRITE, 0), mSpriteColors(VECTOREND_SPRITE, ""), mStatusParticleEffects(&mStunParticleEffects, false), - mChildParticleEffects(&mStatusParticleEffects, false) + mChildParticleEffects(&mStatusParticleEffects, false), + mMustResetParticles(false) { setMap(map); @@ -216,6 +217,7 @@ void Being::setMap(Map *map) // Clear particle effect list because child particles became invalid mChildParticleEffects.clear(); + mMustResetParticles = true; // Reset status particles on next redraw } void Being::controlParticle(Particle *particle) @@ -390,9 +392,21 @@ void Being::logic() } } + // Restart status/particle effects, if needed + if (mMustResetParticles) { + mMustResetParticles = false; + for (std::set::iterator it = mStatusEffects.begin(); + it != mStatusEffects.end(); it++) { + const StatusEffect *effect = StatusEffect::getStatusEffect(*it, true); + if (effect && effect->particleEffectIsPersistent()) + updateStatusEffect(*it, true); + } + } + // Update particle effects mChildParticleEffects.setPositions((float) mPx + 16.0f, (float) mPy + 32.0f); + } void Being::draw(Graphics *graphics, int offsetX, int offsetY) const -- cgit v1.2.3-70-g09d2