+#include "../bot/waypoints.qh"
+
+#include "pathlib.qh"
+#include "main.qh"
+
var float pathlib_wpp_open(entity wp, entity child, float cost);
void pathlib_wpp_close(entity wp)
best_open_node = world;
if(wp == goal_node)
- pathlib_foundgoal = TRUE;
+ pathlib_foundgoal = true;
}
float pathlib_wpp_opencb(entity wp, entity child, float cost)
{
if(child.pathlib_list == closedlist)
- return FALSE;
+ return false;
// FIXME! wp.wp##mincost is NOT distance. Make it distance or add a field for distance to be used here (for better speed)
cost = vlen(child.origin - wp.origin);
-
+
child.path_prev = wp;
child.pathlib_list = openlist;
child.pathlib_node_g = wp.pathlib_node_g + cost;
child.pathlib_node_h = pathlib_heuristic(child.origin, goal_node.origin);
child.pathlib_node_c = pathlib_wpp_waypointcallback(child, wp);
child.pathlib_node_f = child.pathlib_node_g + child.pathlib_node_h + child.pathlib_node_c;
-
+
if(child == goal_node)
- pathlib_foundgoal = TRUE;
+ pathlib_foundgoal = true;
++pathlib_open_cnt;
if(best_open_node.pathlib_node_f > child.pathlib_node_f)
best_open_node = child;
- return TRUE;
+ return true;
}
float pathlib_wpp_openncb(entity wp, entity child, float cost)
{
if(child.pathlib_list == closedlist)
- return FALSE;
+ return false;
// FIXME! wp.wp##mincost is NOT distance. Make it distance or add a field for distance to be used here (for better speed)
cost = vlen(child.origin - wp.origin);
-
+
child.path_prev = wp;
child.pathlib_list = openlist;
child.pathlib_node_g = wp.pathlib_node_g + cost;
- child.pathlib_node_h = pathlib_heuristic(child.origin, goal_node.origin);
+ child.pathlib_node_h = pathlib_heuristic(child.origin, goal_node.origin);
child.pathlib_node_f = child.pathlib_node_g + child.pathlib_node_h;
if(child == goal_node)
- pathlib_foundgoal = TRUE;
+ pathlib_foundgoal = true;
++pathlib_open_cnt;
if(best_open_node.pathlib_node_f > child.pathlib_node_f)
best_open_node = child;
- return TRUE;
+ return true;
}
float pathlib_wpp_expand(entity wp)
if(wp.wp29) pathlib_wpp_open(wp,wp.wp29,wp.wp29mincost); else return 29;
if(wp.wp30) pathlib_wpp_open(wp,wp.wp30,wp.wp30mincost); else return 30;
if(wp.wp31) pathlib_wpp_open(wp,wp.wp31,wp.wp31mincost); else return 31;
-
+
return 32;
}
float ptime;
ptime = gettime(GETTIME_REALTIME);
- pathlib_starttime = ptime;
+ pathlib_starttime = ptime;
pathlib_movecost = 300;
pathlib_movecost_diag = vlen('1 1 0' * pathlib_movecost);
-
- if not (pathlib_wpp_waypointcallback)
- callback = FALSE;
-
+
+ if (!pathlib_wpp_waypointcallback)
+ callback = false;
+
if (callback)
pathlib_wpp_open = pathlib_wpp_opencb;
else
pathlib_wpp_open = pathlib_wpp_openncb;
-
+
pathlib_heuristic = pathlib_h_none;
-
- if not(openlist)
+
+ if (!openlist)
openlist = spawn();
- if not(closedlist)
+ if (!closedlist)
closedlist = spawn();
pathlib_closed_cnt = 0;
pathlib_open_cnt = 0;
pathlib_searched_cnt = 0;
- pathlib_foundgoal = FALSE;
+ pathlib_foundgoal = false;
- dprint("pathlib_waypointpath init\n");
+ LOG_TRACE("pathlib_waypointpath init\n");
// Initialize waypoint grid
// FIXME! presisted chain for better preformance
n.pathlib_node_g = 0;
n.pathlib_node_f = 0;
n.pathlib_node_h = 0;
-
+
//setmodel(n, "models/runematch/rune.mdl");
//n.effects = EF_LOWPRECISION;
//n.colormod = '0 0 0';
//n.scale = 1;
-
+
}
goal_node = wp_to;
start_node = wp_from;
start_node.pathlib_list = closedlist;
- dprint("Expanding ",ftos(pathlib_wpp_expand(start_node))," links\n");
+ LOG_TRACE("Expanding ",ftos(pathlib_wpp_expand(start_node))," links\n");
if(pathlib_open_cnt <= 0)
{
- dprint("pathlib_waypointpath: Start waypoint not linked! aborting.\n");
+ LOG_TRACE("pathlib_waypointpath: Start waypoint not linked! aborting.\n");
return world;
}
n = pathlib_wpp_bestopen();
if(!n)
{
- dprint("Cannot find best open node, abort.\n");
+ LOG_TRACE("Cannot find best open node, abort.\n");
return world;
}
pathlib_wpp_close(n);
- dprint("Expanding ",ftos(pathlib_wpp_expand(n))," links\n");
-
+ LOG_TRACE("Expanding ",ftos(pathlib_wpp_expand(n))," links\n");
+
if(pathlib_foundgoal)
{
entity start, end, open, ln;
-
- dprint("Target found. Rebuilding and filtering path...\n");
-
+
+ LOG_TRACE("Target found. Rebuilding and filtering path...\n");
+
buildpath_nodefilter = buildpath_nodefilter_none;
start = path_build(world, start_node.origin, world, world);
end = path_build(world, goal_node.origin, world, start);
ln = end;
-
+
for(open = goal_node; open.path_prev != start_node; open = open.path_prev)
{
n = path_build(ln,open.origin,open.path_prev,start);
ln = n;
}
start.path_next = n;
- n.path_prev = start;
-
+ n.path_prev = start;
+
return start;
}
return world;
}
void plas_think()
-{
+{SELFPARAM();
pathlib_waypointpath_step();
if(pathlib_foundgoal)
return;