aboutsummaryrefslogtreecommitdiff
path: root/src/mapblock.cpp
Commit message (Expand)AuthorAge
* Remove a few unused functions reported by callcatcher (#11658)SmallJoker2021-10-12
* Switch MapBlock compression to zstd (#10788)lhofhansl2021-08-31
* Allow configuring block disk and net compression. Change default disk level.Lars2020-12-15
* Avoid marking map blocks dirty upon deserialization.Lars2020-11-26
* (se)SerializeString: Include max length in the nameSmallJoker2020-10-01
* Merge pull request #8776 from osjc/FixGetNodeJozef Behran2019-08-10
* Fix warnings about dungeongen.cpp memcpy() and unused variable in MapBlock::d...Paramat2019-01-22
* Proselytize the network. Use IEEE F32 (#8030)SmallJoker2019-01-03
* Move client-specific files to 'src/client' (#7902)Quentin Bazin2018-11-28
* Add a MSVC / Windows compatible snprintf function (#7353)nOOb31672018-07-22
* Node definition manager refactor (#7016)Dániel Juhász2018-02-10
* Remove unused light updating codeDániel Juhász2018-02-04
* Code modernization: src/m* (part 2)Loic Blot2017-08-19
* Modernize various files (src/m*) (#6267)Loïc Blot2017-08-18
* Fix a warning introduced by 4eb59aeeb2f2b535f4eb2a1608189bb03098454eLoïc Blot2017-07-27
* Rename previous_was_found to previous_existsLoic Blot2017-07-27
* MapBlock::actuallyUpdateDayNightDiff(): little performance optimizationLoic Blot2017-07-27
* Massive performance improvement on correctBlockNodeIdsLoic Blot2017-07-27
* Remove unused Map::getDayNightDiff + fix one undefined variable in mapblock.cppLoic Blot2017-07-26
* Very little performance fix on correctBlockNodeIdsLoic Blot2017-07-18
* Fix 1 more warning reported by GCCLoic Blot2017-06-20
* Cpp11 initializers 2 (#5999)Loïc Blot2017-06-17
* Remove superfluous pointer null checksQrchackOfficial2017-06-10
* Revert "Remove deprecated code segments (#5891)"Loïc Blot2017-06-06
* Remove deprecated code segments (#5891)Thomas--S2017-06-04
* Private nodemeta (#5702)sfan52017-05-10
* Update server min protocol version to v24 (#5411)Loïc Blot2017-03-19
* Lighting: Update lighting at block loadingDániel Juhász2017-02-13
* Move PP() and PP2() macros to basic_macros.hRogier2016-12-24
* Rename macros with two leading underscoresShadowNinja2015-10-14
* Use warningstream for log messages with WARNINGShadowNinja2015-10-14
* Various style cleanups + unused code removalest312015-09-19
* Serialisation: documentation fixes, clarifying renames and whitespace fixesest312015-09-14
* Change i++ to ++iDavid Jones2015-08-25
* Clean up threadingShadowNinja2015-08-23
* Precalculate mapblock relative size. This permit to remove many s16 calculs o...nerzhul2015-07-29
* Misc. minor fixeskwolekr2015-07-10
* Generic CAO cleanups and renames for clarificationest312015-06-20
* Mapblock: nodecount refactorest312015-05-31
* Record MapBlock modification reasons as flags instead of stringskwolekr2015-05-17
* For usages of assert() that are meant to persist in Release builds (when NDEB...Craig Robbins2015-03-07
* Increase MapBlock::actuallyUpdateDayNightDiff() performance by 2-8x. ok @cele...Craig Robbins2015-02-10
* Fix a crash (assert) when client set serial version < 24 in INITLoic Blot2015-01-27
* Revert "Fix a crash (assert) when client set serial version < 24 in INIT comm...Craig Robbins2015-01-27
* Fix a crash (assert) when client set serial version < 24 in INIT command SER_...(@U-Exp)2015-01-24
* Fix all warnings and remove -Wno-unused-but-set cflagkwolekr2015-01-18
* Remove most exceptions from getNode() (and variants)Craig Robbins2014-11-14
* Speedup getBlockNodeIdMapping by up to factor 4 by using a fixed size mapping...sapier2014-06-23
* Remove liquid_finite and weatherproller2014-04-18
* Cleanup jthread and fix win32 buildsapier2013-12-01
a path */ A_PLAIN_NP /**< A* algorithm without prefetching of map data */ } algorithm; /******************************************************************************/ /* declarations */ /******************************************************************************/ /** c wrapper function to use from scriptapi */ std::vector<v3s16> get_Path(ServerEnvironment* env, v3s16 source, v3s16 destination, unsigned int searchdistance, unsigned int max_jump, unsigned int max_drop, algorithm algo); /** representation of cost in specific direction */ class path_cost { public: /** default constructor */ path_cost(); /** copy constructor */ path_cost(const path_cost& b); /** assignment operator */ path_cost& operator= (const path_cost& b); bool valid; /**< movement is possible */ int value; /**< cost of movement */ int direction; /**< y-direction of movement */ bool updated; /**< this cost has ben calculated */ }; /** representation of a mapnode to be used for pathfinding */ class path_gridnode { public: /** default constructor */ path_gridnode(); /** copy constructor */ path_gridnode(const path_gridnode& b); /** * assignment operator * @param b node to copy */ path_gridnode& operator= (const path_gridnode& b); /** * read cost in a specific direction * @param dir direction of cost to fetch */ path_cost get_cost(v3s16 dir); /** * set cost value for movement * @param dir direction to set cost for * @cost cost to set */ void set_cost(v3s16 dir,path_cost cost); bool valid; /**< node is on surface */ bool target; /**< node is target position */ bool source; /**< node is stating position */ int totalcost; /**< cost to move here from starting point */ v3s16 sourcedir; /**< origin of movement for current cost */ int surfaces; /**< number of surfaces with same x,z value*/ v3s16 pos; /**< real position of node */ path_cost directions[4]; /**< cost in different directions */ /* debug values */ bool is_element; /**< node is element of path detected */ char type; /**< type of node */ }; /** class doing pathfinding */ class pathfinder { public: /** * default constructor */ pathfinder(); /** * path evaluation function * @param env environment to look for path * @param source origin of path * @param destination end position of path * @param searchdistance maximum number of nodes to look in each direction * @param max_jump maximum number of blocks a path may jump up * @param max_drop maximum number of blocks a path may drop * @param algo algorithm to use for finding a path */ std::vector<v3s16> get_Path(ServerEnvironment* env, v3s16 source, v3s16 destination, unsigned int searchdistance, unsigned int max_jump, unsigned int max_drop, algorithm algo); private: /** data struct for storing internal information */ struct limits { struct limit { int min; int max; }; limit X; limit Y; limit Z; }; /* helper functions */ /** * transform index pos to mappos * @param ipos a index position * @return map position */ v3s16 getRealPos(v3s16 ipos); /** * transform mappos to index pos * @param pos a real pos * @return index position */ v3s16 getIndexPos(v3s16 pos); /** * get gridnode at a specific index position * @param ipos index position * @return gridnode for index */ path_gridnode& getIndexElement(v3s16 ipos); /** * invert a 3d position * @param pos 3d position * @return pos *-1 */ v3s16 invert(v3s16 pos); /** * check if a index is within current search area * @param index position to validate * @return true/false */ bool valid_index(v3s16 index); /** * translate position to float position * @param pos integer position * @return float position */ v3f tov3f(v3s16 pos); /* algorithm functions */ /** * calculate 2d manahttan distance to target * @param pos position to calc distance * @return integer distance */ int get_manhattandistance(v3s16 pos); /** * get best direction based uppon heuristics * @param directions list of unchecked directions * @param g_pos mapnode to start from * @return direction to check */ v3s16 get_dir_heuristic(std::vector<v3s16>& directions,path_gridnode& g_pos); /** * build internal data representation of search area * @return true/false if costmap creation was successfull */ bool build_costmap(); /** * calculate cost of movement * @param pos real world position to start movement * @param dir direction to move to * @return cost information */ path_cost calc_cost(v3s16 pos,v3s16 dir); /** * recursive update whole search areas total cost information * @param ipos position to check next * @param srcdir positionc checked last time * @param total_cost cost of moving to ipos * @param level current recursion depth * @return true/false path to destination has been found */ bool update_all_costs(v3s16 ipos,v3s16 srcdir,int total_cost,int level); /** * recursive try to find a patrh to destionation * @param ipos position to check next * @param srcdir positionc checked last time * @param total_cost cost of moving to ipos * @param level current recursion depth * @return true/false path to destination has been found */ bool update_cost_heuristic(v3s16 ipos,v3s16 srcdir,int current_cost,int level); /** * recursive build a vector containing all nodes from source to destination * @param path vector to add nodes to * @param pos pos to check next * @param level recursion depth */ void build_path(std::vector<v3s16>& path,v3s16 pos, int level); /* variables */ int m_max_index_x; /**< max index of search area in x direction */ int m_max_index_y; /**< max index of search area in y direction */ int m_max_index_z; /**< max index of search area in z direction */ int m_searchdistance; /**< max distance to search in each direction */ int m_maxdrop; /**< maximum number of blocks a path may drop */ int m_maxjump; /**< maximum number of blocks a path may jump */ int m_min_target_distance; /**< current smalest path to target */ bool m_prefetch; /**< prefetch cost data */ v3s16 m_start; /**< source position */ v3s16 m_destination; /**< destination position */ limits m_limits; /**< position limits in real map coordinates */ /** 3d grid containing all map data already collected and analyzed */ std::vector<std::vector<std::vector<path_gridnode> > > m_data; ServerEnvironment* m_env; /**< minetest environment pointer */ #ifdef PATHFINDER_DEBUG /** * print collected cost information */ void print_cost(); /** * print collected cost information in a specific direction * @param dir direction to print */ void print_cost(path_directions dir); /** * print type of node as evaluated */ void print_type(); /** * print pathlenght for all nodes in search area */ void print_pathlen(); /** * print a path * @param path path to show */ void print_path(std::vector<v3s16> path); /** * print y direction for all movements */ void print_ydir(); /** * print y direction for moving in a specific direction * @param dir direction to show data */ void print_ydir(path_directions dir); /** * helper function to translate a direction to speaking text * @param dir direction to translate * @return textual name of direction */ std::string dir_to_name(path_directions dir); #endif }; #endif /* PATHFINDER_H_ */