X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?a=blobdiff_plain;f=src%2FeffectManager.cpp;h=a75e5d83a2ecb45267d3851d45463cf5139ccf44;hb=9ae1c0798cff2d1ed816bccb0723bd5a4ca97194;hp=2e50c651ebabc8d43c3b9b491c64c71f22e5c205;hpb=a823a80039c6069bb7676433832d9f9413494860;p=physics.git diff --git a/src/effectManager.cpp b/src/effectManager.cpp index 2e50c65..a75e5d8 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" @@ -24,11 +26,12 @@ #include "Vector2.h" #include "input/inputManager.h" +#include "config/config.h" /// ***** Private Variables ***** -Effect** effects; -int numEffects; +typedef std::set setEffect; +setEffect active_Effects; GravityWell* mouseWell; @@ -36,23 +39,19 @@ GravityWell* mouseWell; void effect::init() { - numEffects = 3; - effects = new Effect*[numEffects](); - - mouseWell = new GravityWell(input::mousePosition()); + mouseWell = new GravityWell(Vector2(0,0)); - effects[0] = mouseWell; - effects[1] = new Gravity(); - effects[2] = new Screen(); + active_Effects.insert(new Screen()); + active_Effects.insert(new Gravity()); } 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 ***** @@ -63,16 +62,24 @@ void effect::update(float) } void effect::handleInput() { - mouseWell->setPosition(input::mousePosition()); + if(cfg::mouseWellFollow()) + mouseWell->setPosition(input::mousePosition()); + + 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; @@ -81,9 +88,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; @@ -92,9 +101,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;