]> git.lizzy.rs Git - minetest.git/commitdiff
CollisionMoveSimple: Collide with 'ignore' nodes
authorparamat <paramat@users.noreply.github.com>
Sat, 24 Feb 2018 15:57:34 +0000 (15:57 +0000)
committerparamat <mat.gregory@virginmedia.com>
Mon, 26 Feb 2018 17:21:45 +0000 (17:21 +0000)
src/collision.cpp

index 6edae1efce2f08c19ab4a5d42e271d50473149f7..24d22e8252ab44a3d1a75d40d079bfd936c85b11 100644 (file)
@@ -279,7 +279,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
                bool is_position_valid;
                MapNode n = map->getNodeNoEx(p, &is_position_valid);
 
-               if (is_position_valid) {
+               if (is_position_valid && n.getContent() != CONTENT_IGNORE) {
                        // Object collides into walkable nodes
 
                        any_position_valid = true;
@@ -327,7 +327,8 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
                                cinfo.emplace_back(false, false, n_bouncy_value, p, box);
                        }
                } else {
-                       // Collide with unloaded nodes
+                       // Collide with unloaded nodes (position invalid) and loaded
+                       // CONTENT_IGNORE nodes (position valid)
                        aabb3f box = getNodeBox(p, BS);
                        cinfo.emplace_back(true, false, 0, p, box);
                }
@@ -335,6 +336,8 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
 
        // Do not move if world has not loaded yet, since custom node boxes
        // are not available for collision detection.
+       // This also intentionally occurs in the case of the object being positioned
+       // solely on loaded CONTENT_IGNORE nodes, no matter where they come from.
        if (!any_position_valid) {
                *speed_f = v3f(0, 0, 0);
                return result;