X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?p=physics.git;a=blobdiff_plain;f=src%2FeffectManager.cpp;h=c59deccf2e9e92faf9e246d1f2e84727cc73ca47;hp=b77fc1d89e11b3256f2a4a17a768e1f2d88c497c;hb=f103ba70ea4095f42852cbfca9e5525737db8efb;hpb=a860c0c739f42bb52b3ad482cec6a57b5484fd71 diff --git a/src/effectManager.cpp b/src/effectManager.cpp index b77fc1d..c59decc 100644 --- a/src/effectManager.cpp +++ b/src/effectManager.cpp @@ -17,6 +17,8 @@ #include "effectManager.h" +#include + #include "Effects/Effect.h" #include "Effects/Gravity.h" #include "Effects/GravityWell.h" @@ -28,8 +30,8 @@ /// ***** Private Variables ***** -Effect** effects; -int numEffects; +typedef std::set setEffect; +setEffect active_Effects; GravityWell* mouseWell; @@ -37,23 +39,20 @@ GravityWell* mouseWell; void effect::init() { - numEffects = 3; - effects = new Effect*[numEffects](); - mouseWell = new GravityWell(input::mousePosition()); - effects[0] = new Screen(); - effects[1] = new Gravity(); - effects[2] = mouseWell; + active_Effects.insert(new Screen()); + active_Effects.insert(new Gravity()); + active_Effects.insert(mouseWell); } void effect::clean() { - for(int i=0; i < numEffects; i++) + for( setEffect::iterator it = active_Effects.begin(); + it != active_Effects.end(); + it++ ) { - delete effects[i]; + // TODO !!!!!!!!! } - - delete[] effects; } /// ***** Public Methods ***** @@ -64,24 +63,24 @@ void effect::update(float) } void effect::handleInput() { - if(cfg::mouseWellOn()) - { - numEffects = 3; + if(cfg::mouseWellFollow()) mouseWell->setPosition(input::mousePosition()); - } - else - { - numEffects = 2; - } + + if(cfg::mouseWellOn()) + active_Effects.insert(mouseWell); + if(cfg::mouseWellOff()) + active_Effects.erase(mouseWell); } Vector2 effect::positionDelta(const PhysicsEntity* e, float time_step) { Vector2 acc(0,0); - for(int i=0; i < numEffects; i++) + for( setEffect::iterator it = active_Effects.begin(); + it != active_Effects.end(); + it++ ) { - acc += effects[i]->positionDelta(e, time_step); + acc += (*it)->positionDelta(e, time_step); } return acc; @@ -90,9 +89,11 @@ Vector2 effect::velocityDelta(const PhysicsEntity* e, float time_step) { Vector2 acc(0,0); - for(int i=0; i < numEffects; i++) + for( setEffect::iterator it = active_Effects.begin(); + it != active_Effects.end(); + it++ ) { - acc += effects[i]->velocityDelta(e, time_step); + acc += (*it)->velocityDelta(e, time_step); } return acc; @@ -101,9 +102,11 @@ Vector2 effect::forceDelta(const PhysicsEntity* e, float time_step) { Vector2 acc(0,0); - for(int i=0; i < numEffects; i++) + for( setEffect::iterator it = active_Effects.begin(); + it != active_Effects.end(); + it++ ) { - acc += effects[i]->forceDelta(e, time_step); + acc += (*it)->forceDelta(e, time_step); } return acc;