gravity working through manager
[physics.git] / src / effectManager.cpp
index ab13b25..b661f51 100644 (file)
@@ -1,18 +1,61 @@
 #include "effectManager.h"
 
+#include "Effects/Effect.h"
 #include "Effects/Gravity.h"
 
-Gravity* g = new Gravity();
+/// ***** Private Variables *****
+Effect** effects;
+int numEffects;
+
+/// ***** Public Methods *****
+
+void effect::init()
+{
+    numEffects = 1;
+    effects = new Effect*[numEffects]();
+
+    effects[0] = new Gravity();
+}
+void effect::clean()
+{
+    for(int i=0; i < numEffects; i++)
+    {
+        delete effects[i];
+    }
+
+    delete effects;
+}
 
 Vector2 effect::positionDelta(const PhysicsEntity* e, float time_step)
 {
-    return g->positionDelta(e, time_step);
+    Vector2 acc(0,0);
+
+    for(int i=0; i < numEffects; i++)
+    {
+        acc += effects[i]->positionDelta(e, time_step);
+    }
+
+    return acc;
 }
 Vector2 effect::velocityDelta(const PhysicsEntity* e, float time_step)
 {
-    return g->velocityDelta(e, time_step);
+    Vector2 acc(0,0);
+
+    for(int i=0; i < numEffects; i++)
+    {
+        acc += effects[i]->velocityDelta(e, time_step);
+    }
+
+    return acc;
 }
 Vector2 effect::forceDelta(const PhysicsEntity* e, float time_step)
 {
-    return g->forceDelta(e, time_step);
+    Vector2 acc(0,0);
+
+    for(int i=0; i < numEffects; i++)
+    {
+        acc += effects[i]->forceDelta(e, time_step);
+    }
+
+    return acc;
 }