X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fpathlib%2Fpath_waypoint.qc;h=4c3a7a1aadb70153b8918a330851467e74d19b1c;hb=64b8409b2d6fb93dc51ba24a82d219c8cd56a907;hp=73b415537b2233d4faeeb2d16cc9a5443d5f78c4;hpb=54e0ccd220df67e999e1987086a0e2d8bc0ad10d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/pathlib/path_waypoint.qc b/qcsrc/server/pathlib/path_waypoint.qc index 73b415537..4c3a7a1aa 100644 --- a/qcsrc/server/pathlib/path_waypoint.qc +++ b/qcsrc/server/pathlib/path_waypoint.qc @@ -1,3 +1,8 @@ +#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) @@ -11,61 +16,61 @@ 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) @@ -102,7 +107,7 @@ 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; } @@ -133,32 +138,32 @@ entity pathlib_waypointpath(entity wp_from, entity wp_to, float callback) 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 @@ -168,22 +173,22 @@ entity pathlib_waypointpath(entity wp_from, entity wp_to, float callback) 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; } @@ -197,23 +202,23 @@ entity pathlib_waypointpath_step() 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); @@ -221,15 +226,15 @@ entity pathlib_waypointpath_step() 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;