/***************************************************************************
*                                                                          *
*  Copyright (C) Golaem S.A.  All Rights Reserved.                         *
*                                                                          *
***************************************************************************/

#pragma once

#include "glmSDKAPI.h"
#include "glmIRoadmapCosts.h"
#include "glmAngle.h"

namespace glm
{
	/** 
	* \brief Abstract class defining the weights of a roadmap.
	*
	* \ingroup PathLib
	*
	* \author Golaem <dev@golaem.com>
	*/
	class GLM_SDK_API DistanceRoadmapCosts : public IRoadmapCosts
	{
	public:

		GLM_CLASS_STAT_ID( glm::MemoryStatIds::Simulation)

		/**
		* \brief Constructor.
		*/
		DistanceRoadmapCosts();

		virtual ~DistanceRoadmapCosts() {}

		/**
		* \name Ancestor's definitions
		*/
		//@{
		virtual float getArcCost(const IOrientedGraph& queryGraph, const RoadmapArcId & arcId) const;
		virtual bool isArcUsable(const IOrientedGraph& queryGraph, const RoadmapArcId & arcId) const;
		virtual float getNodeCost(const IOrientedGraph& queryGraph, const RoadmapNodeId & waypointId) const;
		virtual bool isNodeUsable(const IOrientedGraph& queryGraph, const RoadmapNodeId & waypointId) const;
		virtual float getCostHeuristic(const IOrientedGraph& queryGraph, const RoadmapNodeId & widOrigin, const RoadmapNodeId & widDestination) const;
		virtual float getCostHeuristic(const IOrientedGraph& queryGraph, const RoadmapNodeId & widOrigin, const glm::Vector3& destination) const;
		//@}

		/// The minimumDistanceToObstacles of the entity that plans a path
		float _minimumDistanceToObstacles;

	protected:

	private:
		GLM_DISALLOW_COPY_AND_ASSIGN( DistanceRoadmapCosts );
	
	};
}
