Falling sand and gravel
[oweals/minetest.git] / src / collision.cpp
index 01d5462847134f952626b4ea315dc83910b02286..674cf4ed4881224f9a282667120db0c05fa44e2b 100644 (file)
@@ -20,9 +20,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "collision.h"
 #include "mapblock.h"
 #include "map.h"
+#include "nodedef.h"
+#include "gamedef.h"
 
-collisionMoveResult collisionMoveSimple(Map *map, f32 pos_max_d,
-               const core::aabbox3d<f32> &box_0,
+collisionMoveResult collisionMoveSimple(Map *map, IGameDef *gamedef,
+               f32 pos_max_d, const core::aabbox3d<f32> &box_0,
                f32 dtime, v3f &pos_f, v3f &speed_f)
 {
        collisionMoveResult result;
@@ -78,7 +80,8 @@ collisionMoveResult collisionMoveSimple(Map *map, f32 pos_max_d,
        {
                try{
                        // Object collides into walkable nodes
-                       if(content_walkable(map->getNode(v3s16(x,y,z)).d) == false)
+                       MapNode n = map->getNode(v3s16(x,y,z));
+                       if(gamedef->getNodeDefManager()->get(n).walkable == false)
                                continue;
                }
                catch(InvalidPositionException &e)
@@ -182,8 +185,8 @@ collisionMoveResult collisionMoveSimple(Map *map, f32 pos_max_d,
        return result;
 }
 
-collisionMoveResult collisionMovePrecise(Map *map, f32 pos_max_d,
-               const core::aabbox3d<f32> &box_0,
+collisionMoveResult collisionMovePrecise(Map *map, IGameDef *gamedef,
+               f32 pos_max_d, const core::aabbox3d<f32> &box_0,
                f32 dtime, v3f &pos_f, v3f &speed_f)
 {
        collisionMoveResult final_result;
@@ -224,8 +227,8 @@ collisionMoveResult collisionMovePrecise(Map *map, f32 pos_max_d,
                        dtime_downcount = 0;
                }
 
-               collisionMoveResult result = collisionMoveSimple(map, pos_max_d,
-                               box_0, dtime_part, pos_f, speed_f);
+               collisionMoveResult result = collisionMoveSimple(map, gamedef,
+                               pos_max_d, box_0, dtime_part, pos_f, speed_f);
 
                if(result.touching_ground)
                        final_result.touching_ground = true;