X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?a=blobdiff_plain;f=src%2FentityManager.cpp;h=ecf7955c5598e10d1a4bf1d9e1e5fcd2b53822d5;hb=5829cb660da640894c1de518353b175fbb1a12e0;hp=c7fc78b91abbca14de1ba322edcccb98c31427db;hpb=54fe85c5d10e60da6a9c9bbde11f7215723da572;p=physics.git diff --git a/src/entityManager.cpp b/src/entityManager.cpp index c7fc78b..ecf7955 100644 --- a/src/entityManager.cpp +++ b/src/entityManager.cpp @@ -19,12 +19,14 @@ #include "debug.h" #include +#include #include "Entities/Entity.h" #include "Entities/Particle.h" #include "Entities/PhysicsEntity.h" -#include "collisionHandler.h" +#include "collisionManager.h" +#include "effectManager.h" /// ***** Private Method Headers ***** @@ -43,15 +45,27 @@ setPhys physics_To_Add; setPhys active_Physics; setPhys physics_To_Remove; +SDL_mutex* particleSetLock = NULL; +SDL_mutex* physicsEntitySetLock = NULL; + /// ***** Initializers/Cleaners ***** void manager::init() { + particleSetLock = SDL_CreateMutex(); + physicsEntitySetLock = SDL_CreateMutex(); + collision::init(); } void manager::clean() { collision::clean(); + + SDL_DestroyMutex(particleSetLock); + particleSetLock = NULL; + + SDL_DestroyMutex(physicsEntitySetLock); + physicsEntitySetLock = NULL; } /// ***** Public Methods ***** @@ -76,9 +90,7 @@ void manager::add(Entity* e) } } -#ifdef WARNINGS - cerr << "ENTITY TYPE NOT SUPPORTED BY addEntity()!!" << endl; -#endif + DPF(0, "ENTITY TYPE NOT SUPPORTED BY addEntity()!!"); } void manager::remove(Entity* e) { @@ -100,60 +112,66 @@ void manager::remove(Entity* e) } } -#ifdef WARNINGS - cerr << "ENTITY TYPE NOT SUPPORTED BY deleteEntity()!!" << endl; -#endif + DPF(0, "ENTITY TYPE NOT SUPPORTED BY deleteEntity()!!"); } void manager::handleInput() { - // TODO + effect::handleInput(); } void manager::update(float time_step) { + effect::update(time_step); + updateParticles(time_step); updatePhysics(time_step); } void manager::draw() { - // update active Particle*s - for( setPart::iterator it = active_Particles.begin(); - it != active_Particles.end(); - it++ ) - { - (*it)->draw(); - } + SDL_mutexP( particleSetLock ); + // update active Particle*s + for( setPart::iterator it = active_Particles.begin(); + it != active_Particles.end(); + it++ ) + { + (*it)->draw(); + } + SDL_mutexV( particleSetLock ); - // update active PhysicsEntity*s - for( setPhys::iterator it = active_Physics.begin(); - it != active_Physics.end(); - it++ ) - { - (*it)->draw(); - } + SDL_mutexP( physicsEntitySetLock ); + // update active PhysicsEntity*s + for( setPhys::iterator it = active_Physics.begin(); + it != active_Physics.end(); + it++ ) + { + (*it)->draw(); + } + SDL_mutexV( physicsEntitySetLock ); } /// ***** Private Methods ***** void updateParticles(float time_step) { - // add new Particle*s to Active - for( setPart::iterator it = particles_To_Add.begin(); - it != particles_To_Add.end(); - it++ ) - { - active_Particles.insert(*it); - } - particles_To_Add.clear(); + SDL_mutexP( particleSetLock ); + // add new Particle*s to Active + for( setPart::iterator it = particles_To_Add.begin(); + it != particles_To_Add.end(); + it++ ) + { + active_Particles.insert(*it); + } + particles_To_Add.clear(); - // remove dead Particle*s from Active - for( setPart::iterator it = particles_To_Remove.begin(); - it != particles_To_Remove.end(); - it++ ) - { - active_Particles.erase(*it); - } - particles_To_Remove.clear(); + // remove dead Particle*s from Active + for( setPart::iterator it = particles_To_Remove.begin(); + it != particles_To_Remove.end(); + it++ ) + { + active_Particles.erase(*it); + } + particles_To_Remove.clear(); + SDL_mutexV( particleSetLock ); // update active Particle*s for( setPart::iterator it = active_Particles.begin(); @@ -165,26 +183,28 @@ void updateParticles(float time_step) } void updatePhysics(float time_step) { - // add new PhysicsEntity*s to Active - for( setPhys::iterator it = physics_To_Add.begin(); - it != physics_To_Add.end(); - it++ ) - { - active_Physics.insert(*it); - } - physics_To_Add.clear(); + SDL_mutexP( physicsEntitySetLock ); + // add new PhysicsEntity*s to Active + for( setPhys::iterator it = physics_To_Add.begin(); + it != physics_To_Add.end(); + it++ ) + { + active_Physics.insert(*it); + } + physics_To_Add.clear(); - // remove dead PhysicsEntity*s from Active - for( setPhys::iterator it = physics_To_Remove.begin(); - it != physics_To_Remove.end(); - it++ ) - { - active_Physics.erase(*it); - } - physics_To_Remove.clear(); + // remove dead PhysicsEntity*s from Active + for( setPhys::iterator it = physics_To_Remove.begin(); + it != physics_To_Remove.end(); + it++ ) + { + active_Physics.erase(*it); + } + physics_To_Remove.clear(); + SDL_mutexV( physicsEntitySetLock ); // apply collision math - collision::update(active_Physics, time_step); + collision::update(active_Physics); // update active PhysicsEntity*s for( setPhys::iterator it = active_Physics.begin();