From b6ef7e067de3aebc8943ac9e032f56c3b3e5b9af Mon Sep 17 00:00:00 2001 From: Patrik Gornicz Date: Wed, 21 Jan 2009 20:05:08 -0500 Subject: [PATCH] refactored entityManager --- src/entityManager.cpp | 92 +++++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/src/entityManager.cpp b/src/entityManager.cpp index 7d75d3c..64d7480 100644 --- a/src/entityManager.cpp +++ b/src/entityManager.cpp @@ -33,32 +33,32 @@ /// ***** Private Method Headers ***** -void updateParticles(float); -void updatePhysics(float); -void clearUpParticles(); -void clearUpPhysics(); +static void updateParticles(float); +static void updatePhysics(float); +static void addOrRemoveParticles(); +static void addOrRemovePhysics(); /// ***** Private Variables ***** typedef std::set setPart; -setPart particles_To_Add; -setPart active_Particles; -setPart particles_To_Remove; +static setPart particles_To_Add; +static setPart active_Particles; +static setPart particles_To_Remove; typedef std::set setPhys; -setPhys physics_To_Add; -setPhys active_Physics; -setPhys physics_To_Remove; +static setPhys physics_To_Add; +static setPhys active_Physics; +static setPhys physics_To_Remove; -Mutex particleSetLock; -Mutex physicsEntitySetLock; +static Mutex muSetPart; +static Mutex muSetPhys; /// ***** Initializers/Cleaners ***** void manager::init() { - particleSetLock.init(); - physicsEntitySetLock.init(); + muSetPart.init(); + muSetPhys.init(); collision::init(); } @@ -66,40 +66,44 @@ void manager::clean() { collision::clean(); - physicsEntitySetLock.clean(); - particleSetLock.clean(); + muSetPhys.clean(); + muSetPart.clean(); } /// ***** Public Methods ***** -void manager::add(Entity* e) +void manager::add(Entity* pe) { + DASSERT(pe != NULL); + { - Particle* p = dynamic_cast(e); - if( p != 0 ) + Particle* pp = dynamic_cast(pe); + if( pp != NULL ) { - particles_To_Add.insert(p); + particles_To_Add.insert(pp); return; } } { - PhysicsEntity* p = dynamic_cast(e); - if( p != 0 ) + PhysicsEntity* ppe = dynamic_cast(pe); + if( ppe != NULL ) { - physics_To_Add.insert(p); + physics_To_Add.insert(ppe); return; } } DPF(0, "ENTITY TYPE NOT SUPPORTED BY addEntity()!!"); } -void manager::remove(Entity* e) +void manager::remove(Entity* pe) { + DASSERT(pe != NULL); + { - Autolock lock( particleSetLock ); - Particle* p = dynamic_cast(e); - if( p != 0 ) + Autolock lock( muSetPart ); + Particle* p = dynamic_cast(pe); + if( p != NULL ) { particles_To_Remove.insert(p); return; @@ -107,11 +111,11 @@ void manager::remove(Entity* e) } { - Autolock lock( physicsEntitySetLock ); - PhysicsEntity* p = dynamic_cast(e); - if( p != 0 ) + Autolock lock( muSetPhys ); + PhysicsEntity* ppe = dynamic_cast(pe); + if( ppe != NULL ) { - physics_To_Remove.insert(p); + physics_To_Remove.insert(ppe); return; } } @@ -132,11 +136,12 @@ void manager::update(float time_step) } void manager::draw() { - clearUpParticles(); { - Autolock lock( particleSetLock ); + Autolock lock( muSetPart ); - // update active Particle*s + addOrRemoveParticles(); + + // draw active Particle*s for( setPart::iterator it = active_Particles.begin(); it != active_Particles.end(); it++ ) @@ -145,11 +150,12 @@ void manager::draw() } } - clearUpPhysics(); { - Autolock lock( physicsEntitySetLock ); + Autolock lock( muSetPhys ); + + addOrRemovePhysics(); - // update active PhysicsEntity*s + // draw active PhysicsEntity*s for( setPhys::iterator it = active_Physics.begin(); it != active_Physics.end(); it++ ) @@ -163,7 +169,7 @@ void manager::draw() void updateParticles(float time_step) { - clearUpParticles(); + addOrRemoveParticles(); // update active Particle*s for( setPart::iterator it = active_Particles.begin(); @@ -175,7 +181,7 @@ void updateParticles(float time_step) } void updatePhysics(float time_step) { - clearUpPhysics(); + addOrRemovePhysics(); // apply collision math collision::update(active_Physics); @@ -188,9 +194,9 @@ void updatePhysics(float time_step) (*it)->update(time_step); } } -void clearUpParticles() +void addOrRemoveParticles() { - Autolock lock( particleSetLock ); + Autolock lock( muSetPart ); // add new Particle*s to Active for( setPart::iterator it = particles_To_Add.begin(); @@ -210,9 +216,9 @@ void clearUpParticles() } particles_To_Remove.clear(); } -void clearUpPhysics() +void addOrRemovePhysics() { - Autolock lock( physicsEntitySetLock ); + Autolock lock( muSetPhys ); // add new PhysicsEntity*s to Active for( setPhys::iterator it = physics_To_Add.begin(); -- 2.10.2