Initial integration, lots of broken stuff
[supertux.git] / src / sector.cpp
index 29a0aa1..cd4276b 100644 (file)
@@ -28,7 +28,8 @@
 #include <float.h>
 #include <math.h>
 #include <limits>
-#include <physfs.h>
+//#include <physfs.h>
+#include <unison/vfs/FileSystem.hpp>
 
 #include "sector.hpp"
 #include "object/player.hpp"
@@ -245,7 +246,7 @@ Sector::parse_old_format(const lisp::Lisp& reader)
     if (backgroundimage == "arctis2.jpg") backgroundimage = "arctis.jpg";
     if (backgroundimage == "ocean.png") backgroundimage = "ocean.jpg";
     backgroundimage = "images/background/" + backgroundimage;
-    if (!PHYSFS_exists(backgroundimage.c_str())) {
+    if (!Unison::VFS::FileSystem::get().exists(backgroundimage)) {
       log_warning << "Background image \"" << backgroundimage << "\" not found. Ignoring." << std::endl;
       backgroundimage = "";
     }
@@ -889,15 +890,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 +1304,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);