#ifndef _RUFUSION_TREKKER_INTERFACE_H_
#define _RUFUSION_TREKKER_INTERFACE_H_

// Base types
#include "../Core/Type/RuType_Object.h"
#include "../Core/Collection/RuCollections.h"
#include "../Core/Math/RuMathVector.h"

#pragma unmanaged

// ************************************************************************************************************************************************************

class IRuFusion_Trekker_Interface : public IRuObject
{
	ruRTTI_DECLARE
	ruHEAP_DECLARE
	ruCLASSGUID_DECLARE

public:
	virtual								~IRuFusion_Trekker_Interface();

	// Collision testing
	virtual BOOL						TestPathValidity(const CRuVector3 &origin, const CRuVector3 &destination) = 0;

	// Location query
	virtual BOOL						TestRestingValidity(const CRuVector3 &origin) = 0;
	virtual BOOL						TestRestingHeight(const CRuVector3 &origin, REAL testDistance, REAL &restingHeightOut) = 0;

	// Path finding
	virtual BOOL						SetPathMaximumExpansion(INT32 pathMaximumExpansion) = 0;
	virtual BOOL						FindNearestNodeKey(const CRuVector3 &position, REAL radius, INT32 &nodeKeyOut) = 0;
	virtual BOOL						FindPath(INT32 originNodeKey, INT32 destinationNodeKey, CRuArrayList<CRuVector3> *pathPositionOut, CRuArrayList<INT32> *pathNodeKeysOut) = 0;
	virtual BOOL						FindPath(const CRuVector3 &origin, const CRuVector3 &destination, CRuArrayList<CRuVector3> *pathPositionOut, CRuArrayList<INT32> *pathNodeKeysOut) = 0;
};

// ************************************************************************************************************************************************************

#pragma managed

#endif
