# HG changeset patch # User nireco # Date 1228790811 0 # Node ID 7e6d373d8c98d5d652963bc91ff2df9fb249c6df # Parent 4f90d2c2d221a2596e14c174aad2bef8010a39f4 cleaned object-object collision detection in PhysicsWorld.cc:tick diff -r 4f90d2c2d221 -r 7e6d373d8c98 src/PhysicsWorld.cc --- a/src/PhysicsWorld.cc Tue Dec 09 02:37:02 2008 +0000 +++ b/src/PhysicsWorld.cc Tue Dec 09 02:46:51 2008 +0000 @@ -37,6 +37,7 @@ for (std::list::iterator i = objects.begin(); i != objects.end(); i++) { (*i)->tick(tick_length); } + // Object - object collision detection for (std::list::iterator i = objects.begin(); i != objects.end(); i++) { for (std::list::iterator j = i; j != objects.end(); j++) { if(i == j) @@ -50,32 +51,12 @@ } range_sum_sqr *= range_sum_sqr; bool collision = false; - Vector a1 = (*i)->getPreviousPosition(); Vector a2 = (*i)->getPosition(); - Vector b1 = (*j)->getPreviousPosition(); Vector b2 = (*j)->getPosition(); -/* if(a1 == a2) { - float d = abs(distancePointToLine(b1, b2, a1)); - if(d*d < range_sum_sqr) - collision = true; - } else if(b1 == b2) { - float d = abs(distancePointToLine(a1, a2, b1)); - if(d*d < range_sum_sqr) - collision = true; - } else {*/ - float db1 = distancePointToLine(a1, a2, b1); - float db2 = distancePointToLine(a1, a2, b2); - float da1 = distancePointToLine(b1, b2, a1); - float da2 = distancePointToLine(b1, b2, a2); - if(db1*db2 < 0 && da1*da2 < 0) { - // lines intersected -// collision = true; - } - float dab = (a2-b2).sqrLength(); - if(dab < range_sum_sqr) { - collision = true; - } -// } + float dab = (a2-b2).sqrLength(); + if(dab < range_sum_sqr) { + collision = true; + } if(collision) { (*i)->onCollision(a2, *j); (*j)->onCollision(b2, *i);