Upgrade to Squirrel 2.1.2 <http://squirrel-lang.org/>
[supertux.git] / src / sector.cpp
index 29a0aa1..57418fd 100644 (file)
@@ -889,15 +889,18 @@ void check_collisions(collision::Constraints* constraints,
   if(!collision::intersects(r1, r2))
     return;
 
+  MovingObject *moving_object = dynamic_cast<MovingObject*> (object);
   CollisionHit dummy;
   if(other != NULL && !other->collides(*object, dummy))
     return;
+  if(moving_object != NULL && !moving_object->collides(*other, dummy))
+    return;
 
   // calculate intersection
-  float itop = r1.get_bottom() - r2.get_top();
+  float itop    = r1.get_bottom() - r2.get_top();
   float ibottom = r2.get_bottom() - r1.get_top();
-  float ileft = r1.get_right() - r2.get_left();
-  float iright = r2.get_right() - r1.get_left();
+  float ileft   = r1.get_right() - r2.get_left();
+  float iright  = r2.get_right() - r1.get_left();
 
   if(fabsf(movement.y) > fabsf(movement.x)) {
     if(ileft < SHIFT_DELTA) {
@@ -1300,9 +1303,9 @@ Sector::handle_collisions()
         get_hit_normal(moving_object->dest, moving_object_2->dest,
                        hit, normal);
         if(!moving_object->collides(*moving_object_2, hit))
-          return;
+          continue;
         if(!moving_object_2->collides(*moving_object, hit))
-          return;
+          continue;
 
         moving_object->collision(*moving_object_2, hit);
         moving_object_2->collision(*moving_object, hit);