X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fpathlib%2Fpath_waypoint.qc;h=a2aaf55635d119e08959f93ae9f3a6292834a989;hb=4d9a40898926a8da83b788f9a862f35cdd4c8905;hp=231c14f21bbbf6b6c8464a62d857ba593394116d;hpb=bb80a6aba067167c6ef8d5f3465f03bd34142fa2;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/pathlib/path_waypoint.qc b/qcsrc/server/pathlib/path_waypoint.qc index 231c14f21..a2aaf5563 100644 --- a/qcsrc/server/pathlib/path_waypoint.qc +++ b/qcsrc/server/pathlib/path_waypoint.qc @@ -1,3 +1,9 @@ +#include "path_waypoint.qh" +#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) @@ -8,7 +14,7 @@ void pathlib_wpp_close(entity wp) wp.pathlib_list = closedlist; if(wp == best_open_node) - best_open_node = world; + best_open_node = NULL; if(wp == goal_node) pathlib_foundgoal = true; @@ -108,20 +114,16 @@ float pathlib_wpp_expand(entity wp) entity pathlib_wpp_bestopen() { - entity n, best; - if(best_open_node) return best_open_node; - n = findchainentity(pathlib_list, openlist); - best = n; - while(n) - { - if(n.pathlib_node_f < best.pathlib_node_f) - best = n; + entity best = NULL; - n = n.chain; - } + FOREACH_ENTITY_ENT(pathlib_list, openlist, + { + if(!best || it.pathlib_node_f < best.pathlib_node_f) + best = it; + }); return best; @@ -129,7 +131,6 @@ entity pathlib_wpp_bestopen() entity pathlib_waypointpath(entity wp_from, entity wp_to, float callback) { - entity n; float ptime; ptime = gettime(GETTIME_REALTIME); @@ -158,36 +159,34 @@ entity pathlib_waypointpath(entity wp_from, entity wp_to, float callback) pathlib_searched_cnt = 0; pathlib_foundgoal = false; - dprint("pathlib_waypointpath init\n"); + LOG_TRACE("pathlib_waypointpath init\n"); // Initialize waypoint grid - // FIXME! presisted chain for better preformance - for(n = findchain(classname, "waypoint"); n; n = n.chain) + IL_EACH(g_waypoints, true, { - n.pathlib_list = world; - n.pathlib_node_g = 0; - n.pathlib_node_f = 0; - n.pathlib_node_h = 0; + it.pathlib_list = NULL; + it.pathlib_node_g = 0; + it.pathlib_node_f = 0; + it.pathlib_node_h = 0; - //setmodel(n, "models/runematch/rune.mdl"); - //n.effects = EF_LOWPRECISION; - //n.colormod = '0 0 0'; - //n.scale = 1; - - } + //setmodel(it, "models/runematch/rune.mdl"); + //it.effects = EF_LOWPRECISION; + //it.colormod = '0 0 0'; + //it.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"); - return world; + LOG_TRACE("pathlib_waypointpath: Start waypoint not linked! aborting.\n"); + return NULL; } - return world; + return NULL; } entity pathlib_waypointpath_step() @@ -197,21 +196,21 @@ entity pathlib_waypointpath_step() n = pathlib_wpp_bestopen(); if(!n) { - dprint("Cannot find best open node, abort.\n"); - return world; + LOG_TRACE("Cannot find best open node, abort.\n"); + return NULL; } 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); + start = path_build(NULL, start_node.origin, NULL, NULL); + end = path_build(NULL, goal_node.origin, NULL, start); ln = end; for(open = goal_node; open.path_prev != start_node; open = open.path_prev) @@ -226,20 +225,20 @@ entity pathlib_waypointpath_step() return start; } - return world; + return NULL; } -void plas_think() +void plas_think(entity this) { pathlib_waypointpath_step(); if(pathlib_foundgoal) return; - self.nextthink = time + 0.1; + this.nextthink = time + 0.1; } void pathlib_waypointpath_autostep() { entity n; n = spawn(); - n.think = plas_think; + setthink(n, plas_think); n.nextthink = time + 0.1; }