From: Ryan Flegel Date: Wed, 5 May 2004 02:59:27 +0000 (+0000) Subject: - fixed the part of backscrolling that a broke. Backscrolling still needs some work. X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=d6f221b10e5c32a889c7dea603e89fb5abc68841;p=supertux.git - fixed the part of backscrolling that a broke. Backscrolling still needs some work. SVN-Revision: 988 --- diff --git a/src/world.cpp b/src/world.cpp index 83fd424ac..704534062 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -320,25 +320,51 @@ void World::scrolling(double frame_ratio) { int tux_pos_x = (int)(tux.base.x + (tux.base.width/2)); - if(tux.old_dir != tux.dir && (level->back_scrolling || debug_mode)) - scrolling_timer.start(CHANGE_DIR_SCROLL_SPEED); - - if(scrolling_timer.check()) + if (level->back_scrolling || debug_mode) + { + if(tux.old_dir != tux.dir && level->back_scrolling) + scrolling_timer.start(CHANGE_DIR_SCROLL_SPEED); + + if(scrolling_timer.check()) { - float final_scroll_x; - if (tux.physic.get_velocity_x() > 0) - final_scroll_x = tux_pos_x - (screen->w - X_SPACE); - else if (tux.physic.get_velocity_x() < 0) - final_scroll_x = tux_pos_x - X_SPACE; + float final_scroll_x; + if (tux.physic.get_velocity_x() > 0) + final_scroll_x = tux_pos_x - (screen->w - X_SPACE); + else if (tux.physic.get_velocity_x() < 0) + final_scroll_x = tux_pos_x - X_SPACE; + else + { + if (tux.dir == RIGHT) + final_scroll_x = tux_pos_x - (screen->w - X_SPACE); + else if (tux.dir == LEFT && level->back_scrolling) + final_scroll_x = tux_pos_x - X_SPACE; + } + + scroll_x += (final_scroll_x - scroll_x) / (frame_ratio * (CHANGE_DIR_SCROLL_SPEED / 100)); + // std::cerr << tux_pos_x << " " << final_scroll_x << " " << scroll_x << std::endl; - scroll_x += ((final_scroll_x - scroll_x) / (CHANGE_DIR_SCROLL_SPEED)) * frame_ratio; } + else + { + if (tux.physic.get_velocity_x() > 0 && scroll_x < tux_pos_x - (screen->w - X_SPACE)) + scroll_x = tux_pos_x - (screen->w - X_SPACE); + else if (tux.physic.get_velocity_x() < 0 && scroll_x > tux_pos_x - X_SPACE && level->back_scrolling) + scroll_x = tux_pos_x - X_SPACE; + else + { + if (tux.dir == RIGHT && scroll_x < tux_pos_x - (screen->w - X_SPACE)) + scroll_x = tux_pos_x - (screen->w - X_SPACE); + else if (tux.dir == LEFT && scroll_x > tux_pos_x - X_SPACE && level->back_scrolling) + scroll_x = tux_pos_x - X_SPACE; + } + } + } - else + else /*no debug*/ { if (tux.physic.get_velocity_x() > 0 && scroll_x < tux_pos_x - (screen->w - X_SPACE)) scroll_x = tux_pos_x - (screen->w - X_SPACE); - else if (tux.physic.get_velocity_x() < 0 && scroll_x > tux_pos_x - X_SPACE && (level->back_scrolling || debug_mode)) + else if (tux.physic.get_velocity_x() < 0 && scroll_x > tux_pos_x - X_SPACE && level->back_scrolling) scroll_x = tux_pos_x - X_SPACE; }