Exemplo n.º 1
0
void
WidowDisrupt(edict_t *self)
{
	vec3_t start;
	vec3_t dir;
	vec3_t forward, right;
	float len;

	if (!self)
	{
		return;
	}

	AngleVectors(self->s.angles, forward, right, NULL);
	G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_WIDOW_DISRUPTOR],
			forward, right, start);

	VectorSubtract(self->pos1, self->enemy->s.origin, dir);
	len = VectorLength(dir);

	if (len < 30)
	{
		VectorSubtract(self->pos1, start, dir);
		VectorNormalize(dir);

		monster_fire_tracker(self, start, dir, 20, 500, self->enemy, MZ2_WIDOW_DISRUPTOR);
	}
	else
	{
		PredictAim(self->enemy, start, 1200, true, 0, dir, NULL);
		monster_fire_tracker(self, start, dir, 20, 1200, NULL, MZ2_WIDOW_DISRUPTOR);
	}
}
Exemplo n.º 2
0
void WidowDisrupt (edict_t *self)
{
	vec3_t	start;
	vec3_t	dir;
	vec3_t	forward, right;
	float	len;

	AngleVectors (self->s.angles, forward, right, NULL);
	G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_WIDOW_DISRUPTOR], forward, right, start);

	VectorSubtract (self->pos1, self->enemy->s.origin, dir);
	len = VectorLength (dir);

	if (len < 30)
	{
//		if ((g_showlogic) && (g_showlogic->value))
//			gi.dprintf ("target locked - dist %2.2f\n", len);
		// calc direction to where we targeted
		VectorSubtract (self->pos1, start, dir);
		VectorNormalize (dir);

		monster_fire_tracker(self, start, dir, 20, 500, self->enemy, MZ2_WIDOW_DISRUPTOR);
	}
	else
	{
//		if ((g_showlogic) && (g_showlogic->value))
//			gi.dprintf ("target missed - dist %2.2f\n", len);

		PredictAim (self->enemy, start, 1200, true, 0, dir, NULL);

//		VectorSubtract (self->enemy->s.origin, start, dir);
//		VectorNormalize (dir);
		monster_fire_tracker(self, start, dir, 20, 1200, NULL, MZ2_WIDOW_DISRUPTOR);
	}
}