/*
=============
Homeinfront (modified from the infront function in ai.qc by chris@ichat.com)

returns 1 if the entity is in front (in sight) of self
=============
*/
float(entity targ) Homeinfront =
{
	local vector	vec;
	local float		dot;
	
	makevectors (self.angles);
	vec = normalize (targ.origin - self.origin);
	dot = vec * v_forward;
	
	if ( dot > 0.5)  // raise this number for more specific infront
	{
		return TRUE;
	}
	return FALSE;
};

entity() HomeFindTarget = 
{
	local entity head, selected;
	local float dist;
	dist = 100000;
	selected = world;
	head = findradius(self.origin, 100000);
	while(head)
	{
		if ((head != self) && (head.health>=1) ) 
		{
			traceline(self.origin,head.origin,TRUE,self);
			if ( Homeinfront(head) && (trace_fraction >= 1) && (vlen(head.origin - self.origin) < dist) && (head.classname != "door") && (head.classname != "func_button") )
			{
				selected = head;
				dist = vlen(head.origin - self.origin);
			}
		}		
		head = head.chain;
	}
	if (selected != world)
	{
		sprint (self.owner,"Homing->");
		if (selected.classname == "player")
		{
			sprint (self.owner,selected.netname);
			sprint (selected,self.owner.netname);
			sprint (selected," has a bogey on you!\n");
		}
		else
			sprint (self.owner,selected.classname);
		sprint (self.owner,"\n");
	}
	return selected;
};

void() HomeThink =
{
	local vector dir, vtemp;

	self.enemy = HomeFindTarget();

	if (self.enemy != world) // Arr.. don't be taken on da World!
	{
		vtemp = self.enemy.origin + '0 0 10';
		dir = normalize(vtemp - self.origin);
		self.velocity = self.velocity + (dir * 500);
		self.angles = vectoangles(self.velocity);
	}

	self.nextthink = time + 0.2;
	self.think=HomeThink;
};
