[nexuiz-commits] r7630 - in trunk/data/qcsrc/server: . tturrets/units

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Sep 4 19:33:31 EDT 2009


Author: mand1nga
Date: 2009-09-04 19:33:30 -0400 (Fri, 04 Sep 2009)
New Revision: 7630

Modified:
   trunk/data/qcsrc/server/bots.qc
   trunk/data/qcsrc/server/havocbot.qc
   trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc
Log:
Refactored goal stack into an array


Modified: trunk/data/qcsrc/server/bots.qc
===================================================================
--- trunk/data/qcsrc/server/bots.qc	2009-09-04 14:52:34 UTC (rev 7629)
+++ trunk/data/qcsrc/server/bots.qc	2009-09-04 23:33:30 UTC (rev 7630)
@@ -435,15 +435,11 @@
 
 // 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)
-.entity goalcurrent, goalstack01, goalstack02, goalstack03;
-.entity goalstack04, goalstack05, goalstack06, goalstack07;
-.entity goalstack08, goalstack09, goalstack10, goalstack11;
-.entity goalstack12, goalstack13, goalstack14, goalstack15;
-.entity goalstack16, goalstack17, goalstack18, goalstack19;
-.entity goalstack20, goalstack21, goalstack22, goalstack23;
-.entity goalstack24, goalstack25, goalstack26, goalstack27;
-.entity goalstack28, goalstack29, goalstack30, goalstack31;
+#define GOALSTACK_LENGTH 32
+.entity goalstack[GOALSTACK_LENGTH];
+.entity goalcurrent;
 
+
 .entity nearestwaypoint;
 .float nearestwaypointtimeout;
 
@@ -1250,78 +1246,28 @@
 // completely empty the goal stack, used when deciding where to go
 void navigation_clearroute()
 {
+	float i;
+
 	//print("bot ", etos(self), " clear\n");
 	self.navigation_hasgoals = FALSE;
+
 	self.goalcurrent = world;
-	self.goalstack01 = world;
-	self.goalstack02 = world;
-	self.goalstack03 = world;
-	self.goalstack04 = world;
-	self.goalstack05 = world;
-	self.goalstack06 = world;
-	self.goalstack07 = world;
-	self.goalstack08 = world;
-	self.goalstack09 = world;
-	self.goalstack10 = world;
-	self.goalstack11 = world;
-	self.goalstack12 = world;
-	self.goalstack13 = world;
-	self.goalstack14 = world;
-	self.goalstack15 = world;
-	self.goalstack16 = world;
-	self.goalstack17 = world;
-	self.goalstack18 = world;
-	self.goalstack19 = world;
-	self.goalstack20 = world;
-	self.goalstack21 = world;
-	self.goalstack22 = world;
-	self.goalstack23 = world;
-	self.goalstack24 = world;
-	self.goalstack25 = world;
-	self.goalstack26 = world;
-	self.goalstack27 = world;
-	self.goalstack28 = world;
-	self.goalstack29 = world;
-	self.goalstack30 = world;
-	self.goalstack31 = world;
+
+	for(i=0; i<GOALSTACK_LENGTH; ++i)
+		self.(goalstack[i]) = world;
 };
 
 // add a new goal at the beginning of the stack
 // (in other words: add a new prerequisite before going to the later goals)
 void navigation_pushroute(entity e)
 {
+	float i;
+
 	//print("bot ", etos(self), " push ", etos(e), "\n");
-	self.goalstack31 = self.goalstack30;
-	self.goalstack30 = self.goalstack29;
-	self.goalstack29 = self.goalstack28;
-	self.goalstack28 = self.goalstack27;
-	self.goalstack27 = self.goalstack26;
-	self.goalstack26 = self.goalstack25;
-	self.goalstack25 = self.goalstack24;
-	self.goalstack24 = self.goalstack23;
-	self.goalstack23 = self.goalstack22;
-	self.goalstack22 = self.goalstack21;
-	self.goalstack21 = self.goalstack20;
-	self.goalstack20 = self.goalstack19;
-	self.goalstack19 = self.goalstack18;
-	self.goalstack18 = self.goalstack17;
-	self.goalstack17 = self.goalstack16;
-	self.goalstack16 = self.goalstack15;
-	self.goalstack15 = self.goalstack14;
-	self.goalstack14 = self.goalstack13;
-	self.goalstack13 = self.goalstack12;
-	self.goalstack12 = self.goalstack11;
-	self.goalstack11 = self.goalstack10;
-	self.goalstack10 = self.goalstack09;
-	self.goalstack09 = self.goalstack08;
-	self.goalstack08 = self.goalstack07;
-	self.goalstack07 = self.goalstack06;
-	self.goalstack06 = self.goalstack05;
-	self.goalstack05 = self.goalstack04;
-	self.goalstack04 = self.goalstack03;
-	self.goalstack03 = self.goalstack02;
-	self.goalstack02 = self.goalstack01;
-	self.goalstack01 = self.goalcurrent;
+	for(i=GOALSTACK_LENGTH-1; i>0; --i)
+		self.(goalstack[i]) = self.goalstack[i-1];
+
+	self.(goalstack[0]) = self.goalcurrent;
 	self.goalcurrent = e;
 };
 
