Fix for #453 (Menu frame lingers)
authorMiloš Klouček <m.kloucek.m@atlas.cz>
Wed, 29 Jul 2009 17:29:31 +0000 (17:29 +0000)
committerMiloš Klouček <m.kloucek.m@atlas.cz>
Wed, 29 Jul 2009 17:29:31 +0000 (17:29 +0000)
* moved "Menu::set_current(NULL);" before fadeout, so it closes during it
* added main_loop->has_no_pending_fadeout() to avoid reopening main menu during fadeouts.

SVN-Revision: 5906

src/game_session.cpp
src/levelintro.cpp
src/mainloop.cpp
src/mainloop.hpp
src/textscroller.cpp
src/title.cpp

index 168b33b..c0747e8 100644 (file)
@@ -420,7 +420,6 @@ GameSession::process_menu()
 void
 GameSession::setup()
 {
-  Menu::set_current(NULL);
   current_ = this;
 
   if(currentsector != Sector::current()) {
index 29660be..5662a30 100644 (file)
@@ -49,7 +49,6 @@ LevelIntro::~LevelIntro()
 void
 LevelIntro::setup()
 {
-  Menu::set_current(NULL);
 }
 
 void
index f291e28..0807a58 100644 (file)
@@ -115,6 +115,12 @@ MainLoop::get_speed() const
   return speed;
 }
 
+bool
+MainLoop::has_no_pending_fadeout() const
+{
+  return screen_fade.get() == NULL || screen_fade->done();
+}
+
 void
 MainLoop::draw_fps(DrawingContext& context, float fps_fps)
 {
@@ -232,7 +238,7 @@ void
 MainLoop::handle_screen_switch()
 {
   while( (next_screen.get() != NULL || nextpop) &&
-      (screen_fade.get() == NULL || screen_fade->done())) {
+      has_no_pending_fadeout()) {
     if(current_screen.get() != NULL) {
       current_screen->leave();
     }
index 6edb421..46e119a 100644 (file)
@@ -42,6 +42,7 @@ public:
   void quit(ScreenFade* fade = NULL);
   void set_speed(float speed);
   float get_speed() const;
+  bool has_no_pending_fadeout() const;
 
   /**
    * requests that a screenshot be taken after the next frame has been rendered
index 94a74ee..b460119 100644 (file)
@@ -88,7 +88,6 @@ void
 TextScroller::setup()
 {
   sound_manager->play_music(music);
-  Menu::set_current(NULL);
 }
 
 void
index b6d1f4a..724d1af 100644 (file)
@@ -422,6 +422,7 @@ TitleScreen::update(float elapsed_time)
           break;
 
         case MNID_CREDITS:
+          Menu::set_current(NULL);
           main_loop->push_screen(new TextScroller("credits.txt"),
                                  new FadeOut(0.5));
           break;
@@ -440,9 +441,9 @@ TitleScreen::update(float elapsed_time)
     }
   }
 
-  // reopen menu of user closed it (so that the app doesn't close when user
+  // reopen menu if user closed it (so that the app doesn't close when user
   // accidently hit ESC)
-  if(Menu::current() == 0) {
+  if(Menu::current() == 0 && main_loop->has_no_pending_fadeout()) {
     generate_main_menu();
     Menu::set_current(main_menu.get());
   }
@@ -451,6 +452,7 @@ TitleScreen::update(float elapsed_time)
 void
 TitleScreen::start_game()
 {
+  Menu::set_current(NULL);
   std::string basename = current_world->get_basedir();
   basename = basename.substr(0, basename.length()-1);
   std::string worlddirname = FileSystem::basename(basename);