diff options
author | obneq <obbneq@gmail.com> | 2015-04-25 15:16:44 +0200 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2015-05-03 22:36:11 -0400 |
commit | 9af7f38e3f077ec42fcc3086c82d2676c53c84a6 (patch) | |
tree | c8906077fdd7109acaec71fb2908d6d0760761f1 /src/pathfinder.cpp | |
parent | 8f38f8255cce29bccdc4adf16b2244650029e758 (diff) | |
download | minetest-9af7f38e3f077ec42fcc3086c82d2676c53c84a6.tar.gz minetest-9af7f38e3f077ec42fcc3086c82d2676c53c84a6.tar.bz2 minetest-9af7f38e3f077ec42fcc3086c82d2676c53c84a6.zip |
Fix pathfinder to produce more useful paths
- Fix unintended negation of condition
- Remove line_of_sight 'optimization'
Diffstat (limited to 'src/pathfinder.cpp')
-rw-r--r-- | src/pathfinder.cpp | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/src/pathfinder.cpp b/src/pathfinder.cpp index d39bdab3a..8eb52bfd1 100644 --- a/src/pathfinder.cpp +++ b/src/pathfinder.cpp @@ -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) |