X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?a=blobdiff_plain;f=src%2FeffectManager.cpp;h=00606523e29aab2449e9c413298cc7df39facc1a;hb=5e0713e5967be038b1b0cc5f0ffbd0180e3f7099;hp=d4c07e57fed55b6a9328b650f86406e078a0e515;hpb=e68f847b245153427266841ae724d602ca434c29;p=physics.git diff --git a/src/effectManager.cpp b/src/effectManager.cpp index d4c07e5..0060652 100644 --- a/src/effectManager.cpp +++ b/src/effectManager.cpp @@ -17,66 +17,97 @@ #include "effectManager.h" +#include +using namespace bear; + +#include + #include "Effects/Effect.h" #include "Effects/Gravity.h" +#include "Effects/GravityWell.h" #include "Effects/Screen.h" +#include "input/inputManager.h" +#include "config/config.h" + /// ***** Private Variables ***** -Effect** effects; -int numEffects; +typedef std::set setEffect; +setEffect active_Effects; + +GravityWell* pMouseWell; /// ***** Initializers/Cleaners ***** void effect::init() { - numEffects = 2; - effects = new Effect*[numEffects](); + pMouseWell = new GravityWell(Vector2(0,0)); - effects[0] = new Gravity(); - effects[1] = 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 ***** -Vector2 effect::positionDelta(const PhysicsEntity* e, float time_step) +void effect::update(float) +{ + +} +void effect::handleInput() +{ + if(cfg::mouseWellFollow()) + pMouseWell->setPosition(input::mousePosition()); + + if(cfg::mouseWellOn()) + active_Effects.insert(pMouseWell); + if(cfg::mouseWellOff()) + active_Effects.erase(pMouseWell); +} + +Vector2 effect::positionDelta(const PhysicsEntity* ppe, float fTimeStep) { 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(ppe, fTimeStep); } return acc; } -Vector2 effect::velocityDelta(const PhysicsEntity* e, float time_step) +Vector2 effect::velocityDelta(const PhysicsEntity* ppe, float fTimeStep) { 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(ppe, fTimeStep); } return acc; } -Vector2 effect::forceDelta(const PhysicsEntity* e, float time_step) +Vector2 effect::forceDelta(const PhysicsEntity* ppe, float fTimeStep) { 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(ppe, fTimeStep); } return acc;