X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?p=physics.git;a=blobdiff_plain;f=src%2FentityManager.cpp;h=65b82730954e99989a061174c6eafb11b0a53aa2;hp=ecf7955c5598e10d1a4bf1d9e1e5fcd2b53822d5;hb=3bccd1d78b605dc5b2898877601ad1a6374e0e44;hpb=e616366d12163fd5947cc87433e2dd51746e6846 diff --git a/src/entityManager.cpp b/src/entityManager.cpp index ecf7955..65b8273 100644 --- a/src/entityManager.cpp +++ b/src/entityManager.cpp @@ -21,6 +21,9 @@ #include #include +#include "locks/Mutex.h" +#include "locks/Autolock.h" + #include "Entities/Entity.h" #include "Entities/Particle.h" #include "Entities/PhysicsEntity.h" @@ -45,15 +48,15 @@ setPhys physics_To_Add; setPhys active_Physics; setPhys physics_To_Remove; -SDL_mutex* particleSetLock = NULL; -SDL_mutex* physicsEntitySetLock = NULL; +Mutex particleSetLock; +Mutex physicsEntitySetLock; /// ***** Initializers/Cleaners ***** void manager::init() { - particleSetLock = SDL_CreateMutex(); - physicsEntitySetLock = SDL_CreateMutex(); + particleSetLock.init(); + physicsEntitySetLock.init(); collision::init(); } @@ -61,11 +64,8 @@ void manager::clean() { collision::clean(); - SDL_DestroyMutex(particleSetLock); - particleSetLock = NULL; - - SDL_DestroyMutex(physicsEntitySetLock); - physicsEntitySetLock = NULL; + physicsEntitySetLock.clean(); + particleSetLock.clean(); } /// ***** Public Methods ***** @@ -128,7 +128,10 @@ void manager::update(float time_step) } void manager::draw() { - SDL_mutexP( particleSetLock ); + { + Autolock lock( particleSetLock ); + DPF(0, "Particle Draw Start"); + // update active Particle*s for( setPart::iterator it = active_Particles.begin(); it != active_Particles.end(); @@ -136,9 +139,14 @@ void manager::draw() { (*it)->draw(); } - SDL_mutexV( particleSetLock ); - SDL_mutexP( physicsEntitySetLock ); + DPF(0, "Particle Draw End"); + } + + { + Autolock lock( physicsEntitySetLock ); + DPF(0, "Physics Draw Start"); + // update active PhysicsEntity*s for( setPhys::iterator it = active_Physics.begin(); it != active_Physics.end(); @@ -146,32 +154,39 @@ void manager::draw() { (*it)->draw(); } - SDL_mutexV( physicsEntitySetLock ); + + DPF(0, "Physics Draw End"); + } } /// ***** Private Methods ***** void updateParticles(float time_step) { - SDL_mutexP( particleSetLock ); + { + Autolock lock( particleSetLock ); + // add new Particle*s to Active for( setPart::iterator it = particles_To_Add.begin(); it != particles_To_Add.end(); it++ ) { + DPF(0, "Particle Insert"); 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++ ) { + DPF(0, "Particle Delete"); active_Particles.erase(*it); } - particles_To_Remove.clear(); - SDL_mutexV( particleSetLock ); + } + + particles_To_Add.clear(); + particles_To_Remove.clear(); // update active Particle*s for( setPart::iterator it = active_Particles.begin(); @@ -183,25 +198,30 @@ void updateParticles(float time_step) } void updatePhysics(float time_step) { - SDL_mutexP( physicsEntitySetLock ); + { + Autolock lock( physicsEntitySetLock ); + // add new PhysicsEntity*s to Active for( setPhys::iterator it = physics_To_Add.begin(); it != physics_To_Add.end(); it++ ) { + DPF(0, "Physics Insert"); 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++ ) { + DPF(0, "Physics Delete"); active_Physics.erase(*it); } - physics_To_Remove.clear(); - SDL_mutexV( physicsEntitySetLock ); + } + + physics_To_Remove.clear(); + physics_To_Add.clear(); // apply collision math collision::update(active_Physics);