aboutsummaryrefslogtreecommitdiff
path: root/src/guiFormSpecMenu.cpp
Commit message (Expand)AuthorAge
* Move globals from main.cpp to more sane locationsCraig Robbins2015-04-01
* Fix some minor details from 6d61375kwolekr2015-04-01
* Clean scaling pre-filter for formspec/HUD.Aaron Suen2015-04-01
* Disable double-click -> ESC translation for main menuCraig Robbins2015-03-14
* Unescape tooltip textsest312015-03-11
* Stop formspecs closing with double-click in empty areaCraig Robbins2015-03-09
* For usages of assert() that are meant to persist in Release builds (when NDEB...Craig Robbins2015-03-07
* Replace std::list to std::vector into tile.cpp (m_texture_trash) and move til...Loic Blot2015-03-05
* Move hex.h to util/Loic Blot2015-02-21
* Fix Exit to OS button focus in Pause Menungosang2015-02-10
* Reduce gettext wide/narrow and string/char* conversionsShadowNinja2015-02-05
* Performance fixes.onkrot2015-01-13
* Remove automatic consistent formspec size <-> font size (now has to be done m...sapier2015-01-09
* Fix logic of checkbox formspec element validity checkingKahrl2015-01-09
* Fixes for androidsapier2015-01-06
* Fix rounding error in font size making main menu and in game font sizes incon...sapier2015-01-02
* Fix segfault when dragging mouse out of mainmenu window (#1910)Kahrl2014-12-13
* Responsive tooltip offset for Android.Kodexky2014-12-13
* (INTERIM) Make sizes of the font in formspecs consistent and not so largeCraig Robbins2014-12-05
* Right mouse button behaviour for craft/inventory If right mousebutton clicked...Craig Robbins2014-12-04
* Make hud use fontengine toosapier2014-11-30
* Scale form elements consistentlyZefram2014-11-30
* Implement proper font handlingsapier2014-11-30
* Fix uninitialized variable warningkwolekr2014-10-30
* Remove m_ext_ptr in GUIFormSpecMenu, replaced by refcount mechanismKahrl2014-10-24
* Fix use of unitialized variables in mouse button handlingCraig Robbins2014-10-08
* Add [colorize modifierBlockMen2014-10-05
* Standardize tooltip row detectionBlockMen2014-09-28
* Fix multilined description in tooltips (fixes #1688)BlockMen2014-09-28
* Fix GCC reorder warningShadowNinja2014-09-21
* Add inventory right click drag and dropsruz252014-09-21
* Allow taking screenshots of formspecs and move message to chatBlockMen2014-09-21
* Make tooltip_show_delay=0 workZefram2014-07-16
* Permit non-integer sizes for item_image[]Zefram2014-07-16
* Add srollbar formspec elementsapier2014-07-16
* Fix errors/warnings reported by valgrindsfan52014-07-06
* Add support for Android 2.3+sapier2014-06-29
* Add formspec api versioningsapier2014-06-29
* Add setting for tooltips show delay.RealBadAngel2014-06-25
* Tooltips rework.RealBadAngel2014-06-24
* Support for scalable font and gui elementssapier2014-06-22
* Fix labels and vertlabels on some systems.RealBadAngel2014-06-20
* Fix small memory leaks on shutdownsapier2014-06-20
* Add tooltips for button, imagebutton and checkbox.RealBadAngel2014-06-19
* Fix bounding rect for formspec elements label vertlabel and checkboxessapier2014-06-18
* Make dropdown formspec elements send their value same style as buttons on changesapier2014-06-18
* Add support for exiting formspecs by doubleclicking outsidesapier2014-06-12
* Improve performance by removing some temporary objectssapier2014-06-12
* Add proper lua api deprecated handlingsapier2014-04-29
* Fix formspec replacement handling for in game formspecssapier2014-04-22
an class="hl opt">(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_ */