#ifndef PATHLIB_H #define PATHLIB_H .entity pathlib_list; .entity path_next; .entity path_prev; #define inwater(point) (pointcontents(point) == CONTENT_WATER) #define medium spawnshieldtime const vector PLIB_FORWARD = '0 1 0'; //#define PLIB_BACK '0 -1 0' const vector PLIB_RIGHT = '1 0 0'; //#define PLIB_LEFT '-1 0 0' #define DEBUGPATHING #ifdef DEBUGPATHING void pathlib_showpath(entity start); void pathlib_showpath2(entity path); #endif entity openlist; entity closedlist; entity goal_node; entity start_node; .float is_path_node; .float pathlib_node_g; .float pathlib_node_h; .float pathlib_node_f; .float pathlib_node_c; const float pathlib_node_edgeflag_unknown = 0; const float pathlib_node_edgeflag_left = 2; const float pathlib_node_edgeflag_right = 4; const float pathlib_node_edgeflag_forward = 8; const float pathlib_node_edgeflag_back = 16; const float pathlib_node_edgeflag_backleft = 32; const float pathlib_node_edgeflag_backright = 64; const float pathlib_node_edgeflag_forwardleft = 128; const float pathlib_node_edgeflag_forwardright = 256; const float pathlib_node_edgeflag_none = 512; .float pathlib_node_edgeflags; float pathlib_open_cnt; float pathlib_closed_cnt; float pathlib_made_cnt; float pathlib_merge_cnt; float pathlib_searched_cnt; float pathlib_bestopen_seached; float pathlib_bestcash_hits; float pathlib_bestcash_saved; float pathlib_gridsize; float pathlib_movecost; float pathlib_movecost_diag; float pathlib_movecost_waterfactor; float pathlib_foundgoal; float pathlib_starttime; const float pathlib_maxtime = 60; entity best_open_node; vector tile_check_up; vector tile_check_down; float tile_check_size; float tile_check_cross(vector where); float tile_check_plus(vector where); float tile_check_star(vector where); var float tile_check(vector where); float movenode_stepsize; vector movenode_stepup; vector movenode_maxdrop; vector movenode_boxup; vector movenode_boxmax; vector movenode_boxmin; float pathlib_movenode_goodnode; vector pathlib_wateroutnode(vector start, vector end, float doedge); vector pathlib_swimnode(vector start, vector end, float doedge); vector pathlib_flynode(vector start, vector end, float doedge); vector pathlib_walknode(vector start, vector end, float doedge); var vector pathlib_movenode(vector start, vector end, float doedge); float pathlib_expandnode_star(entity node, vector start, vector goal); float pathlib_expandnode_box(entity node, vector start, vector goal); float pathlib_expandnode_octagon(entity node, vector start, vector goal); var float pathlib_expandnode(entity node, vector start, vector goal); float pathlib_g_static(entity parent, vector to, float static_cost); float pathlib_g_static_water(entity parent, vector to, float static_cost); float pathlib_g_euclidean(entity parent, vector to, float static_cost); float pathlib_g_euclidean_water(entity parent, vector to, float static_cost); var float pathlib_cost(entity parent, vector to, float static_cost); float pathlib_h_manhattan(vector a, vector b); float pathlib_h_diagonal(vector a, vector b); float pathlib_h_euclidean(vector a,vector b); float pathlib_h_diagonal2(vector a, vector b); float pathlib_h_diagonal3(vector a, vector b); float pathlib_h_diagonal2sdp(vector preprev, vector prev, vector point, vector end); float pathlib_h_none(vector preprev, vector prev) { return 0; } var float pathlib_heuristic(vector from, vector to); var float pathlib_makenode(entity parent,vector start, vector to, vector goal,float cost); var float buildpath_nodefilter(vector n,vector c,vector p); var float pathlib_wpp_waypointcallback(entity wp, entity wp_prev); #ifdef DEBUGPATHING #include "debug.qc" #endif #endif