X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?a=blobdiff_plain;f=src%2FeffectManager.cpp;h=a75e5d83a2ecb45267d3851d45463cf5139ccf44;hb=9ae1c0798cff2d1ed816bccb0723bd5a4ca97194;hp=c22510a5b6d410c2a312b4759569e49372145788;hpb=b8adb435d85694b9b62e8be2fd63fe41b361a132;p=physics.git diff --git a/src/effectManager.cpp b/src/effectManager.cpp index c22510a..a75e5d8 100644 --- a/src/effectManager.cpp +++ b/src/effectManager.cpp @@ -1,40 +1,85 @@ +/* + * Copyright (C) 2008 Patrik Gornicz, Gornicz_P (at) hotmail (dot) com. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include "effectManager.h" +#include + #include "Effects/Effect.h" #include "Effects/Gravity.h" +#include "Effects/GravityWell.h" #include "Effects/Screen.h" +#include "Vector2.h" +#include "input/inputManager.h" +#include "config/config.h" + /// ***** Private Variables ***** -Effect** effects; -int numEffects; -/// ***** Public Methods ***** +typedef std::set setEffect; +setEffect active_Effects; + +GravityWell* mouseWell; + +/// ***** Initializers/Cleaners ***** void effect::init() { - numEffects = 2; - effects = new Effect*[numEffects](); + mouseWell = 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 !!!!!!!!! } +} + +/// ***** Public Methods ***** + +void effect::update(float) +{ + +} +void effect::handleInput() +{ + if(cfg::mouseWellFollow()) + mouseWell->setPosition(input::mousePosition()); - delete[] effects; + 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; @@ -43,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; @@ -54,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;