X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fsector.cpp;h=c340ddb5098c9e24410a3a59d2144e96e3afb698;hb=8bcdd6a1e7885a8280f999a750ba7a411414ccaf;hp=29a0aa1627a3295fecbc49e216149d33bd4bb44a;hpb=ceac6be3ec7208ba67d0a6d1cd6aa25d017ff396;p=supertux.git diff --git a/src/sector.cpp b/src/sector.cpp index 29a0aa162..c340ddb50 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -177,6 +177,9 @@ Sector::parse_object(const std::string& name, const lisp::Lisp& reader) void Sector::parse(const lisp::Lisp& sector) { + + TileMap::loading_worldmap = false; + bool has_background = false; lisp::ListIterator iter(§or); while(iter.next()) { @@ -236,6 +239,9 @@ Sector::parse(const lisp::Lisp& sector) void Sector::parse_old_format(const lisp::Lisp& reader) { + + TileMap::loading_worldmap = false; + name = "main"; reader.get("gravity", gravity); @@ -889,15 +895,18 @@ void check_collisions(collision::Constraints* constraints, if(!collision::intersects(r1, r2)) return; + MovingObject *moving_object = dynamic_cast (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 +1309,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);