#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;
try{
// Object collides into walkable nodes
MapNode n = map->getNode(v3s16(x,y,z));
- if(content_features(n).walkable == false)
+ if(gamedef->getNodeDefManager()->get(n).walkable == false)
continue;
}
catch(InvalidPositionException &e)
speed_f -= speed_f.dotProduct(dirs[i]) * dirs[i];
pos_f -= pos_f.dotProduct(dirs[i]) * dirs[i];
pos_f += oldpos_f.dotProduct(dirs[i]) * dirs[i];
+ result.collides = true;
}
}
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;
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;
+ if(result.collides)
+ final_result.collides = true;
}
while(dtime_downcount > 0.001);