#ifndef COLLISIONINFO_H
#define COLLISIONINFO_H

#include "Point2D.h"

#include "MemoryManager/debugNew.h"

/**
 * Interface decrivant les informations necessaires pour gerer les collisions entre entitée.
 *
 * Toute classe heritant de CollisionInfo est automatiquement ajouté au manager de collisions.
 */
class CollisionInfo
{
public:
	/**
	 * constructeur par defaut.
	 */
	CollisionInfo();
	/**
	 * destructeur par defaut
	 */
	virtual ~CollisionInfo(void);
	/**
	 * methode permettant de recuperer la position de l'entitée sur laquelle sera effectuée les collisions.
	 * @return Point2D : la position de l'entitée
	 */
	virtual Point2D getPosition() = 0;
	/**
	 * methode permettant de recuperer le rayon de collision d'une entitée
	 * @return float : le rayon de collision de l'entité.
	 */
	virtual float getCollisionRadius() = 0;
	/**
	 * methode permettant de recuperer la direction dans laquelle est tournée l'entité
	 * @return float : l'angle dans lequel regarde l'entité. (en degré)
	 */
	virtual float getDirectionAngle() = 0;
	/**
	 * methode permettant de savoir si l'entité est en mouvement ou pas.
	 *
	 * lors d'une collision, une entité en mouvement est favorisée par rapposr à une entité immobile.
	 * @return bool : true si l'entité est en mouvement, false sinon.
	 */
	virtual bool isMoving() = 0;
	/**
	 * methode appelée par le manager de collision pour definir la nouvelle position de l'entité suite à une collision.
	 * @param pos : la nouvelle position de l'entité.
	 */
	virtual void setPostCollisionPosition(Point2D& pos) = 0;
	/**
	 * methode appelée par le manager de collision pour signaler a une entité qu'elle a subit une collision.
	 *
	 * Ceci permet a l'entité de savoir si elle doit reagire pour revenir à sa position d'origine ou pas.
	 */
	virtual void signalCollision() = 0;

	/**
	 * methode permettant de connaitre la vitesse de l'entité afin de determiner des priorité dans les collisions.
	 *
	 * Le manager de collision donne une plus grande priorité aux unitée plus rapides lors d'une collision entre
	 * 2 entités en mouvement.
	 * @return float : la vitesse de deplacement de l'unitée.
	 */
	virtual float getSpeedForCollision() = 0;

	/**
	 * methode permettant de savoir si l'entité peut traverser la foret
	 */
	virtual bool canCrossForest();
};

#include "MemoryManager/debugNewOff.h"

#endif
