void ons_camSetup(entity this)
{
- if(cam) return;
-
- cam = new(objective_camera);
+ vector dir;
+ vector ang = '0 0 0';
+ vector best_ang = '0 0 0';
+ float best_trace_fraction = 0;
+ while(ang.y < 360)
+ {
+ dir = eX * cos(ang.y * DEG2RAD) + eY * sin(ang.y * DEG2RAD);
+ dir *= 500;
+ traceline(this.origin, this.origin - dir, MOVE_WORLDONLY, this);
+ if(trace_fraction > best_trace_fraction)
+ {
+ best_trace_fraction = trace_fraction;
+ best_ang = ang;
+ if(trace_fraction == 1)
+ break;
+ }
+ ang.y += 90;
+ if(ang.y == 360)
+ ang.y = 45;
+ }
cam.origin = this.origin;
setorigin(cam, cam.origin);
- cam.angles = this.angles;
+ cam.angles = best_ang;
Net_LinkEntity(cam, false, 0, clientcamera_send);
FOREACH_CLIENT(true, it.clientcamera = cam;);
this.lasthealth = this.max_health = this.health = autocvar_g_onslaught_gen_health;
this.takedamage = DAMAGE_AIM;
this.bot_attack = true;
- IL_PUSH(g_bot_targets, this);
+ if(!IL_CONTAINS(g_bot_targets, this))
+ IL_PUSH(g_bot_targets, this);
this.iscaptured = true;
this.islinked = true;
this.isshielded = true;
STAT(ROUNDLOST, it) = false;
it.ons_deathloc = '0 0 0';
PutClientInServer(it);
+ it.clientcamera = it;
});
return false;
}
{
if(SAME_TEAM(tmp_entity, player))
if(random_target)
- RandomSelection_Add(tmp_entity, 0, string_null, 1, 1);
+ RandomSelection_AddEnt(tmp_entity, 1, 1);
else if(vlen2(tmp_entity.origin - spawn_loc) <= vlen2(closest_target.origin - spawn_loc) || closest_target == NULL)
closest_target = tmp_entity;
}
for(tmp_entity = ons_worldgeneratorlist; tmp_entity; tmp_entity = tmp_entity.ons_worldgeneratornext)
{
if(random_target)
- RandomSelection_Add(tmp_entity, 0, string_null, 1, 1);
+ RandomSelection_AddEnt(tmp_entity, 1, 1);
else
{
if(SAME_TEAM(tmp_entity, player))
g_onslaught = true;
ons_captureshield_force = autocvar_g_onslaught_shield_force;
+ cam = new(objective_camera);
+
InitializeEntity(NULL, ons_DelayedInit, INITPRIO_GAMETYPE);
}