refactored Vector2
[physics.git] / src / collisionManager.cpp
index 8aa2dc7..81d5e05 100644 (file)
@@ -106,14 +106,14 @@ void placeEntity(PhysicsEntity* p)
 
         if( b != NULL )
         {
-            const float& xb     = b->positionRaw().x;
-            const float& yb     = b->positionRaw().y;
+            const float& xb     = b->positionRaw().m_fX;
+            const float& yb     = b->positionRaw().m_fY;
             const float& rad    = b->radius;
 
-            minP.x = xb - rad;
-            minP.y = yb - rad;
-            maxP.x = xb + rad;
-            maxP.y = yb + rad;
+            minP.m_fX = xb - rad;
+            minP.m_fY = yb - rad;
+            maxP.m_fX = xb + rad;
+            maxP.m_fY = yb + rad;
 
             goto start;
         }
@@ -135,15 +135,15 @@ void placeEntity(PhysicsEntity* p)
     return;
 
 start:
-    for( int x =  static_cast<int>( minP.x / (screenX / xDivisions) );
-             x <= static_cast<int>( maxP.x / (screenX / xDivisions) );
+    for( int x =  static_cast<int>( minP.m_fX / (screenX / xDivisions) );
+             x <= static_cast<int>( maxP.m_fX / (screenX / xDivisions) );
              x++ )
     {
         if(x < 0 || xDivisions <= x)
             break;
 
-        for( int y =  static_cast<int>( minP.y / (screenY / yDivisions) );
-                 y <= static_cast<int>( maxP.y / (screenY / yDivisions) );
+        for( int y =  static_cast<int>( minP.m_fY / (screenY / yDivisions) );
+                 y <= static_cast<int>( maxP.m_fY / (screenY / yDivisions) );
                  y++ )
         {
             if(y < 0 || yDivisions <= y)
@@ -228,8 +228,8 @@ void applyCollision(Ball* b1, Ball* b2)
         return;
 
     // a few values to simplify the equations
-    const Vector2& normal = cInfo.normal;
-    const Vector2& point  = cInfo.point;
+    const Vector2& normal = cInfo.m_vecNormal;
+    const Vector2& point  = cInfo.m_vecPoint;
 
     float m1 = b1->mass;
     float m2 = b2->mass;
@@ -259,7 +259,7 @@ void applyCollision(Polygon* pPoly, Ball* pBall)
         return;
 
     float fCoR = pBall->CoR;
-    Vector2 vecNorm = cInfo.normal;
+    Vector2 vecNorm = cInfo.m_vecNormal;
 
     Vector2 vecVelo = pBall->velocityRaw();
 
@@ -273,8 +273,8 @@ void applyCollision(Polygon* pPoly, Ball* pBall)
     // CoR penetration fix, adds the jitters
 
     // from center to point
-    //Vector2 CollP = normal / normal.Length * Ball.Radius;
-    //Ball.Position = Info.Point + CollP;
+    Vector2 vecCollP = vecNorm / vecNorm.length() * pBall->radius;
+    pBall->applyNudge(cInfo.m_vecPoint + vecCollP - pBall->positionRaw());
 }
 
 bool getInfo(const Ball* b1, const Ball* b2, CollisionInfo* pcInfo)
@@ -289,10 +289,10 @@ bool getInfo(const Ball* b1, const Ball* b2, CollisionInfo* pcInfo)
     Vector2 v2 = b2->velocityRaw();
 
     // quick binding box check
-    if (p1.x - r1 > p2.x + r2
-     || p1.x + r1 < p2.x - r2
-     || p1.y - r1 > p2.y + r2
-     || p1.y + r1 < p2.y - r2)
+    if (p1.m_fX - r1 > p2.m_fX + r2
+     || p1.m_fX + r1 < p2.m_fX - r2
+     || p1.m_fY - r1 > p2.m_fY + r2
+     || p1.m_fY + r1 < p2.m_fY - r2)
         return false;
 
     // test if not touching
@@ -305,8 +305,8 @@ bool getInfo(const Ball* b1, const Ball* b2, CollisionInfo* pcInfo)
     if ((v1 - v2).dot(p1 - p2) >= 0)
         return false;
 
-    pcInfo->point   = p1 - (p1 - p2) * r1 / (r1 + r2);
-    pcInfo->normal  = p1 - p2;
+    pcInfo->m_vecPoint   = p1 - (p1 - p2) * r1 / (r1 + r2);
+    pcInfo->m_vecNormal  = p1 - p2;
 
     return true;
 }
@@ -318,14 +318,14 @@ bool getInfo(const Polygon* pPoly, const Ball* pBall, CollisionInfo* pcInfo)
     Vector2 vecPos  = pBall->positionRaw();
     Vector2 vecVelo = pBall->velocityRaw();
 
-    float fMaxX = pPoly->maxP.x;
-    float fMinX = pPoly->minP.x;
-    float fMaxY = pPoly->maxP.y;
-    float fMinY = pPoly->minP.y;
+    float fMaxX = pPoly->maxP.m_fX;
+    float fMinX = pPoly->minP.m_fX;
+    float fMaxY = pPoly->maxP.m_fY;
+    float fMinY = pPoly->minP.m_fY;
 
     // quick binding box check
-    if (vecPos.x - fRad > fMaxX || vecPos.x + fRad < fMinX ||
-        vecPos.y - fRad > fMaxY || vecPos.y + fRad < fMinY)
+    if (vecPos.m_fX - fRad > fMaxX || vecPos.m_fX + fRad < fMinX ||
+        vecPos.m_fY - fRad > fMaxY || vecPos.m_fY + fRad < fMinY)
         return false;
 
 
@@ -339,10 +339,10 @@ bool getInfo(const Polygon* pPoly, const Ball* pBall, CollisionInfo* pcInfo)
         for (unsigned int i = 0; i < num; i++)
         {
             Vector2 vec = vectorToLine(vecPos,
-                                       pts[i].x,
-                                       pts[i].y,
-                                       pts[(i + 1) % num].x,
-                                       pts[(i + 1) % num].y);
+                                       pts[i].m_fX,
+                                       pts[i].m_fY,
+                                       pts[(i + 1) % num].m_fX,
+                                       pts[(i + 1) % num].m_fY);
 
             if (vec.sqrLength() <= fRad*fRad && 0 < vec.dot(vecVelo))
             {
@@ -356,8 +356,8 @@ bool getInfo(const Polygon* pPoly, const Ball* pBall, CollisionInfo* pcInfo)
         return false;
 
 
-    pcInfo->point   = vecTotVec / iTot + vecPos;
-    pcInfo->normal  = vecPos - pcInfo->point;
+    pcInfo->m_vecPoint   = vecTotVec / iTot + vecPos;
+    pcInfo->m_vecNormal  = vecPos - pcInfo->m_vecPoint;
 
     return true;
 }