Bug 571: Take tilemap movement into account when handling unisolid tiles for collisio...
authorflorianf <florianf@837edb03-e0f3-0310-88ca-d4d4e8b29345>
Sun, 31 Jan 2010 22:50:40 +0000 (22:50 +0000)
committerflorianf <florianf@837edb03-e0f3-0310-88ca-d4d4e8b29345>
Sun, 31 Jan 2010 22:50:40 +0000 (22:50 +0000)
As Mathnerd314 has pointed out on IRC, checking (movement.y >= 0) is not
correct when the tilemap containing the unisolid tile is moving. In this case,
the relative speed should be considered.

Resolves #571.

git-svn-id: http://supertux.lethargik.org/svn/supertux/trunk/supertux@6303 837edb03-e0f3-0310-88ca-d4d4e8b29345

src/supertux/sector.cpp

index a4f4c47..611f36d 100644 (file)
@@ -1279,9 +1279,9 @@ Sector::collision_tilemap(collision::Constraints* constraints,
            * for south-slopes (which are solid when moving "down") and
            * north-slopes (which are solid when moving "up". "up" and "down" is
            * in quotation marks because because the slope's gradient is taken
-           * into account. This is more complex than just checking for (y > 0).
-           * --octo */
-          status = check_movement_unisolid (movement, tile);
+           * Also, this uses the movement relative to the tilemaps own movement
+           * (if any).  --octo */
+          status = check_movement_unisolid (movement - solids->get_movement (), tile);
           /* If zero is returned, the unisolid tile is non-solid. */
           if (status == 0)
             continue;