+#if defined(CSQC)
+#elif defined(MENUQC)
+#elif defined(SVQC)
+ #include "../dpdefs/progsdefs.qh"
+ #include "../dpdefs/dpextensions.qh"
+#endif
+
.vector steerto;
/**
Group will move towards the unified direction while keeping close to eachother.
**/
.float flock_id;
-vector steerlib_flock(float radius, float standoff,float separation_force,float flock_force)
+vector steerlib_flock(float _radius, float standoff,float separation_force,float flock_force)
{
entity flock_member;
- vector push,pull;
- float ccount;
+ vector push = '0 0 0', pull = '0 0 0';
+ float ccount = 0;
- flock_member = findradius(self.origin,radius);
+ flock_member = findradius(self.origin, _radius);
while(flock_member)
{
if(flock_member != self)
{
++ccount;
push = push + (steerlib_repell(flock_member.origin,standoff) * separation_force);
- pull = pull + (steerlib_arrive(flock_member.origin + flock_member.velocity,radius) * flock_force);
+ pull = pull + (steerlib_arrive(flock_member.origin + flock_member.velocity, _radius) * flock_force);
}
flock_member = flock_member.chain;
}
Group will move towards the unified direction while keeping close to eachother.
xy only version (for ground movers).
**/
-vector steerlib_flock2d(float radius, float standoff,float separation_force,float flock_force)
+vector steerlib_flock2d(float _radius, float standoff,float separation_force,float flock_force)
{
entity flock_member;
- vector push,pull;
- float ccount;
+ vector push = '0 0 0', pull = '0 0 0';
+ float ccount = 0;
- flock_member = findradius(self.origin,radius);
+ flock_member = findradius(self.origin,_radius);
while(flock_member)
{
if(flock_member != self)
{
++ccount;
push = push + (steerlib_repell(flock_member.origin, standoff) * separation_force);
- pull = pull + (steerlib_arrive(flock_member.origin + flock_member.velocity, radius) * flock_force);
+ pull = pull + (steerlib_arrive(flock_member.origin + flock_member.velocity, _radius) * flock_force);
}
flock_member = flock_member.chain;
}
- push_z = 0;
- pull_z = 0;
+ push.z = 0;
+ pull.z = 0;
return push + (pull * (1 / ccount));
}
This results in a aligned movement (?!) much like flocking.
**/
-vector steerlib_swarm(float radius, float standoff,float separation_force,float swarm_force)
+vector steerlib_swarm(float _radius, float standoff,float separation_force,float swarm_force)
{
entity swarm_member;
- vector force,center;
- float ccount;
+ vector force = '0 0 0', center = '0 0 0';
+ float ccount = 0;
- swarm_member = findradius(self.origin,radius);
+ swarm_member = findradius(self.origin,_radius);
while(swarm_member)
{
}
center = center * (1 / ccount);
- force = force + (steerlib_arrive(center,radius) * swarm_force);
+ force = force + (steerlib_arrive(center,_radius) * swarm_force);
return force;
}
float bm_forward, bm_right, bm_left,p;
vector vr,vl;
- dir_z *= 0.15;
+ dir.z *= 0.15;
vr = vectoangles(dir);
//vr_x *= -1;
vector dodgemove,swarmmove;
vector reprellmove,wandermove,newmove;
- self.angles_x = self.angles_x * -1;
+ self.angles_x = self.angles.x * -1;
makevectors(self.angles);
- self.angles_x = self.angles_x * -1;
+ self.angles_x = self.angles.x * -1;
dodgemove = steerlib_traceavoid(0.35,1000);
swarmmove = steerlib_flock(500,75,700,500);
entity e,ee;
float d,bd;
- self.angles_x = self.angles_x * -1;
+ self.angles_x = self.angles.x * -1;
makevectors(self.angles);
- self.angles_x = self.angles_x * -1;
+ self.angles_x = self.angles.x * -1;
if(self.enemy)
if(vlen(self.enemy.origin - self.origin) < 64)