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

#pragma once

#include "glmSDKAPI.h"

//golaem core includes
#include <glmProgress.h>
#include <glmVector3.h>
#include <glmBoundingBox3.h>

struct rcPolyMeshDetail;

namespace glm
{
	class Entity ;
	class VoxelNavigationMesh2;
	class SemanticObjectSet;

	/**
	* \brief Compute Voxel based Navigation Mesh 2D Component functor
	*
	* \ingroup NavMesh
	*
	* \author Golaem <dev@golaem.com>
	*/
	class GLM_SDK_API VoxelNavigationMesh2Creator
	{
	public:
		/**
		* \brief default constructor
		*/
		VoxelNavigationMesh2Creator() ;

		/**
		* \brief destructor
		*/
		virtual ~VoxelNavigationMesh2Creator() ;

		/**
		* \brief Returns the process progress
		* \return the process progress
		*/
		const Progress::SP getProgress() const;

		/**
		* \brief Returns a reference to the process progress
		* \return a reference to the process progress
		*/
		Progress::SP touchProgress();

		/**
		* \brief Computes a VoxelNavigationMesh2
		* \return the computed VoxelNavigationMesh2
		*/
		VoxelNavigationMesh2* operator()(int meshIdx, const rcPolyMeshDetail* recastPolyMesh, bool& cancel);

	protected:
		/**
		* \brief This process progress.
		*/
		Progress::SP _progress;
	} ;
}
