[nexuiz-commits] r6438 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Apr 5 19:05:50 EDT 2009


Author: mand1nga
Date: 2009-04-05 19:05:49 -0400 (Sun, 05 Apr 2009)
New Revision: 6438

Modified:
   trunk/data/qcsrc/server/bots.qc
Log:
Changed the method for caching paths. Now the .cache file stores pairs of walkable nodes each line (waypoint_a.origin,waypoint_b.origin)


Modified: trunk/data/qcsrc/server/bots.qc
===================================================================
--- trunk/data/qcsrc/server/bots.qc	2009-04-05 20:45:22 UTC (rev 6437)
+++ trunk/data/qcsrc/server/bots.qc	2009-04-05 23:05:49 UTC (rev 6438)
@@ -437,8 +437,6 @@
 .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 @@
 		}
 	}
 
-	w.waypoint_id = waypoint_counter; ++waypoint_counter;
 	waypoint_clearlinks(w);
 	//waypoint_schedulerelink(w);
 	return w;
@@ -816,7 +813,6 @@
 	waypoint_schedulerelink(e.wp31);
 	// and now remove the spawnfunc_waypoint
 	remove(e);
-	--waypoint_counter;
 };
 
 // empties the map of waypoints
@@ -851,8 +847,9 @@
 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 @@
 		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 @@
 
 		// 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 @@
 		}
 
 		++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 @@
 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 @@
 	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;
 	}



More information about the nexuiz-commits mailing list