#ifndef VISIBILITYAREA_H
#define VISIBILITYAREA_H

#include "Point2D.h"

#include "MemoryManager/debugNew.h"


namespace ground{
	/**
	 * interface permettant de recuperer les informations necessaires pour calculer la visibilitée d'une entitée
	 * sur la carte
	 *
	 * Toute entité souhaitant observer la carte doit imperativement heriter de cette classe.
	 */
	class VisibilityArea
	{
	public:
		/**
		 * destructeur par defaut.
		 */
		virtual ~VisibilityArea(){};
		/**
		 * methode permettant de recuperer la position de l'entitée (en case)
		 * @return Point2D : la position de l'entitée
		 */
		virtual Point2D& getVisibilityPosition() = 0;

		/**
		 * methode permettant de recuperer le rayon de vue d'une unitée (en cases)
		 * @return float : le rayon de vue de l'entitée.
		 */
		virtual float getVisibilityRadius() = 0;

		/**
		 * methode permettant de recuperer la hauteur de la tête de l'unitée.
		 *
		 * Cette methode est utilisée pour determiner la visibilitée en fonction des hauteures.
		 * On peut par exemple changer la heuteur de la tête quand une unitée est montée, ainsi, elle
		 * verra plus facilement au dessus des petits replis de terrain.
		 *
		 * @return float : la hauteur de la tête de l'unitée en coordonnée du monde (c'est a dire : PAS en cases)
		 */
		virtual float getHeadOffset() = 0;

		/**
		 * methode permettant de recuperer l'angle d'ouverture du regard de l'entitée
		 *
		 * @return float : l'angle d'ouverture du regard en degré
		 */
		virtual float getCutOffAngle() = 0;

		/**
		 * methode permettant de connaitre l'angle de la direction du regard de l'unitée.
		 * 
		 * @return  float : la direction du regard de l'unitée en degré.
		 */
		virtual float getViewAngle() = 0;
	};

};// namespace ground

#include "MemoryManager/debugNewOff.h"

#endif
