From 8b6f273dc920d2bf9735109fb5f7e4dbdb882a03 Mon Sep 17 00:00:00 2001 From: mand1nga Date: Sun, 5 Apr 2009 23:05:49 +0000 Subject: [PATCH] Changed the method for caching paths. Now the .cache file stores pairs of walkable nodes each line (waypoint_a.origin,waypoint_b.origin) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6438 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/bots.qc | 157 +++++++++++++++----------------------- 1 file changed, 63 insertions(+), 94 deletions(-) diff --git a/data/qcsrc/server/bots.qc b/data/qcsrc/server/bots.qc index 8b01dad41..eaf6fd1f1 100644 --- a/data/qcsrc/server/bots.qc +++ b/data/qcsrc/server/bots.qc @@ -437,8 +437,6 @@ float lag_additem(float t, float f1, float f2, entity e1, vector v1, vector v2, .float wpisbox; .float wpflags; .vector wpnearestpoint; -.float waypoint_id; -float waypoint_counter; // stack of current goals (the last one of which may be an item or other // desirable object, the rest are typically waypoints to reach it) @@ -763,7 +761,6 @@ entity waypoint_spawn(vector m1, vector m2, float f) } } - w.waypoint_id = waypoint_counter; ++waypoint_counter; waypoint_clearlinks(w); //waypoint_schedulerelink(w); return w; @@ -816,7 +813,6 @@ void waypoint_remove(entity e) waypoint_schedulerelink(e.wp31); // and now remove the spawnfunc_waypoint remove(e); - --waypoint_counter; }; // empties the map of waypoints @@ -851,8 +847,9 @@ float botframe_cachedwaypointlinks; float waypoint_load_links() { local string filename, s; - local float file, tokens, cost, id_from, id_to, c; + local float file, tokens, c, found; local entity wp_from, wp_to; + local vector wp_to_pos, wp_from_pos; filename = strcat("maps/", mapname); filename = strcat(filename, ".waypoints.cache"); file = fopen(filename, FILE_READ); @@ -871,31 +868,34 @@ float waypoint_load_links() if (!s) break; - tokens = tokenizebyseparator(s, " "); + tokens = tokenizebyseparator(s, "*"); - if (tokens!=3) + if (tokens!=2) { // bad file format fclose(file); return FALSE; } - id_from = stof(argv(0)); - id_to = stof(argv(1)); - cost = stof(argv(2)); + wp_from_pos = stov(argv(0)); + wp_to_pos = stov(argv(1)); // Search "from" waypoint - if(wp_from.waypoint_id!=id_from) + if(wp_from.origin!=wp_from_pos) { wp_from = findchain(classname, "waypoint"); + found = FALSE; while(wp_from) { - if(wp_from.waypoint_id==id_from) + if(vlen(wp_from.origin-wp_from_pos)<1) + { + found = TRUE; break; + } wp_from = wp_from.chain; } - if(wp_from.waypoint_id!=id_from) + if(!found) { // can't find that waypoint fclose(file); @@ -905,14 +905,18 @@ float waypoint_load_links() // Search "to" waypoint wp_to = findchain(classname, "waypoint"); + found = FALSE; while(wp_to) { - if(wp_to.waypoint_id==id_to) + if(vlen(wp_to.origin-wp_to_pos)<1) + { + found = TRUE; break; + } wp_to = wp_to.chain; } - if(wp_to.waypoint_id!=id_to) + if(!found) { // can't find that waypoint fclose(file); @@ -920,39 +924,7 @@ float waypoint_load_links() } ++c; - // for i in $(seq -w 0 31); do echo "if(wp_from.wp${i}==world){wp_from.wp${i}=wp_to;wp_from.wp${i}mincost=cost;continue;}"; done; - if(wp_from.wp00==world){wp_from.wp00=wp_to;wp_from.wp00mincost=cost;continue;} - if(wp_from.wp01==world){wp_from.wp01=wp_to;wp_from.wp01mincost=cost;continue;} - if(wp_from.wp02==world){wp_from.wp02=wp_to;wp_from.wp02mincost=cost;continue;} - if(wp_from.wp03==world){wp_from.wp03=wp_to;wp_from.wp03mincost=cost;continue;} - if(wp_from.wp04==world){wp_from.wp04=wp_to;wp_from.wp04mincost=cost;continue;} - if(wp_from.wp05==world){wp_from.wp05=wp_to;wp_from.wp05mincost=cost;continue;} - if(wp_from.wp06==world){wp_from.wp06=wp_to;wp_from.wp06mincost=cost;continue;} - if(wp_from.wp07==world){wp_from.wp07=wp_to;wp_from.wp07mincost=cost;continue;} - if(wp_from.wp08==world){wp_from.wp08=wp_to;wp_from.wp08mincost=cost;continue;} - if(wp_from.wp09==world){wp_from.wp09=wp_to;wp_from.wp09mincost=cost;continue;} - if(wp_from.wp10==world){wp_from.wp10=wp_to;wp_from.wp10mincost=cost;continue;} - if(wp_from.wp11==world){wp_from.wp11=wp_to;wp_from.wp11mincost=cost;continue;} - if(wp_from.wp12==world){wp_from.wp12=wp_to;wp_from.wp12mincost=cost;continue;} - if(wp_from.wp13==world){wp_from.wp13=wp_to;wp_from.wp13mincost=cost;continue;} - if(wp_from.wp14==world){wp_from.wp14=wp_to;wp_from.wp14mincost=cost;continue;} - if(wp_from.wp15==world){wp_from.wp15=wp_to;wp_from.wp15mincost=cost;continue;} - if(wp_from.wp16==world){wp_from.wp16=wp_to;wp_from.wp16mincost=cost;continue;} - if(wp_from.wp17==world){wp_from.wp17=wp_to;wp_from.wp17mincost=cost;continue;} - if(wp_from.wp18==world){wp_from.wp18=wp_to;wp_from.wp18mincost=cost;continue;} - if(wp_from.wp19==world){wp_from.wp19=wp_to;wp_from.wp19mincost=cost;continue;} - if(wp_from.wp20==world){wp_from.wp20=wp_to;wp_from.wp20mincost=cost;continue;} - if(wp_from.wp21==world){wp_from.wp21=wp_to;wp_from.wp21mincost=cost;continue;} - if(wp_from.wp22==world){wp_from.wp22=wp_to;wp_from.wp22mincost=cost;continue;} - if(wp_from.wp23==world){wp_from.wp23=wp_to;wp_from.wp23mincost=cost;continue;} - if(wp_from.wp24==world){wp_from.wp24=wp_to;wp_from.wp24mincost=cost;continue;} - if(wp_from.wp25==world){wp_from.wp25=wp_to;wp_from.wp25mincost=cost;continue;} - if(wp_from.wp26==world){wp_from.wp26=wp_to;wp_from.wp26mincost=cost;continue;} - if(wp_from.wp27==world){wp_from.wp27=wp_to;wp_from.wp27mincost=cost;continue;} - if(wp_from.wp28==world){wp_from.wp28=wp_to;wp_from.wp28mincost=cost;continue;} - if(wp_from.wp29==world){wp_from.wp29=wp_to;wp_from.wp29mincost=cost;continue;} - if(wp_from.wp30==world){wp_from.wp30=wp_to;wp_from.wp30mincost=cost;continue;} - if(wp_from.wp31==world){wp_from.wp31=wp_to;wp_from.wp31mincost=cost;continue;} + waypoint_addlink(wp_from, wp_to); } fclose(file); @@ -972,7 +944,7 @@ float waypoint_load_links() void waypoint_save_links() { local string filename, s; - local float file, c, i, cost; + local float file, c, i; local entity w, link; filename = strcat("maps/", mapname); filename = strcat(filename, ".waypoints.cache"); @@ -987,55 +959,52 @@ void waypoint_save_links() w = findchain(classname, "waypoint"); while (w) { - if (!(w.wpflags & WAYPOINTFLAG_GENERATED)) + for(i=0;i<32;++i) { - for(i=0;i<32;++i) + // :S + switch(i) { - // :S - switch(i) - { - // for i in $(seq -w 0 31); do echo "case $i:link = w.wp$i; cost = w.wp${i}mincost; break;"; done; - case 00:link = w.wp00; cost = w.wp00mincost; break; - case 01:link = w.wp01; cost = w.wp01mincost; break; - case 02:link = w.wp02; cost = w.wp02mincost; break; - case 03:link = w.wp03; cost = w.wp03mincost; break; - case 04:link = w.wp04; cost = w.wp04mincost; break; - case 05:link = w.wp05; cost = w.wp05mincost; break; - case 06:link = w.wp06; cost = w.wp06mincost; break; - case 07:link = w.wp07; cost = w.wp07mincost; break; - case 08:link = w.wp08; cost = w.wp08mincost; break; - case 09:link = w.wp09; cost = w.wp09mincost; break; - case 10:link = w.wp10; cost = w.wp10mincost; break; - case 11:link = w.wp11; cost = w.wp11mincost; break; - case 12:link = w.wp12; cost = w.wp12mincost; break; - case 13:link = w.wp13; cost = w.wp13mincost; break; - case 14:link = w.wp14; cost = w.wp14mincost; break; - case 15:link = w.wp15; cost = w.wp15mincost; break; - case 16:link = w.wp16; cost = w.wp16mincost; break; - case 17:link = w.wp17; cost = w.wp17mincost; break; - case 18:link = w.wp18; cost = w.wp18mincost; break; - case 19:link = w.wp19; cost = w.wp19mincost; break; - case 20:link = w.wp20; cost = w.wp20mincost; break; - case 21:link = w.wp21; cost = w.wp21mincost; break; - case 22:link = w.wp22; cost = w.wp22mincost; break; - case 23:link = w.wp23; cost = w.wp23mincost; break; - case 24:link = w.wp24; cost = w.wp24mincost; break; - case 25:link = w.wp25; cost = w.wp25mincost; break; - case 26:link = w.wp26; cost = w.wp26mincost; break; - case 27:link = w.wp27; cost = w.wp27mincost; break; - case 28:link = w.wp28; cost = w.wp28mincost; break; - case 29:link = w.wp29; cost = w.wp29mincost; break; - case 30:link = w.wp30; cost = w.wp30mincost; break; - case 31:link = w.wp31; cost = w.wp31mincost; break; - } + // for i in $(seq -w 0 31); do echo "case $i:link = w.wp$i; break;"; done; + case 00:link = w.wp00; break; + case 01:link = w.wp01; break; + case 02:link = w.wp02; break; + case 03:link = w.wp03; break; + case 04:link = w.wp04; break; + case 05:link = w.wp05; break; + case 06:link = w.wp06; break; + case 07:link = w.wp07; break; + case 08:link = w.wp08; break; + case 09:link = w.wp09; break; + case 10:link = w.wp10; break; + case 11:link = w.wp11; break; + case 12:link = w.wp12; break; + case 13:link = w.wp13; break; + case 14:link = w.wp14; break; + case 15:link = w.wp15; break; + case 16:link = w.wp16; break; + case 17:link = w.wp17; break; + case 18:link = w.wp18; break; + case 19:link = w.wp19; break; + case 20:link = w.wp20; break; + case 21:link = w.wp21; break; + case 22:link = w.wp22; break; + case 23:link = w.wp23; break; + case 24:link = w.wp24; break; + case 25:link = w.wp25; break; + case 26:link = w.wp26; break; + case 27:link = w.wp27; break; + case 28:link = w.wp28; break; + case 29:link = w.wp29; break; + case 30:link = w.wp30; break; + case 31:link = w.wp31; break; + } - if(link==world) - continue; + if(link==world) + continue; - s = strcat(ftos(w.waypoint_id), " ", ftos(link.waypoint_id), " ", ftos(cost), "\n"); - fputs(file, s); - ++c; - } + s = strcat(vtos(w.origin), "*", vtos(link.origin), "\n"); + fputs(file, s); + ++c; } w = w.chain; } -- 2.39.2