src/PhysicsWorld.hh
author nireco
Sun, 07 Dec 2008 18:23:18 +0000
changeset 248 e40ef56dc62c
parent 225 22ecb9cb9245
child 255 99431fdb0dc8
permissions -rw-r--r--
scrolling looks like it works
#ifndef PHYSICS_WORLD_HH
#define PHYSICS_WORLD_HH

#include <ClanLib/display.h>
#include <ClanLib/core.h>

#include <algorithm>
#include <functional>
#include <cmath>

#include "Terrain.hh"          

class PhysicsWorld;

#include "PhysicsObject.hh"
#include "Vector.hh"
#include "Timer.hh"
#include "Config.hh"

/**
* PhysicsWorld class. PhysicsWorld contains PhysicsObjects that are
* simulated in the PhysicsWorld.
*/
class PhysicsWorld : public Terrain {
    friend class PhysicsObject;

private:

    
protected:
    std::list<PhysicsObject*> objects;

    // Contains connections between signals and slots
    CL_SlotContainer slots;

    // TODO: Should these be somewhere else?
    Vector dimensions;
    Vector gravity;

public:
    // Someone is going to kill me for this
    Timer tick_timer;

    PhysicsWorld(Vector gravity, Vector dimensions);

    /**
     * Add object to the PhysicsWorld.
     *
     * @param object Pointer to the PhysicsObject to add.
     */
    void addPhysicsObject(PhysicsObject *object);
    
    /**
     * Remove the object from the PhysicsWorld.
     */
    void removePhysicsObject (PhysicsObject *po);
    
    /**
     * Advance one time step in physics simulation.
     */
    void tick(TimeMS tick_length);

    /**
     * Get current tick in physics simulation.
     *
     * @return tick Current simulation tick.
     */
    uint32_t getTick();
};

#endif