/**
 * @class kEnemyAIComponent
 * @brief Handles Enemy AI Behaviour
 */
class kEnemyAIComponent
{
public:

	const EnumEnemyAICommonFlags CommonFlags();
	EnumEnemyAIGeneralFlags& SpawnFlags();
	const float GetAvoidanceAngle(const kVec3&in lookAtLocation, const float radius);
	
	 /**
	  * @brief Rotates yaw by maxSpeed to deltaAngle
	  * @param maxSpeed in radians
	  * @param deltaAngle in radians
	  */
	void Turn(const float maxSpeed, const float deltaAngle);
	
	/**
	 * @brief Returns true if a different actor(enemy or player) becomes a higher priority target (from taking damage from this override target. Example: Enemy attacks another enemy). This override target can not be unset unless the target has been killed.
	 */
	const bool HasOverrideTarget();
	
	/**
	 * @brief Call after kEnemyAIComponent::GetTargetInfo, in order for kEnemyAIComponent::PathTarget to return valid info.
	 */
	void GetMovementInfo();
	
	/**
	 * @brief Get the target info for sight/attacking
	 */
	kAITargetInfo& SightTarget(); //target to attack
	
	/**
	 * @brief Get the target info for movement
	 */
	kAITargetInfo& PathTarget();
	
	/**
	 * @brief Set how this AI will behaviour towards it's target
	 * @param ignoreTargetPath If true will not path to target
	 * @param ignoreTargetSight If true will ignore sight/attacking to target
	 */
	void SetNoUpdateTarget(const bool ignoreTargetPath, const bool ignoreTargetSight);
	
	/**
	 * @brief Get the Sight and Path Target Info which gets stored in kEnemyAIComponent::SightTarget and kEnemyAIComponent::PathTarget after calling this function
	 * @param getPathInfo If true kEnemyAIComponent::PathTarget will return updated info
	 * @param getSightInfo If true kEnemyAIComponent::SightTarget will return updated info
	 */
	void GetTargetInfo(const bool getPathInfo, const bool getSightInfo);
};
