
#ifndef ARMY_H
#define ARMY_H


#include <string>
#include <vector>
#include "Archer.h"
#include "Lancer.h"
#include "Infantry.h"
#include "Point2D.h"
#include "Unit.h"
#include "GroundArmyInfo.h"
#include "UnitEnumeration.h"

#include "MemoryManager/DebugNew.h"

class Army
{
private:
	
protected:

	/**
	* Le vecteur des unités de l'armée
	*/
	std::vector<Unit*> units;

	/**
	*
	*/
	ground::GroundArmyInfo groundArmyInfo;

	/**
	*
	*/
	std::string color;

public:
	Army(std::string& color);
	virtual ~Army();

	/**
	* Update de l'IA
	*/
	virtual void updateAI()=0;

	/**
	* Update des unités(déplacement...)
	*/
	virtual void updateUnit()=0;

	/**
	* Ajoute une unité dans l'armée
	*
	* @param type : le type de l'unité ajoutée
	* @param pos : la position de l'unité ajoutée
	*/
	void addUnit(unitEnumeration::UnitType type, Point2D& pos, float angle = 0);

	/**
	* Creer un groupe d'unité pour cette armée.
	*
	* @param type : le type des unités crées
	* @param number : le nombre d'unités crées
	* @param pos : le centre du cercle de géneration
	* @param radius : le rayon du cercle de géneration
	*/
	void createUnits(unitEnumeration::UnitType type, int number, Point2D& pos, float radius);

	/**
	* Creer un groupe d'unité pour cette armée.
	*
	* @param type : le type des unités crées
	* @param orig : le centre du rectangle
	* @param width : la largeur du rectangle
	* @param height : la hauteur du rectangle
	* @param angle : l'angle en degrée pour orienter le rectangle par rapport à l'origine
	*/
	void createUnits(unitEnumeration::UnitType type, Point2D& orig, float width, float height, float angle,float offset=1.0f);

	/**
	* Indique que la carte a été changée
	* Il faut faire appele a cette méthode dès que l'on charge la première carte ou que l'on la change
	* Cete méthode a pour effet de supprimer tout les unité et d'adapté l'armée à la nouvelle carte
	*/
	void mapChanged();

	/**
	*
	*/
	std::vector<Unit*>& getUnits();

	/**
	*
	*/
	ground::GroundArmyInfo& getGroundArmyInfo();
};

#include "MemoryManager/DebugNewOff.h"

#endif
