src/PhysicsWorld.cc
author terom
Mon, 08 Dec 2008 12:02:20 +0000
changeset 282 e0e4dfc3e528
parent 255 99431fdb0dc8
child 288 47a5d7896aec
permissions -rw-r--r--
compiles cleanly with -Wall -Wextra -Wconversion, not tested, but that shouldn't break anything :)

#include "PhysicsWorld.hh"
#include "Engine.hh"

#include <functional>

PhysicsWorld::PhysicsWorld (Vector gravity, Vector dimensions) :
    // XXX: assume Vector == PixelCoordinate
    Terrain((unsigned int) dimensions.x, (unsigned int) dimensions.y, 1337), 
    dimensions(dimensions), 
    gravity(gravity),
    tick_timer(PHYSICS_TICK_MS)
{
    slots.connect(tick_timer.sig_tick(), this, &PhysicsWorld::tick);
    tick_timer.start();
}

void PhysicsWorld::addPhysicsObject (PhysicsObject *po) {
    objects.push_back(po);
}

void PhysicsWorld::removePhysicsObject (PhysicsObject *po) {
    objects.remove(po);
}

void PhysicsWorld::tick (TimeMS tick_length) {
    // tick each object in turn
    for (std::list<PhysicsObject*>::iterator i = objects.begin(); i != objects.end(); i++) {
        (*i)->tick(tick_length); 
    }

    // Delete destroyed objects
    objects.remove_if(std::mem_fun(&PhysicsObject::removeIfDestroyed));
}