Fix attached particle spawners far from spawn (#6479)

* Fix attached particle spawners far from spawn

When far from spawn, attached particle spawners
did not spawn particles.
This commit is contained in:
raymoo 2017-09-30 06:23:52 -07:00 committed by Loïc Blot
parent be10c0893e
commit 8c16f18fdb

@ -317,6 +317,11 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
v3f ppos = m_player->getPosition() / BS; v3f ppos = m_player->getPosition() / BS;
v3f pos = random_v3f(m_minpos, m_maxpos); v3f pos = random_v3f(m_minpos, m_maxpos);
// Need to apply this first or the following check
// will be wrong for attached spawners
if (is_attached)
pos += attached_pos;
if (pos.getDistanceFrom(ppos) <= radius) { if (pos.getDistanceFrom(ppos) <= radius) {
v3f vel = random_v3f(m_minvel, m_maxvel); v3f vel = random_v3f(m_minvel, m_maxvel);
v3f acc = random_v3f(m_minacc, m_maxacc); v3f acc = random_v3f(m_minacc, m_maxacc);
@ -324,7 +329,6 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
if (is_attached) { if (is_attached) {
// Apply attachment yaw and position // Apply attachment yaw and position
pos.rotateXZBy(attached_yaw); pos.rotateXZBy(attached_yaw);
pos += attached_pos;
vel.rotateXZBy(attached_yaw); vel.rotateXZBy(attached_yaw);
acc.rotateXZBy(attached_yaw); acc.rotateXZBy(attached_yaw);
} }
@ -377,6 +381,11 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
v3f ppos = m_player->getPosition() / BS; v3f ppos = m_player->getPosition() / BS;
v3f pos = random_v3f(m_minpos, m_maxpos); v3f pos = random_v3f(m_minpos, m_maxpos);
// Need to apply this first or the following check
// will be wrong for attached spawners
if (is_attached)
pos += attached_pos;
if (pos.getDistanceFrom(ppos) <= radius) { if (pos.getDistanceFrom(ppos) <= radius) {
v3f vel = random_v3f(m_minvel, m_maxvel); v3f vel = random_v3f(m_minvel, m_maxvel);
v3f acc = random_v3f(m_minacc, m_maxacc); v3f acc = random_v3f(m_minacc, m_maxacc);
@ -384,7 +393,6 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
if (is_attached) { if (is_attached) {
// Apply attachment yaw and position // Apply attachment yaw and position
pos.rotateXZBy(attached_yaw); pos.rotateXZBy(attached_yaw);
pos += attached_pos;
vel.rotateXZBy(attached_yaw); vel.rotateXZBy(attached_yaw);
acc.rotateXZBy(attached_yaw); acc.rotateXZBy(attached_yaw);
} }