@@ -1330,39 +1276,19 @@
 // (used when a spawnfunc_waypoint is reached)
 void navigation_poproute()
 {
+	float i;
 	//print("bot ", etos(self), " pop\n");
-	self.goalcurrent = self.goalstack01;
-	self.goalstack01 = self.goalstack02;
-	self.goalstack02 = self.goalstack03;
-	self.goalstack03 = self.goalstack04;
-	self.goalstack04 = self.goalstack05;
-	self.goalstack05 = self.goalstack06;
-	self.goalstack06 = self.goalstack07;
-	self.goalstack07 = self.goalstack08;
-	self.goalstack08 = self.goalstack09;
-	self.goalstack09 = self.goalstack10;
-	self.goalstack10 = self.goalstack11;
-	self.goalstack11 = self.goalstack12;
-	self.goalstack12 = self.goalstack13;
-	self.goalstack13 = self.goalstack14;
-	self.goalstack14 = self.goalstack15;
-	self.goalstack15 = self.goalstack16;
-	self.goalstack16 = self.goalstack17;
-	self.goalstack17 = self.goalstack18;
-	self.goalstack18 = self.goalstack19;
-	self.goalstack19 = self.goalstack20;
-	self.goalstack20 = self.goalstack21;
-	self.goalstack21 = self.goalstack22;
-	self.goalstack22 = self.goalstack23;
-	self.goalstack23 = self.goalstack24;
-	self.goalstack24 = self.goalstack25;
-	self.goalstack25 = self.goalstack26;
-	self.goalstack26 = self.goalstack27;
-	self.goalstack27 = self.goalstack28;
-	self.goalstack28 = self.goalstack29;
-	self.goalstack29 = self.goalstack30;
-	self.goalstack30 = self.goalstack31;
-	self.goalstack31 = world;
+	self.goalcurrent = self.goalstack[0];
+
+	for(i=0; i<GOALSTACK_LENGTH-1; ++i)
+	{
+		if(self.goalstack[i])
+			self.(goalstack[i]) = self.goalstack[i+1];
+		else
+			return;
+	}
+
+	self.(goalstack[i]) = world;
 };
 
 // find the spawnfunc_waypoint near a dynamic goal such as a dropped weapon
@@ -1572,7 +1498,8 @@
 						if (wp.wpcost > cost2 + wp.wpmincost[i])
 							navigation_markroutes_checkwaypoint(w, wp, cost2, p);
 					}
-					// break
+					else
+						break;
 				}
 			}
 			w = w.chain;
@@ -2995,3 +2922,4 @@
 FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(lag_entity1);
 FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(wlink);
 FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(wpmincost);
+FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(goalstack);

