ekku@197: #ifndef PHYSICS_WORLD_HH ekku@197: #define PHYSICS_WORLD_HH ekku@197: ekku@197: #include ekku@197: #include ekku@197: ekku@197: #include ekku@197: #include ekku@197: #include saiam@199: terom@205: #include "Terrain.hh" saiam@199: ekku@197: class PhysicsWorld; ekku@197: ekku@197: #include "PhysicsObject.hh" ekku@197: #include "Vector.hh" terom@205: #include "Timer.hh" ekku@197: #include "Config.hh" ekku@197: ekku@197: /** ekku@197: * PhysicsWorld class. PhysicsWorld contains PhysicsObjects that are ekku@197: * simulated in the PhysicsWorld. ekku@197: */ ekku@197: class PhysicsWorld : public Terrain { ekku@197: friend class PhysicsObject; ekku@197: ekku@197: private: ekku@197: saiam@208: ekku@197: protected: ekku@222: std::list objects; ekku@197: ekku@197: // Contains connections between signals and slots ekku@197: CL_SlotContainer slots; ekku@197: ekku@197: Vector dimensions; ekku@197: Vector gravity; ekku@197: ekku@197: public: saiam@208: // Someone is going to kill me for this saiam@208: Timer tick_timer; saiam@208: saiam@199: PhysicsWorld(Vector gravity, Vector dimensions); saiam@199: ekku@225: /** ekku@197: * Add object to the PhysicsWorld. ekku@197: * ekku@197: * @param object Pointer to the PhysicsObject to add. ekku@197: */ ekku@222: void addPhysicsObject(PhysicsObject *object); ekku@197: ekku@197: /** ekku@225: * Remove the object from the PhysicsWorld. ekku@225: */ ekku@225: void removePhysicsObject (PhysicsObject *po); ekku@225: ekku@225: /** ekku@197: * Advance one time step in physics simulation. ekku@197: */ terom@300: void tick (TimeMS tick_length); ekku@197: ekku@197: /** ekku@197: * Get current tick in physics simulation. ekku@197: * ekku@197: * @return tick Current simulation tick. ekku@197: */ terom@300: TickCount getTicks (void); ekku@197: }; ekku@197: ekku@197: #endif