]> git.lizzy.rs Git - minetest.git/commitdiff
Fix attached particle spawners far from spawn (#6479)
authorraymoo <raymoo@users.noreply.github.com>
Sat, 30 Sep 2017 13:23:52 +0000 (06:23 -0700)
committerSmallJoker <mk939@ymail.com>
Sun, 3 Jun 2018 15:31:59 +0000 (17:31 +0200)
* Fix attached particle spawners far from spawn

When far from spawn, attached particle spawners
did not spawn particles.

src/particles.cpp

index e89e182e685cb99a11982657177750a72514e1fe..0caa4f7969afcc672ec3d288653b5eb5c2d445ec 100644 (file)
@@ -326,6 +326,11 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
                                        v3f ppos = m_player->getPosition() / BS;
                                        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) {
                                                v3f vel = random_v3f(m_minvel, m_maxvel);
                                                v3f acc = random_v3f(m_minacc, m_maxacc);
@@ -333,7 +338,6 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
                                                if (is_attached) {
                                                        // Apply attachment yaw and position
                                                        pos.rotateXZBy(attached_yaw);
-                                                       pos += attached_pos;
                                                        vel.rotateXZBy(attached_yaw);
                                                        acc.rotateXZBy(attached_yaw);
                                                }
@@ -387,6 +391,11 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
                                v3f ppos = m_player->getPosition() / BS;
                                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) {
                                        v3f vel = random_v3f(m_minvel, m_maxvel);
                                        v3f acc = random_v3f(m_minacc, m_maxacc);
@@ -394,7 +403,6 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
                                        if (is_attached) {
                                                // Apply attachment yaw and position
                                                pos.rotateXZBy(attached_yaw);
-                                               pos += attached_pos;
                                                vel.rotateXZBy(attached_yaw);
                                                acc.rotateXZBy(attached_yaw);
                                        }