fixed polygon penitration due to CoR
authorPatrik Gornicz <Gornicz.P@gmail.com>
Wed, 21 Jan 2009 15:59:49 +0000 (10:59 -0500)
committerPatrik Gornicz <Gornicz.P@gmail.com>
Wed, 21 Jan 2009 15:59:49 +0000 (10:59 -0500)
Makefile
src/Entities/PhysicsEntity.cpp
src/Entities/PhysicsEntity.h
src/collisionManager.cpp

index f3e6ad8..77463d3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -83,6 +83,8 @@ ${BLDDIRS}:
        ${Q1}${PRNTFMT} "mkdir" "$@"
        ${Q2}mkdir -p $@
 
+#${SRCSDIR}%.cpp: ${SRCSDIR}%.h
+
 # cause the below directory rules to work out
 .SECONDEXPANSION:
 
index 9daff3a..d42d271 100644 (file)
@@ -85,3 +85,8 @@ void PhysicsEntity::applyImpulse(const Vector2& impulse, const Vector2& at)
 {
     velocity += impulse;
 }
+
+void PhysicsEntity::applyNudge(const Vector2& vecPush)
+{
+    position += vecPush;
+}
index b4b5b9e..8e83266 100644 (file)
@@ -43,6 +43,8 @@ class PhysicsEntity: public Entity
     virtual void applyImpulse(const Vector2& impulse);
     virtual void applyImpulse(const Vector2& impulse, const Vector2& at);
 
+    virtual void applyNudge(const Vector2& vecPush);
+
   //protected:
     Vector2 force;
 
index 8aa2dc7..95a2193 100644 (file)
@@ -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.point + vecCollP - pBall->positionRaw());
 }
 
 bool getInfo(const Ball* b1, const Ball* b2, CollisionInfo* pcInfo)