Fix pathfinder to produce more useful paths
authorobneq <obbneq@gmail.com>
Sat, 25 Apr 2015 13:16:44 +0000 (15:16 +0200)
committerkwolekr <kwolekr@minetest.net>
Mon, 4 May 2015 02:36:11 +0000 (22:36 -0400)
- Fix unintended negation of condition
- Remove line_of_sight 'optimization'

src/pathfinder.cpp

index d39bdab3add0a1ba243d549a2670f63c7b26033e..8eb52bfd1e9be2b5ff45297d987073f26befc5b7 100644 (file)
@@ -310,27 +310,16 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
                print_path(path);
 #endif
 
-               //optimize path
-               std::vector<v3s16> optimized_path;
-
-               std::vector<v3s16>::iterator startpos = path.begin();
-               optimized_path.push_back(source);
-
+               //finalize path
+               std::vector<v3s16> full_path;
                for (std::vector<v3s16>::iterator i = path.begin();
                                        i != path.end(); i++) {
-                       if (!m_env->line_of_sight(
-                               tov3f(getIndexElement(*startpos).pos),
-                               tov3f(getIndexElement(*i).pos))) {
-                               optimized_path.push_back(getIndexElement(*(i-1)).pos);
-                               startpos = (i-1);
-                       }
+                       full_path.push_back(getIndexElement(*i).pos);
                }
 
-               optimized_path.push_back(destination);
-
 #ifdef PATHFINDER_DEBUG
-               std::cout << "Optimized path:" << std::endl;
-               print_path(optimized_path);
+               std::cout << "full path:" << std::endl;
+               print_path(full_path);
 #endif
 #ifdef PATHFINDER_CALC_TIME
                timespec ts2;
@@ -344,7 +333,7 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
                std::cout << "Calculating path took: " << (ts2.tv_sec - ts.tv_sec) <<
                                "s " << ms << "ms " << us << "us " << ns << "ns " << std::endl;
 #endif
-               return optimized_path;
+               return full_path;
        }
        else {
 #ifdef PATHFINDER_DEBUG
@@ -532,7 +521,7 @@ path_cost pathfinder::calc_cost(v3s16 pos,v3s16 dir) {
                        if ((testpos.Y >= m_limits.Y.min) &&
                                        (node_at_pos.param0 != CONTENT_IGNORE) &&
                                        (node_at_pos.param0 != CONTENT_AIR)) {
-                               if (((pos2.Y - testpos.Y)*-1) <= m_maxdrop) {
+                               if ((pos2.Y - testpos.Y - 1) <= m_maxdrop) {
                                        retval.valid = true;
                                        retval.value = 2;
                                        //difference of y-pos +1 (target node is ABOVE solid node)