#ifndef SQUAREGRAPH_H
#define SQUAREGRAPH_H

#include "Graph.h"
#include "SquareNode.h"

#include "MemoryManager/debugNew.h"


namespace ground{
	/**
	 * classe gerant un graph de zones carré.
	 *
	 * les instance de cette classe sont parametrée par les resultats de la factory GraphBuilder.
	 */
	class SquareGraph : public Graph
	{
	private:
		/**
		 * le vecteur contenant l'ensemble des noeuds du graph sous forme de SquareNode
		 */
		std::vector<SquareNode*> squareGraph;

		/**
		 * le vecteur contenant l'ensemble des noeuds du graph sous forme de GraphNode (necessaire
		 * pour la methode getNodes())
		 */ 
		std::vector<GraphNode*> graph;
	public:
		/**
		 * constructeur par defaut
		 */
		SquareGraph(void);

		/**
		 * destructeur par defaut
		 */
		virtual ~SquareGraph(void);

		/**
		 * methode permettant de definire les noeud du graph.
		 * @param nodes : les noeud du graph.
		 */
		void setNodes(std::vector<SquareNode*>& nodes);

		/**
		 * methode permettant de recuperer l'ensemble des noeud du graph
		 * @return std::vector<GraphNode*> : vecteur contentant des pointur sur les noeud du graph
		 */
		std::vector<GraphNode*>& getNodes();

		/**
		 * methode permettant d'initialiser le graph pour le pathfinding.
		 *
		 * à appeler imperativement avant chaque pathFinding sur le graph.
		 */
		void initialisePathFinding();

	};
};// namespace ground


#include "MemoryManager/debugNewOff.h"

#endif
