#ifndef SPHERICAL_TERRAIN_SHAPE_H
#define SPHERICAL_TERRAIN_SHAPE_H

#include "BulletCollision/CollisionShapes/btConcaveShape.h"

///The btSphericalTerrainShape simulates a spherical non-moving (static) terrain.
class btSphericalTerrainShape : public btConcaveShape
{
protected:
	btVector3	m_localAabbMin;
	btVector3	m_localAabbMax;
	btVector3	m_localScaling;
	
	btVector3	m_center;
	btScalar    m_radius;  //include the offset value in the radius

	// pointer to function that calculates the vertex on the terrain from the given point in space
	btVector3 (*calculateTerrainVertex)(const btVector3& position, const btVector3& center);

public:
	btSphericalTerrainShape(const btVector3& center, btScalar radius, btVector3 (*calcVertex)(const btVector3& position, const btVector3& center));

	virtual ~btSphericalTerrainShape();

	virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;

	virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const;

	virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const;

	virtual void setLocalScaling(const btVector3& scaling);
	virtual const btVector3& getLocalScaling() const;
	
	const btVector3& getCenter() const
	{
		return	m_center;
	}

	const btScalar&	getRadius() const
	{
		return	m_radius;
	}

	virtual const char*	getName()const {return "SPHERICALTERRAIN";}
};

#endif //SPHERICAL_TERRAIN_SHAPE_H




