#ifndef CABSTRACTTANGIBLEWORLD_HPP
#define CABSTRACTTANGIBLEWORLD_HPP

namespace CosmicCore {
	/**
	* @brief Class representing any physical world - abstract.
	*/
	class CAbstractTangibleWorld {

	private:

		/**
		* @brief The ODE world ID.
		*/
		//dWorldID m_world;

		/**
		* @brief The ODE collision space.
		*/
		//dSpaceID m_space;

		/**
		* @brief The ODE joint Group for the collisions.
		*/
		//dJointGroupID m_jointGroup;

	public:

		/**
		* @brief CTangibleWorld's default constructor. Does nothing.
		*/
		CAbstractTangibleWorld();

		/**
		* @brief CTangibleWorld's destructor.
		*/
		~CAbstractTangibleWorld();

		/**
		* @brief Update the physical world, move the bodies.
		* @param[in] seconds The time to spend in the current step of simulation. 
		* If an object falls and seconds equals to 1, the object's position will correspond to 1 second of falling after the call of the function.
		*/
		virtual void updateWorld(float seconds) = 0;

		/**
		* @brief Getter to the ODE world ID.
		* @return The ODE world ID, actually return m_world.
		*/
		//dWorldID getWorld();

		/**
		* @brief Getter to the ODE space ID.
		* @return The ODE space ID, actually return m_space.
		*/
		//dSpaceID getSpace(void);

		virtual void initWorld() = 0;

		/**
		* @brief Getter to the ODE joint group.
		* @return The ODE joint group , actually return m_jointGroup.
		*/
		//dJointGroupID getJointGroup(void);

		/**
		* @brief The collision callback of the ODE space.
		* Is called each time a collision occurs when the ODE world is updated.
		*/
		//static dNearCallback callback;

	};
}
#endif