#ifndef ACTIONGROUPMOVE_H
#define ACTIONGROUPMOVE_H

#include "UnitAction.h"
#include "GroupPathFinder.h"
#include <vector>

#include "MemoryManager/debugNew.h"

class ActionGroupMove :	public UnitAction
{
private:
	/**
	 * le groupe avec lequel se deplace l'unité
	 */
	ground::GroupPathFinder * group;
	/**
	 * le mode de deplacement de l'unité
	 */
	ground::pathFinding::PathFinderMode pathFinderMode;
	/**
	 * le decalage de l'unité dans le groupe par rapport au centre du groupe
	 */
	Point2D offset;
	/**
	 * le chemin que doit parcourire l'unité
	 */ 
	std::vector<Point2D> path;

	/**
	 * methode permettant de deplacer l'unité à une vitesse donné
	 * @param speed : la vitesse à laquell on souhaite que l'unité se deplace
	 */
	void moveUnit(float speed);
	/**
	 * methode permettant de supprimer tout les points non passables au debut du chemin
	 */
	void removeInvalidePathStart();
public:
	/**
	 * constructeur par defaut
	 * @param u : l'unité sur laquel est effectué l'action
	 * @param state : l'etat dans lequel sera mis l'unité lors de l'execution de l'action
	 * @param group : le group avec lequel l'unité se deplace
	 * @param centerPath : le chemin du centre du groupe.
	 */
	ActionGroupMove(Unit * u,unitEnumeration::UnitState state,ground::GroupPathFinder * group,
					std::vector<Point2D>& centerPath, ground::pathFinding::PathFinderMode pathFinderMode);
	virtual ~ActionGroupMove(void);
	void execute();
};
#include "MemoryManager/debugNewOff.h"

#endif
