]> git.lizzy.rs Git - minetest.git/blobdiff - src/collision.cpp
Fix GUITable selection issues with trees
[minetest.git] / src / collision.cpp
index adb6970f5fc4f5d31791c46621027e3f0ce26c3f..1933302507a5f526965f186237a88cad8b402b09 100644 (file)
@@ -209,7 +209,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
                Calculate new velocity
        */
        if( dtime > 0.5 ) {
-               infostream<<"collisionMoveSimple: WARNING: maximum step interval exceeded, lost movement details!"<<std::endl;
+               warningstream<<"collisionMoveSimple: maximum step interval exceeded, lost movement details!"<<std::endl;
                dtime = 0.5;
        }
        speed_f += accel_f * dtime;
@@ -245,6 +245,8 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
        s16 max_y = MYMAX(oldpos_i.Y, newpos_i.Y) + (box_0.MaxEdge.Y / BS) + 1;
        s16 max_z = MYMAX(oldpos_i.Z, newpos_i.Z) + (box_0.MaxEdge.Z / BS) + 1;
 
+       bool any_position_valid = false;
+
        for(s16 x = min_x; x <= max_x; x++)
        for(s16 y = min_y; y <= max_y; y++)
        for(s16 z = min_z; z <= max_z; z++)
@@ -257,6 +259,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
                if (is_position_valid) {
                        // Object collides into walkable nodes
 
+                       any_position_valid = true;
                        const ContentFeatures &f = gamedef->getNodeDefManager()->get(n);
                        if(f.walkable == false)
                                continue;
@@ -289,6 +292,12 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
                        is_object.push_back(false);
                }
        }
+
+       // Do not move if world has not loaded yet, since custom node boxes
+       // are not available for collision detection.
+       if (!any_position_valid)
+               return result;
+
        } // tt2
 
        if(collideWithObjects)
@@ -298,7 +307,6 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
 
                /* add object boxes to cboxes */
 
-
                std::vector<ActiveObject*> objects;
 #ifndef SERVER
                ClientEnvironment *c_env = dynamic_cast<ClientEnvironment*>(env);
@@ -380,7 +388,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
                loopcount++;
                if(loopcount >= 100)
                {
-                       infostream<<"collisionMoveSimple: WARNING: Loop count exceeded, aborting to avoid infiniite loop"<<std::endl;
+                       warningstream<<"collisionMoveSimple: Loop count exceeded, aborting to avoid infiniite loop"<<std::endl;
                        dtime = 0;
                        break;
                }