summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-05-19 20:15:51 +0300
committerAndrei Karas <akaras@inbox.ru>2016-05-19 20:15:51 +0300
commit2cf3c1e9938d64fe7b2cf1cffca0ec8b12970e80 (patch)
tree8d4599be8c7883213d9da4f31d2a6bdda183f680
parentd07f27c128e946b49971f4d3d9e6dfec81ce2b8b (diff)
downloadmanaverse-2cf3c1e9938d64fe7b2cf1cffca0ec8b12970e80.tar.gz
manaverse-2cf3c1e9938d64fe7b2cf1cffca0ec8b12970e80.tar.bz2
manaverse-2cf3c1e9938d64fe7b2cf1cffca0ec8b12970e80.tar.xz
manaverse-2cf3c1e9938d64fe7b2cf1cffca0ec8b12970e80.zip
Move child particles only if current particle changed position.
-rw-r--r--src/particle/particle.cpp42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/particle/particle.cpp b/src/particle/particle.cpp
index b28e3a819..728433ae9 100644
--- a/src/particle/particle.cpp
+++ b/src/particle/particle.cpp
@@ -237,11 +237,19 @@ bool Particle::update() restrict2
{
if (mAlive == AliveStatus::ALIVE)
{
- const Vector oldPos = mPos;
-
if (mLifetimeLeft == 0)
{
mAlive = AliveStatus::DEAD_TIMEOUT;
+
+ if (mChildParticles.empty())
+ {
+ if (mAlive != AliveStatus::ALIVE &&
+ mAutoDelete)
+ {
+ return false;
+ }
+ return true;
+ }
}
else
{
@@ -289,24 +297,26 @@ bool Particle::update() restrict2
}
mImage = mAnimation->getCurrentImage();
}
+ const Vector oldPos = mPos;
+
updateSelf();
- }
- const Vector change = mPos - oldPos;
- if (mChildParticles.empty())
- {
- if (mAlive != AliveStatus::ALIVE &&
- mAutoDelete)
+ const Vector change = mPos - oldPos;
+ if (mChildParticles.empty())
{
- return false;
+ if (mAlive != AliveStatus::ALIVE &&
+ mAutoDelete)
+ {
+ return false;
+ }
+ return true;
+ }
+ for (ParticleIterator p = mChildMoveParticles.begin(),
+ fp2 = mChildMoveParticles.end(); p != fp2; )
+ {
+ // move particle with its parent if desired
+ (*p)->moveBy(change);
}
- return true;
- }
- for (ParticleIterator p = mChildMoveParticles.begin(),
- fp2 = mChildMoveParticles.end(); p != fp2; )
- {
- // move particle with its parent if desired
- (*p)->moveBy(change);
}
// Update child particles