time_steping collisions was a MASSIVE bottleneak, removed
authorPatrik Gornicz <Gornicz.P@gmail.com>
Fri, 22 Aug 2008 01:37:23 +0000 (21:37 -0400)
committerPatrik Gornicz <Gornicz.P@gmail.com>
Fri, 22 Aug 2008 01:37:23 +0000 (21:37 -0400)
src/collisionHandler.cpp
src/collisionHandler.h
src/entityManager.cpp

index 08dc904..7d99469 100644 (file)
 
 /// ***** Private Method Headers *****
 
-void applyCollisionAt(PhysicsEntity* p1, PhysicsEntity* p2, float time_step);
-void applyCollisionAt(Ball* b1, Ball* b2, float time_step);
+void applyCollisionAt(PhysicsEntity* p1, PhysicsEntity* p2);
+void applyCollisionAt(Ball* b1, Ball* b2);
 
-CollisionInfo* getInfoAt(Ball* b1, Ball* b2, float time_step);
+CollisionInfo* getInfoAt(Ball* b1, Ball* b2);
 
 /// ***** Private Variables *****
 
@@ -49,7 +49,7 @@ void collision::clean()
 
 /// ***** Public Methods *****
 
-void collision::update(setPhys sp, float time_step)
+void collision::update(setPhys& sp)
 {
     for( setPhys::iterator it1 = sp.begin();
          it1 != sp.end();
@@ -61,7 +61,7 @@ void collision::update(setPhys sp, float time_step)
         {
             if( *it1 != *it2 )
             {
-                applyCollisionAt(*it1, *it2, time_step);
+                applyCollisionAt(*it1, *it2);
             }
         }
     }
@@ -70,14 +70,14 @@ void collision::update(setPhys sp, float time_step)
 
 /// ***** Private Methods *****
 
-void applyCollisionAt(PhysicsEntity* p1, PhysicsEntity* p2, float time_step)
+void applyCollisionAt(PhysicsEntity* p1, PhysicsEntity* p2)
 {
     Ball* b1 = dynamic_cast<Ball*>(p1);
     Ball* b2 = dynamic_cast<Ball*>(p2);
 
     if( b1 != NULL && b2 != NULL )
     {
-        applyCollisionAt(b1, b2, time_step);
+        applyCollisionAt(b1, b2);
         return;
     }
 
@@ -86,10 +86,10 @@ void applyCollisionAt(PhysicsEntity* p1, PhysicsEntity* p2, float time_step)
 #endif
 }
 
-void applyCollisionAt(Ball* b1, Ball* b2, float time_step)
+void applyCollisionAt(Ball* b1, Ball* b2)
 {
     // /*
-    CollisionInfo* info = getInfoAt(b1, b2, time_step);
+    CollisionInfo* info = getInfoAt(b1, b2);
 
     if(info == NULL)
         return;
@@ -105,8 +105,8 @@ void applyCollisionAt(Ball* b1, Ball* b2, float time_step)
 
     float e = (b1->CoR + b2->CoR) / 2;
 
-    Vector2 v1 = b1->velocityAt(time_step);
-    Vector2 v2 = b2->velocityAt(time_step);
+    Vector2 v1 = b1->velocityRaw();
+    Vector2 v2 = b2->velocityRaw();
 
 
     float iTop = -(e + 1) * (v1 - v2).dot(normal);
@@ -121,16 +121,16 @@ void applyCollisionAt(Ball* b1, Ball* b2, float time_step)
     // */
 }
 
-CollisionInfo* getInfoAt(Ball* b1, Ball* b2, float time_step)
+CollisionInfo* getInfoAt(Ball* b1, Ball* b2)
 {
     // a few values to simplify the equations
     float r1 = b1->radius;
     float r2 = b2->radius;
 
-    Vector2 p1 = b1->positionAt(time_step);
-    Vector2 p2 = b2->positionAt(time_step);
-    Vector2 v1 = b1->velocityAt(time_step);
-    Vector2 v2 = b2->velocityAt(time_step);
+    Vector2 p1 = b1->positionRaw();
+    Vector2 p2 = b2->positionRaw();
+    Vector2 v1 = b1->velocityRaw();
+    Vector2 v2 = b2->velocityRaw();
 
     // quick binding box check
     if (p1.x - r1 > p2.x + r2
index 27940c2..d9b54c1 100644 (file)
@@ -29,7 +29,7 @@ namespace collision
     void init();
     void clean();
 
-    void update(setPhys, float);
+    void update(setPhys&);
 }
 
 #endif // COLLISIONHANDLER_H
index c78a7ce..cbe9e03 100644 (file)
@@ -187,7 +187,7 @@ void updatePhysics(float time_step)
     physics_To_Remove.clear();
 
     // apply collision math
-    collision::update(active_Physics, time_step);
+    collision::update(active_Physics);
 
     // update active PhysicsEntity*s
     for( setPhys::iterator it = active_Physics.begin();