#ifndef INCLUDED_PHYSICS_PHSYICALOBJECT
#define INCLUDED_PHYSICS_PHSYICALOBJECT

#include <Math/CoordinateSpace.h>

#include <memory>

class btRigidBody;

//////////////////////////////////////////////////////////////
namespace Dubious {
namespace Physics {

class Model;
typedef std::shared_ptr<Model> ModelPtr;

/// @brief Representation of a physics object.  
///
/// Mostly just a wrapper around the Bullet rigid body
class PhysicalObject
{
public:
	PhysicalObject( ModelPtr pModel, float Mass, bool StartSleeping );
	~PhysicalObject();

	Math::CoordinateSpace GetCoordinateSpace() const;
	void				SetCoordinateSpace( const Math::CoordinateSpace& Coord );

	void				SetVelocity( const Math::Vector& V );

private:
	PhysicalObject( const PhysicalObject& );
	PhysicalObject& operator=( const PhysicalObject& );

	friend class		World;

	ModelPtr			m_pModel;
	btRigidBody*        m_pBody;
};

}
}

#endif
