--[[
Description comportement : le robot du joueur cherche puis suit un robot ennemi
]]--


--Données de l'ennemi focus lorsqu'on la vu la derniere fois
Nom = "NoPlayer"
PosX = 0
PosY = 0
rotation = 0

--Si on focus un ennemi
isLocEnemy = false
--Si on perd de vue l'ennemi pendant 2 seconde
tpsLooseEnemy = 2
--Temps ecoulé depuis la derniere fois qu'on a vu l'ennemi
tpsEcouleLooseEnemy = 0


--Met à jour les données de l'ennemi
function updateEnemy()
	--Si le joueur ne correspond pas au joueur focuse et qu'il est plus éloigné on ne le focus pas
	if (Nom ~= EnemyName() and Nom ~= "NoPlayer")  then	
		if (getDist() < math.sqrt(math.pow(XPositionEnemy() - XPosition(), 2) + math.pow(YPositionEnemy() - YPosition(), 2))) then
			return
		end
	end

	
	tpsEcouleLooseEnemy = 0
	PosX = XPositionEnemy()
	PosY = YPositionEnemy()
	rotation = RotationEnemy()
	Nom = EnemyName()
end

--Comportement qui fait tourner le robot sur lui même pour detecter un ennemi
--renvoie true si un ennemi est focus, false sinon
function findEnemy()	
	--Si il y'a un ennemi en face de nous
	if (IsNextObstacleEnemy()) then	
		updateEnemy()
		StopTurning()
		return true
	end
	
	StopShooting()
	TurnLeft()
	return false
end

--Obtien la distance entre notre robot et le robot focus
function getDist()
	return math.sqrt(math.pow(PosX - XPosition(), 2) + math.pow(PosY - YPosition(), 2))
end

--Comportement du robot qui suit l'ennemi focus
function followEnemy(timeStep)
	StopMoving()
	StopTurning()
	
	--Si un ennemi est en face
	if (IsNextObstacleEnemy()) then	
		updateEnemy()
		StopTurning()
		--StartShooting()
		
		--Si on est éloigné on avance, si on est trop prés on recule, sinon on ne bouge plus
		if (getDist() > 15)then
			MoveForward()
		elseif (getDist() < 3) then
			MoveBackward()
		else
			StopMoving()
		end
		return
	end
	
	StopShooting()
	
	--On actualise le temps écoulé depuis la perte de vu de l'ennemi focus
	tpsEcouleLooseEnemy = tpsEcouleLooseEnemy + timeStep
	
	--Si le temps est trop long on se remet à la recherche d'un ennemi
	if (tpsLooseEnemy < tpsEcouleLooseEnemy) then
		isLocEnemy = false
		Nom = "NoPlayer"
		return
	end
	
	--On calcule l'angle entre les deux robots
	angle = math.atan2(-PosX + XPosition(),-PosY + YPosition())
	
	
	mon_angle = Rotation()
	MoveForward()
	
	
	if (angle < mon_angle) then 
		TurnRight()
	else
		TurnLeft()
	end	
end


function Run (timeStep) 
	if (isLocEnemy == false) then		
		if (findEnemy()) then							
			isLocEnemy = true
		end
	elseif (isLocEnemy) then
		followEnemy(timeStep)
	end
end
