summaryrefslogtreecommitdiff
path: root/src/being.cpp
diff options
context:
space:
mode:
authorFate <fate-tmw@googlemail.com>2008-12-09 09:42:59 -0700
committerFate <fate-tmw@googlemail.com>2008-12-09 09:42:59 -0700
commit5de95ae6a741ac8549a9e51be4a3872e91764d24 (patch)
treecce603d128c9ccf7c53eced54a424a3a66e27bbc /src/being.cpp
parentcaee40df5da03eb2db6ed8d528f1561ef9bcbd34 (diff)
downloadmana-client-5de95ae6a741ac8549a9e51be4a3872e91764d24.tar.gz
mana-client-5de95ae6a741ac8549a9e51be4a3872e91764d24.tar.bz2
mana-client-5de95ae6a741ac8549a9e51be4a3872e91764d24.tar.xz
mana-client-5de95ae6a741ac8549a9e51be4a3872e91764d24.zip
Defer re-adding of particles to next call to Being::logic() to avoid crash
Diffstat (limited to 'src/being.cpp')
-rw-r--r--src/being.cpp16
1 files changed, 15 insertions, 1 deletions
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<int>::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