object radarGuepe(point orig, float dist)
{
	int i;
	object pr, r;
	float mindist;
	
	i = 0;
	mindist = 1000;
	while (i<30)
	{
		pr = radar(i);
		if (pr != null)
		{
			
			if (F(orig, pr.position) < mindist and pr.category == AlienWasp and pr.altitude > 3)
			{
				mindist = distance(orig, pr.position);
				r = pr;
			}
		}
		i = i+1;
	}
	if (mindist < dist) return(r); else return(null);
}


class Guepe
{
	
	point pos;
	
	
	void cherche(point orig, float dist)
	{
		object p;
		point o;
		
		p = radarGuepe(orig, dist);
		while (p == null)
		{
			wait(0.1);
			p = radarGuepe(orig, dist);
		}
		
		pos.x = p.position.x;
		pos.y = p.position.y;
		pos.z = p.position.z;
		
		//o = p.position;
		//wait(0.1);
		
		//vitessex = (p.position.x - o.x)/0.1;
		//vitessey = (p.position.y - o.y)/0.1;
		//vitessez = (p.position.z - o.z)/0.1;
		
	}
	
	
	void tire(point orig, float orient)
	{
		//float t = 3;          //temps d'anticipation
		float angle;
		point cible;
		
		cible.x = pos.x;// + t*vitessex;
		cible.y = pos.y;// + t*vitessey;
		cible.z = pos.z;// + t*vitessez;
		
		if (cible.x == 0) angle = 90; else
		  angle = atan(cible.y / cible.x);
		if (cible.x < 0) angle = angle + 180;
		angle = angle - orient;
		if (angle > 180) angle = angle - 360;
		if (angle < -180) angle = angle + 360;
		turn(angle);
		
		angle = atan((cible.z-orig.z) / distance2d(orig, cible));
		aim(angle);
		
		fire(0.1);
		
	}
}

extern void object::Fourmi6()
{
	//fps(1000);
	Guepe guepe = new Guepe();
	
	while (true)
	{
		guepe.cherche(position, 50);
		
		guepe.tire(position, orientation);
	}
}
object radarGuepe(point orig, float dist)
{
	int i;
	object pr, r;
	float mindist;
	
	i = 0;
	mindist = 1000;
	while (i<30)
	{
		pr = radar(i);
		if (pr != null)
		{
			
			if (F(orig, pr.position) < mindist and pr.category == AlienWasp and pr.altitude > 3)
			{
				mindist = distance(orig, pr.position);
				r = pr;
			}
		}
		i = i+1;
	}
	if (mindist < dist) return(r); else return(null);
}


class Guepe
{
	
	point pos;
	
	
	void cherche(point orig, float dist)
	{
		object p;
		point o;
		
		p = radarGuepe(orig, dist);
		while (p == null)
		{
			wait(0.1);
			p = radarGuepe(orig, dist);
		}
		
		pos.x = p.position.x;
		pos.y = p.position.y;
		pos.z = p.position.z;
		
		//o = p.position;
		//wait(0.1);
		
		//vitessex = (p.position.x - o.x)/0.1;
		//vitessey = (p.position.y - o.y)/0.1;
		//vitessez = (p.position.z - o.z)/0.1;
		
	}
	
	
	void tire(point orig, float orient)
	{
		//float t = 3;          //temps d'anticipation
		float angle;
		point cible;
		
		cible.x = pos.x;// + t*vitessex;
		cible.y = pos.y;// + t*vitessey;
		cible.z = pos.z;// + t*vitessez;
		
		if (cible.x == 0) angle = 90; else
		  angle = atan(cible.y / cible.x);
		if (cible.x < 0) angle = angle + 180;
		angle = angle - orient;
		if (angle > 180) angle = angle - 360;
		if (angle < -180) angle = angle + 360;
		turn(angle);
		
		angle = atan((cible.z-orig.z) / distance2d(orig, cible));
		aim(angle);
		
		fire(0.1);
		
	}
}

extern void object::Fourmi6()
{
	//fps(1000);
	Guepe guepe = new Guepe();
	
	while (true)
	{
		guepe.cherche(position, 50);
		
		guepe.tire(position, orientation);
	}
}
object radarGuepe(point orig, float dist)
{
	int i;
	object pr, r;
	float mindist;
	
	i = 0;
	mindist = 1000;
	while (i<30)
	{
		pr = radar(i);
		if (pr != null)
		{
			
			if (F(orig, pr.position) < mindist and pr.category == AlienWasp and pr.altitude > 3)
			{
				mindist = distance(orig, pr.position);
				r = pr;
			}
		}
		i = i+1;
	}
	if (mindist < dist) return(r); else return(null);
}


class Guepe
{
	
	point pos;
	
	
	void cherche(point orig, float dist)
	{
		object p;
		point o;
		
		p = radarGuepe(orig, dist);
		while (p == null)
		{
			wait(0.1);
			p = radarGuepe(orig, dist);
		}
		
		pos.x = p.position.x;
		pos.y = p.position.y;
		pos.z = p.position.z;
		
		//o = p.position;
		//wait(0.1);
		
		//vitessex = (p.position.x - o.x)/0.1;
		//vitessey = (p.position.y - o.y)/0.1;
		//vitessez = (p.position.z - o.z)/0.1;
		
	}
	
	
	void tire(point orig, float orient)
	{
		//float t = 3;          //temps d'anticipation
		float angle;
		point cible;
		
		cible.x = pos.x;// + t*vitessex;
		cible.y = pos.y;// + t*vitessey;
		cible.z = pos.z;// + t*vitessez;
		
		if (cible.x == 0) angle = 90; else
		  angle = atan(cible.y / cible.x);
		if (cible.x < 0) angle = angle + 180;
		angle = angle - orient;
		if (angle > 180) angle = angle - 360;
		if (angle < -180) angle = angle + 360;
		turn(angle);
		
		angle = atan((cible.z-orig.z) / distance2d(orig, cible));
		aim(angle);
		
		fire(0.1);
		
	}
}

extern void object::Fourmi6()
{
	//fps(1000);
	Guepe guepe = new Guepe();
	
	while (true)
	{
		guepe.cherche(position, 50);
		
		guepe.tire(position, orientation);
	}
}

public extern void TestTableau ()
{
	int		tableau [ 12 ] ;

	point	array[ 12 ] [ 14 ] ;

	point	zéro ( 1, 2 ) ;
	point	a = zéro ;

	for ( int i = 0 ; i < 10 ; i++ ) array[ i ] [ i ]= zéro ;

	array[ 5 ] [3 ] . x =1.5 ;

	array[ 2 ] [ 2 ] . y = array[ 5 ] [ 5 ] . x ;

	array[ 4 ] = array [ 2 ] ; 

	for ( int i = 0 ; i < 10 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) println ( i, j, array [ i ] [ j ]  ) ; 

	show( zéro, a, array );

}

