#ifndef INCLUDED_OBJECT
#define INCLUDED_OBJECT

#include <Math/Vector.h>

#include <memory>

namespace Dubious
{
namespace Renderer 
{
class VisibleObject;
class Model;
typedef std::shared_ptr<VisibleObject> VisibleObjectPtr;
typedef std::shared_ptr<Model> ModelPtr;
}
namespace Physics
{
class PhysicalObject;
class Model;
typedef std::shared_ptr<PhysicalObject> PhysicalObjectPtr;
typedef std::shared_ptr<Model> ModelPtr;
}
}

using namespace Dubious;

//////////////////////////////////////////////////////////////
class Object
{
public:
	Object( Renderer::ModelPtr pVisible, Renderer::ModelPtr pShadow, Physics::ModelPtr pPhysics, float Mass, bool StartSleeping );
	~Object();

	void				Update();

	void				SetPosition( const Math::Vector& P );
	Math::Vector		GetPosition() const ;
	int&				Value() { return m_Value; }

	Renderer::VisibleObjectPtr& Visible() { return m_pVisible; }
	Physics::PhysicalObjectPtr& Physics() { return m_pPhysics; }

private:
	Renderer::VisibleObjectPtr m_pVisible;
	Physics::PhysicalObjectPtr m_pPhysics;
	int					m_Value;
};

#endif
