[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