X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcollision.cpp;h=9e0c85531cf4ced2cf987e17f4bcb9eca17e8d0a;hb=00fc0babe0c6c5464fa9ffbc5a257b1e2aa93111;hp=76696e90db7deb8db0fd431f1a17b35d19c39743;hpb=8cae65978611476d0da215acf61819a905c68267;p=oweals%2Fminetest.git diff --git a/src/collision.cpp b/src/collision.cpp index 76696e90d..9e0c85531 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -251,15 +251,19 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, for(s16 z = min_z; z <= max_z; z++) { v3s16 p(x,y,z); - try{ + + bool is_position_valid; + MapNode n = map->getNodeNoEx(p, &is_position_valid); + + if (is_position_valid) { // Object collides into walkable nodes - MapNode n = map->getNode(p); + const ContentFeatures &f = gamedef->getNodeDefManager()->get(n); if(f.walkable == false) continue; int n_bouncy_value = itemgroup_get(f.groups, "bouncy"); - std::vector nodeboxes = n.getNodeBoxes(gamedef->ndef()); + std::vector nodeboxes = n.getCollisionBoxes(gamedef->ndef()); for(std::vector::iterator i = nodeboxes.begin(); i != nodeboxes.end(); i++) @@ -275,8 +279,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, is_object.push_back(false); } } - catch(InvalidPositionException &e) - { + else { // Collide with unloaded nodes aabb3f box = getNodeBox(p, BS); cboxes.push_back(box);