- turned gameloop into a class, in the hope to reduce some global variables in the...
authorIngo Ruhnke <grumbel@gmx.de>
Sat, 10 Apr 2004 20:26:13 +0000 (20:26 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Sat, 10 Apr 2004 20:26:13 +0000 (20:26 +0000)
SVN-Revision: 456

src/gameloop.cpp
src/gameloop.h
src/leveleditor.cpp
src/setup.cpp
src/supertux.cpp
src/worldmap.cpp

index d602d9d..3b8ceb2 100644 (file)
@@ -579,10 +579,8 @@ void game_draw(void)
 
 /* --- GAME LOOP! --- */
 
-int gameloop(const char * subset, int levelnb, int mode)
+GameSession::GameSession(const char * subset, int levelnb, int mode)
 {
-  int fps_cnt, jump, done;
-  timer_type fps_timer, frame_timer;
   timer_init(&fps_timer, true);
   timer_init(&frame_timer, true);
 
@@ -627,11 +625,18 @@ int gameloop(const char * subset, int levelnb, int mode)
 
   if(st_gl_mode == ST_GL_LOAD_GAME)
     loadgame(levelnb);
+}
 
-  /* --- MAIN GAME LOOP!!! --- */
+int
+GameSession::run()
+{
+  int  fps_cnt;
+  bool jump;
+  bool done;
 
+  /* --- MAIN GAME LOOP!!! --- */
   jump = false;
-  done = 0;
+  done = false;
   quit = 0;
   global_frame_counter = 0;
   game_pause = 0;
@@ -641,14 +646,12 @@ int gameloop(const char * subset, int levelnb, int mode)
   fps_cnt = 0;
 
   /* Clear screen: */
-
   clearscreen(0, 0, 0);
   updatescreen();
 
   /* Play music: */
   play_current_music();
 
-
   while (SDL_PollEvent(&event))
   {}
 
@@ -691,7 +694,7 @@ int gameloop(const char * subset, int levelnb, int mode)
                   break;
                 case 7:
                   st_pause_ticks_stop();
-                  done = 1;
+                  done = true;
                   break;
                 }
             }
index 6e940c4..542b7b1 100644 (file)
@@ -29,11 +29,16 @@ extern Level current_level;
 
 extern int game_started;
 
-/* Function prototypes: */
-class Tile;
+class GameSession
+{
+ private:
+    timer_type fps_timer, frame_timer;
+ public:
+  GameSession(const char * subset, int levelnb, int mode);
+  int run();
+};
 
 void  activate_bad_guys(Level* plevel);
-int   gameloop(const char * subset, int levelnb, int mode);
 void  savegame(int slot);
 void  loadgame(int slot);
 std::string slotinfo(int slot);
index f95e9b4..5f0fc83 100644 (file)
@@ -1186,7 +1186,10 @@ void le_change(float x, float y, int tm, unsigned int c)
 void le_testlevel()
 {
   le_current_level->save("test", le_level);
-  gameloop("test",le_level, ST_GL_TEST);
+  
+  GameSession session("test",le_level, ST_GL_TEST);
+  session.run();
+
   Menu::set_current(leveleditor_menu);
   arrays_free();
   le_current_level->load_gfx();
index 1e87b43..1e1b22b 100644 (file)
@@ -468,7 +468,9 @@ bool process_load_game_menu()
 
       if (tmp.length() == strlen("Slot X - Free"))
         { // Slot is free, so start a new game
-          gameloop("default", 1, ST_GL_PLAY);
+          GameSession session("default", 1, ST_GL_PLAY);
+          session.run();
+
           show_menu = true;
           Menu::set_current(main_menu);
         }
@@ -476,7 +478,9 @@ bool process_load_game_menu()
         { // Slot contains a level, so load it
           if (game_started)
             {
-              gameloop("default",slot - 1,ST_GL_LOAD_GAME);
+              GameSession session("default",slot - 1,ST_GL_LOAD_GAME);
+              session.run();
+
               show_menu = true;
               Menu::set_current(main_menu);
             }
index d43ca9e..5d90b61 100644 (file)
@@ -34,7 +34,8 @@ int main(int argc, char * argv[])
     }
   else if (level_startup_file)
     {
-      gameloop(level_startup_file, 1, ST_GL_LOAD_LEVEL_FILE);
+      GameSession session(level_startup_file, 1, ST_GL_LOAD_LEVEL_FILE);
+      session.run();
     }
   else
     {  
index 6c8d918..19db528 100644 (file)
@@ -417,8 +417,9 @@ WorldMap::update()
             {
               std::cout << "Enter the current level: " << i->name << std::endl;;
               halt_music();
-              gameloop(const_cast<char*>((datadir +  "levels/default/" + i->name).c_str()),
-                       1, ST_GL_LOAD_LEVEL_FILE);
+              GameSession session(const_cast<char*>((datadir +  "levels/default/" + i->name).c_str()),
+                                  1, ST_GL_LOAD_LEVEL_FILE);
+              session.run();
               play_music(song, 1);
               return;
             }