]> git.lizzy.rs Git - minetest.git/blobdiff - src/pathfinder.cpp
Mapgen V6: Re-enable liquid flowing
[minetest.git] / src / pathfinder.cpp
index 0d1cfe476cf2567cbe8045f8d7a6d6656ca40832..d39bdab3add0a1ba243d549a2670f63c7b26033e 100644 (file)
@@ -22,6 +22,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 /******************************************************************************/
 
 #include "pathfinder.h"
+#include "environment.h"
+#include "map.h"
+#include "log.h"
 
 #ifdef PATHFINDER_DEBUG
 #include <iomanip>
@@ -48,9 +51,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define ERROR_TARGET     std::cout
 #else
 #define DEBUG_OUT(a)     while(0)
-#define INFO_TARGET      infostream
-#define VERBOSE_TARGET   verbosestream
-#define ERROR_TARGET     errorstream
+#define INFO_TARGET      infostream << "pathfinder: "
+#define VERBOSE_TARGET   verbosestream << "pathfinder: "
+#define ERROR_TARGET     errorstream << "pathfinder: "
 #endif
 
 /******************************************************************************/
@@ -204,7 +207,7 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
 
        //check parameters
        if (env == 0) {
-               std::cout << "missing environment pointer" << std::endl;
+               ERROR_TARGET << "missing environment pointer" << std::endl;
                return retval;
        }
 
@@ -243,7 +246,7 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
 
        //build data map
        if (!build_costmap()) {
-               std::cout << "failed to build costmap" << std::endl;
+               ERROR_TARGET << "failed to build costmap" << std::endl;
                return retval;
        }
 #ifdef PATHFINDER_DEBUG
@@ -260,13 +263,13 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
        path_gridnode& endpos   = getIndexElement(EndIndex);
 
        if (!startpos.valid) {
-               std::cout << "invalid startpos" <<
+               VERBOSE_TARGET << "invalid startpos" <<
                                "Index: " << PPOS(StartIndex) <<
                                "Realpos: " << PPOS(getRealPos(StartIndex)) << std::endl;
                return retval;
        }
        if (!endpos.valid) {
-               std::cout << "invalid stoppos" <<
+               VERBOSE_TARGET << "invalid stoppos" <<
                                "Index: " << PPOS(EndIndex) <<
                                "Realpos: " << PPOS(getRealPos(EndIndex)) << std::endl;
                return retval;
@@ -287,7 +290,7 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
                        update_cost_retval = update_cost_heuristic(StartIndex,v3s16(0,0,0),0,0);
                        break;
                default:
-                       std::cout << "missing algorithm"<< std::endl;
+                       ERROR_TARGET << "missing algorithm"<< std::endl;
                        break;
        }
 
@@ -347,7 +350,7 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
 #ifdef PATHFINDER_DEBUG
                print_pathlen();
 #endif
-               std::cout << "failed to update cost map"<< std::endl;
+               ERROR_TARGET << "failed to update cost map"<< std::endl;
        }
 
 
@@ -820,6 +823,7 @@ bool pathfinder::update_cost_heuristic(     v3s16 ipos,
                                                        " out of range (" << m_limits.X.max << "," <<
                                                        m_limits.Y.max << "," << m_limits.Z.max
                                                        <<")" << std::endl);
+                                       direction = get_dir_heuristic(directions,g_pos);
                                        continue;
                                }
 
@@ -828,6 +832,7 @@ bool pathfinder::update_cost_heuristic(     v3s16 ipos,
                                if (!g_pos2.valid) {
                                        VERBOSE_TARGET << LVL "Pathfinder: no data for new position: "
                                                                                                << PPOS(ipos2) << std::endl;
+                                       direction = get_dir_heuristic(directions,g_pos);
                                        continue;
                                }
 
@@ -880,7 +885,7 @@ bool pathfinder::update_cost_heuristic(     v3s16 ipos,
 /******************************************************************************/
 void pathfinder::build_path(std::vector<v3s16>& path,v3s16 pos, int level) {
        level ++;
-       if (level > 1000) {
+       if (level > 700) {
                ERROR_TARGET
                << LVL "Pathfinder: path is too long aborting" << std::endl;
                return;