Modified: trunk/data/qcsrc/server/havocbot.qc
===================================================================
--- trunk/data/qcsrc/server/havocbot.qc	2009-09-04 14:52:34 UTC (rev 7629)
+++ trunk/data/qcsrc/server/havocbot.qc	2009-09-04 23:33:30 UTC (rev 7630)
@@ -143,9 +143,9 @@
 .float bot_canruntogoal;
 void havocbot_bunnyhop(vector dir)
 {
-	local float bunnyhopdistance;
+	local float maxspeed, bunnyhopdistance;
 	local vector deviation;
-	local float maxspeed;
+	local entity nextgoal;
 
 	if(cvar("g_midair"))
 		return;
@@ -183,6 +183,8 @@
 
 	bunnyhopdistance = vlen(self.origin - self.goalcurrent.origin);
 
+	nextgoal = self.goalstack[0];
+
 	// Run only to visible goals
 	if(self.flags & FL_ONGROUND)
 	if(self.speed==maxspeed)
@@ -215,18 +217,18 @@
 					if(self.goalcurrent.classname=="waypoint")
 					if not(self.goalcurrent.wpflags & WAYPOINTFLAG_PERSONAL)
 					if(fabs(self.goalcurrent.origin_z - self.origin_z) < self.maxs_z - self.mins_z)
-					if(self.goalstack01!=world)
+					if(nextgoal!=world)
 					{
-						deviation = vectoangles(self.goalstack01.origin - self.origin) - vectoangles(self.goalcurrent.origin - self.origin);
+						deviation = vectoangles(nextgoal.origin - self.origin) - vectoangles(self.goalcurrent.origin - self.origin);
 						while (deviation_y < -180) deviation_y = deviation_y + 360;
 						while (deviation_y > 180) deviation_y = deviation_y - 360;
 
 						if(fabs(deviation_y) < 20)
-						if(bunnyhopdistance < vlen(self.origin - self.goalstack01.origin))
-						if(fabs(self.goalstack01.origin_z - self.goalcurrent.origin_z) < self.maxs_z - self.mins_z)
+						if(bunnyhopdistance < vlen(self.origin - nextgoal.origin))
+						if(fabs(nextgoal.origin_z - self.goalcurrent.origin_z) < self.maxs_z - self.mins_z)
 						{
-							if(vlen(self.goalcurrent.origin - self.goalstack01.origin) > cvar("bot_ai_bunnyhop_startdistance"))
-							if(checkpvs(self.origin + self.view_ofs, self.goalstack01))
+							if(vlen(self.goalcurrent.origin - nextgoal.origin) > cvar("bot_ai_bunnyhop_startdistance"))
+							if(checkpvs(self.origin + self.view_ofs, nextgoal))
 							{
 								checkdistance = FALSE;
 							}
@@ -1216,15 +1218,18 @@
 
 		local vector now,v,next;//,heading;
 		local float aimdistance,skillblend,distanceblend,blend;
+		local entity nextgoal;
+
+		nextgoal = self.goalstack[0];
 		next = now = self.goalcurrent.origin - (self.origin + self.view_ofs);
 		aimdistance = vlen(now);
 		//heading = self.velocity;
 		//dprint(self.goalstack01.classname,etos(self.goalstack01),"\n");
 		if(
-			self.goalstack01 != self && self.goalstack01 != world && self.aistatus & AI_STATUS_RUNNING == 0 &&
+			nextgoal != self && nextgoal != world && self.aistatus & AI_STATUS_RUNNING == 0 &&
 			!(self.goalcurrent.wpflags & WAYPOINTFLAG_TELEPORT)
 		)
-			next = self.goalstack01.origin - (self.origin + self.view_ofs);
+			next = nextgoal.origin - (self.origin + self.view_ofs);
 
 		skillblend=bound(0,(skill-2.5)*0.5,1); //lower skill player can't preturn
 		distanceblend=bound(0,aimdistance/cvar("bot_ai_keyboard_distance"),1);
@@ -1388,38 +1393,10 @@
 	local entity target;
 	local vector org;
 
-	if(self.goalcounter==0)target=self.goalcurrent;
-	else if(self.goalcounter==1)target=self.goalstack01;
-	else if(self.goalcounter==2)target=self.goalstack02;
-	else if(self.goalcounter==3)target=self.goalstack03;
-	else if(self.goalcounter==4)target=self.goalstack04;
-	else if(self.goalcounter==5)target=self.goalstack05;
-	else if(self.goalcounter==6)target=self.goalstack06;
-	else if(self.goalcounter==7)target=self.goalstack07;
-	else if(self.goalcounter==8)target=self.goalstack08;
-	else if(self.goalcounter==9)target=self.goalstack09;
-	else if(self.goalcounter==10)target=self.goalstack10;
-	else if(self.goalcounter==11)target=self.goalstack11;
-	else if(self.goalcounter==12)target=self.goalstack12;
-	else if(self.goalcounter==13)target=self.goalstack13;
-	else if(self.goalcounter==14)target=self.goalstack14;
-	else if(self.goalcounter==15)target=self.goalstack15;
-	else if(self.goalcounter==16)target=self.goalstack16;
-	else if(self.goalcounter==17)target=self.goalstack17;
-	else if(self.goalcounter==18)target=self.goalstack18;
-	else if(self.goalcounter==19)target=self.goalstack19;
-	else if(self.goalcounter==20)target=self.goalstack20;
-	else if(self.goalcounter==21)target=self.goalstack21;
-	else if(self.goalcounter==22)target=self.goalstack22;
-	else if(self.goalcounter==23)target=self.goalstack23;
-	else if(self.goalcounter==24)target=self.goalstack24;
-	else if(self.goalcounter==25)target=self.goalstack25;
-	else if(self.goalcounter==26)target=self.goalstack26;
-	else if(self.goalcounter==27)target=self.goalstack27;
-	else if(self.goalcounter==28)target=self.goalstack28;
-	else if(self.goalcounter==29)target=self.goalstack29;
-	else if(self.goalcounter==30)target=self.goalstack30;
-	else if(self.goalcounter==31)target=self.goalstack31;
+	if(self.goalcounter==0)
+		target=self.goalcurrent;
+	else if(self.goalcounter<=GOALSTACK_LENGTH)
+		target = self.goalstack[self.goalcounter-1];
 
 	if(target==world)
 	{

Modified: trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc	2009-09-04 14:52:34 UTC (rev 7629)
+++ trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc	2009-09-04 23:33:30 UTC (rev 7630)
@@ -3,7 +3,7 @@
 **/
 
 
-#define checkpoint_target goalstack03
+//.entity checkpoint_target;
 
 /*
 #define checkpoint_cache_who  flagcarried
@@ -11,8 +11,8 @@
 #define checkpoint_cache_to   selected_player
 */
 
-#define pathgoal    goalstack01
-#define pathcurrent goalstack02
+.entity pathgoal;
+.entity pathcurrent;
 
 /*
 entity path_makeorcache(entity forwho,entity start, entity end)



More information about the nexuiz-commits mailing list