-//#define PATHLIB_RDFIELDS
-#ifdef PATHLIB_RDFIELDS
- #define path_next swampslug
- #define path_prev lasertarget
-#else
- .entity path_next;
- .entity path_prev;
-#endif
+#include "pathlib.qh"
+#include "_all.qh"
#define medium spawnshieldtime
//#define DEBUGPATHING
-
-entity openlist;
-entity closedlist;
-entity scraplist;
-
-.float pathlib_node_g;
-.float pathlib_node_h;
-.float pathlib_node_f;
-
-float pathlib_open_cnt;
-float pathlib_closed_cnt;
-float pathlib_made_cnt;
-float pathlib_merge_cnt;
-float pathlib_recycle_cnt;
-float pathlib_searched_cnt;
-
-#ifdef DEBUGPATHING
-
-#endif
-
-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_edge_check_size;
-
-float pathlib_foundgoal;
-entity goal_node;
-
-entity best_open_node;
-.float is_path_node;
-
-
#ifdef DEBUGPATHING
float edge_show(vector point,float fsize);
void mark_error(vector where,float lifetime);
}
}
-float fsnap(float val,float fsize)
-{
- return rint(val / fsize) * fsize;
-}
-
-vector vsnap(vector point,float fsize)
-{
- vector vret;
-
- vret.x = rint(point.x / fsize) * fsize;
- vret.y = rint(point.y / fsize) * fsize;
- vret.z = ceil(point.z / fsize) * fsize;
-
- return vret;
-}
-
float walknode_stepsize;
vector walknode_stepup;
vector walknode_maxdrop;
return 0;
}
-#define inwater(point) (pointcontents(point) == CONTENT_WATER)
-/*
-float inwater(vector point)
-{
- if(pointcontents(point) == CONTENT_WATER)
- return 1;
- return 0;
-}
-*/
-
#define _pcheck(p) traceline(p+z_up,p-z_down,MOVE_WORLDONLY,self); if (!floor_ok(trace_endpos)) return 1
float edge_check(vector point,float fsize)
{
end.y = fsnap(end.y, pathlib_gridsize);
if(pointcontents(end) == CONTENT_EMPTY)
- return pathlib_wateroutnode( start, end);
+ return pathlib_wateroutnode( start, end, doedge);
tracebox(start, walknode_boxmin,walknode_boxmax, end, MOVE_WORLDONLY, self);
if(trace_fraction == 1)
return h;
}
-//#define PATHLIB_USE_NODESCRAP
const float PATHLIB_NODEEXPIRE = 0.05;
float pathlib_scraplist_cnt;
entity newnode()
#endif
++pathlib_made_cnt;
n = spawn();
-#ifdef PATHLIB_NODEEXPIRE
n.think = SUB_Remove;
n.nextthink = time + PATHLIB_NODEEXPIRE;
return n;
if(node.owner == closedlist)
{
- dprint("Pathlib: Tried to close a closed node!\n");
+ LOG_TRACE("Pathlib: Tried to close a closed node!\n");
return;
}
{
vector point;
vector where;
- float nodecnt;
+ float nodecnt = 0;
where = node.origin;
to.x = fsnap(to.x,pathlib_gridsize);
to.y = fsnap(to.y,pathlib_gridsize);
- dprint("AStar init. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n");
+ LOG_TRACE("AStar init. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n");
path = pathlib_mknode(from,world);
pathlib_close_node(path,to);
if(pathlib_foundgoal)
{
- dprint("AStar: Goal found on first node!\n");
+ LOG_TRACE("AStar: Goal found on first node!\n");
open = spawn();
open.owner = open;
if(pathlib_expandnode(path,from,to) <= 0)
{
- dprint("AStar path fail.\n");
+ LOG_TRACE("AStar path fail.\n");
pathlib_cleanup();
return world;
if(pathlib_foundgoal)
{
- dprint("Target found. Rebuilding and filtering path...\n");
+ LOG_TRACE("Target found. Rebuilding and filtering path...\n");
ftime = gettime(GETTIME_REALTIME);
ptime = ftime - ptime;
#ifdef DEBUGPATHING
pathlib_showpath2(start);
- dprint("Time used - pathfinding: ", ftos(ptime),"\n");
- dprint("Time used - rebuild & filter: ", ftos(ftime),"\n");
- dprint("Time used - cleanup: ", ftos(ctime),"\n");
- dprint("Time used - total: ", ftos(ptime + ftime + ctime),"\n");
- dprint("Time used - # frames: ", ftos(ceil((ptime + ftime + ctime) / sys_frametime)),"\n\n");
- dprint("Nodes - created: ", ftos(pathlib_made_cnt),"\n");
- dprint("Nodes - open: ", ftos(pathlib_open_cnt),"\n");
- dprint("Nodes - merged: ", ftos(pathlib_merge_cnt),"\n");
- dprint("Nodes - closed: ", ftos(pathlib_closed_cnt),"\n");
- dprint("Nodes - searched: ", ftos(pathlib_searched_cnt),"\n");
+ LOG_TRACE("Time used - pathfinding: ", ftos(ptime),"\n");
+ LOG_TRACE("Time used - rebuild & filter: ", ftos(ftime),"\n");
+ LOG_TRACE("Time used - cleanup: ", ftos(ctime),"\n");
+ LOG_TRACE("Time used - total: ", ftos(ptime + ftime + ctime),"\n");
+ LOG_TRACE("Time used - # frames: ", ftos(ceil((ptime + ftime + ctime) / sys_frametime)),"\n\n");
+ LOG_TRACE("Nodes - created: ", ftos(pathlib_made_cnt),"\n");
+ LOG_TRACE("Nodes - open: ", ftos(pathlib_open_cnt),"\n");
+ LOG_TRACE("Nodes - merged: ", ftos(pathlib_merge_cnt),"\n");
+ LOG_TRACE("Nodes - closed: ", ftos(pathlib_closed_cnt),"\n");
+ LOG_TRACE("Nodes - searched: ", ftos(pathlib_searched_cnt),"\n");
if(pathlib_recycle_cnt)
- dprint("Nodes - make/reuse: ", ftos(pathlib_made_cnt / pathlib_recycle_cnt),"\n");
+ LOG_TRACE("Nodes - make/reuse: ", ftos(pathlib_made_cnt / pathlib_recycle_cnt),"\n");
if(pathlib_recycle_cnt)
- dprint("Nodes - reused: ", ftos(pathlib_recycle_cnt),"\n");
+ LOG_TRACE("Nodes - reused: ", ftos(pathlib_recycle_cnt),"\n");
- dprint("Nodes bestopen searched: ", ftos(pathlib_bestopen_seached),"\n");
- dprint("Nodes bestcash - hits: ", ftos(pathlib_bestcash_hits),"\n");
- dprint("Nodes bestcash - save: ", ftos(pathlib_bestcash_saved),"\n");
- dprint("AStar done. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n\n");
+ LOG_TRACE("Nodes bestopen searched: ", ftos(pathlib_bestopen_seached),"\n");
+ LOG_TRACE("Nodes bestcash - hits: ", ftos(pathlib_bestcash_hits),"\n");
+ LOG_TRACE("Nodes bestcash - save: ", ftos(pathlib_bestcash_saved),"\n");
+ LOG_TRACE("AStar done. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n\n");
#endif
return start;
}
}
- dprint("A* Faild to find a path! Try a smaller gridsize.\n");
+ LOG_TRACE("A* Faild to find a path! Try a smaller gridsize.\n");
pathlib_cleanup();
return world;
}
-
-
-