- some more savegame stuff
[supertux.git] / src / gameloop.cpp
index ac275dc..bf0f903 100644 (file)
@@ -65,7 +65,7 @@ GameSession::GameSession(const std::string& filename)
   //assert(!"Don't call me");
   current_ = this;
 
-  world = new World; // &::global_world;
+  world = new World;
 
   fps_timer.init(true);
   frame_timer.init(true);
@@ -81,7 +81,7 @@ GameSession::GameSession(const std::string& subset_, int levelnb_, int mode)
 
   current_ = this;
 
-  world = new World; // &::global_world;
+  world = new World;
 
   fps_timer.init(true);
   frame_timer.init(true);
@@ -117,9 +117,6 @@ GameSession::GameSession(const std::string& subset_, int levelnb_, int mode)
 
   time_left.init(true);
   start_timers();
-
-  if(st_gl_mode == ST_GL_LOAD_GAME)
-    loadgame(levelnb);
 }
 
 GameSession::~GameSession()
@@ -130,20 +127,21 @@ GameSession::~GameSession()
 void
 GameSession::levelintro(void)
 {
-  Player& tux = *world->get_tux();
-
   char str[60];
   /* Level Intro: */
   clearscreen(0, 0, 0);
 
   sprintf(str, "LEVEL %d", levelnb);
-  text_drawf(&blue_text, str, 0, 200, A_HMIDDLE, A_TOP, 1);
+  blue_text->drawf(str, 0, 200, A_HMIDDLE, A_TOP, 1);
 
   sprintf(str, "%s", world->get_level()->name.c_str());
-  text_drawf(&gold_text, str, 0, 224, A_HMIDDLE, A_TOP, 1);
+  gold_text->drawf(str, 0, 224, A_HMIDDLE, A_TOP, 1);
 
-  sprintf(str, "TUX x %d", tux.lives);
-  text_drawf(&white_text, str, 0, 256, A_HMIDDLE, A_TOP, 1);
+  sprintf(str, "by %s", world->get_level()->author.c_str());
+  red_text->drawf(str, 0, 256, A_HMIDDLE, A_TOP, 1);
+  
+  sprintf(str, "TUX x %d", player_status.lives);
+  white_text->drawf(str, 0, 288, A_HMIDDLE, A_TOP, 1);
 
   flipscreen();
 
@@ -170,7 +168,7 @@ GameSession::process_events()
     {
       /* Check for menu-events, if the menu is shown */
       if(show_menu)
-        menu_event(event);
+        current_menu->event(event);
 
       switch(event.type)
         {
@@ -264,7 +262,7 @@ GameSession::process_events()
                 break;
               case SDLK_l:
                 if(debug_mode)
-                  --tux.lives;
+                  --player_status.lives;
                 break;
               case SDLK_s:
                 if(debug_mode)
@@ -372,7 +370,7 @@ GameSession::action(double frame_ratio)
 
           /* No more lives!? */
 
-          if (tux.lives < 0)
+          if (player_status.lives < 0)
             {
               if(st_gl_mode != ST_GL_TEST)
                 drawendscreen();
@@ -446,7 +444,7 @@ GameSession::draw()
           fillrect(i % 2 ? (pause_menu_frame * i)%screen->w : -((pause_menu_frame * i)%screen->w) ,(i*20+pause_menu_frame)%screen->h,screen->w,10,20,20,20, rand() % 20 + 1);
         }
       fillrect(0,0,screen->w,screen->h,rand() % 50, rand() % 50, rand() % 50, 128);
-      text_drawf(&blue_text, "PAUSE - Press 'P' To Play", 0, 230, A_HMIDDLE, A_TOP, 1);
+      blue_text->drawf("PAUSE - Press 'P' To Play", 0, 230, A_HMIDDLE, A_TOP, 1);
     }
 
   if(show_menu)
@@ -535,10 +533,6 @@ GameSession::run()
             {
               process_options_menu();
             }
-          else if(current_menu == save_game_menu )
-            {
-              process_save_game_menu();
-            }
           else if(current_menu == load_game_menu )
             {
               process_load_game_menu();
@@ -614,7 +608,7 @@ GameSession::run()
             }
 
         }
-      else
+      else if(tux.dying == DYING_NOT)
         tux.kill(KILL);
 
       /* Calculate frames per second */
@@ -655,47 +649,46 @@ void bumpbrick(float x, float y)
 void
 GameSession::drawstatus()
 {
-  Player& tux = *world->get_tux();
   char str[60];
 
   sprintf(str, "%d", player_status.score);
-  text_draw(&white_text, "SCORE", 0, 0, 1);
-  text_draw(&gold_text, str, 96, 0, 1);
+  white_text->draw("SCORE", 0, 0, 1);
+  gold_text->draw(str, 96, 0, 1);
 
   if(st_gl_mode != ST_GL_TEST)
     {
       sprintf(str, "%d", hs_score);
-      text_draw(&white_text, "HIGH", 0, 20, 1);
-      text_draw(&gold_text, str, 96, 20, 1);
+      white_text->draw("HIGH", 0, 20, 1);
+      gold_text->draw(str, 96, 20, 1);
     }
   else
     {
-      text_draw(&white_text,"Press ESC To Return",0,20,1);
+      white_text->draw("Press ESC To Return",0,20,1);
     }
 
   if (time_left.get_left() > TIME_WARNING || (global_frame_counter % 10) < 5)
     {
       sprintf(str, "%d", time_left.get_left() / 1000 );
-      text_draw(&white_text, "TIME", 224, 0, 1);
-      text_draw(&gold_text, str, 304, 0, 1);
+      white_text->draw("TIME", 224, 0, 1);
+      gold_text->draw(str, 304, 0, 1);
     }
 
   sprintf(str, "%d", player_status.distros);
-  text_draw(&white_text, "DISTROS", screen->h, 0, 1);
-  text_draw(&gold_text, str, 608, 0, 1);
+  white_text->draw("DISTROS", screen->h, 0, 1);
+  gold_text->draw(str, 608, 0, 1);
 
-  text_draw(&white_text, "LIVES", screen->h, 20, 1);
+  white_text->draw("LIVES", screen->h, 20, 1);
 
   if(show_fps)
     {
       sprintf(str, "%2.1f", fps_fps);
-      text_draw(&white_text, "FPS", screen->h, 40, 1);
-      text_draw(&gold_text, str, screen->h + 60, 40, 1);
+      white_text->draw("FPS", screen->h, 40, 1);
+      gold_text->draw(str, screen->h + 60, 40, 1);
     }
 
-  for(int i= 0; i < tux.lives; ++i)
+  for(int i= 0; i < player_status.lives; ++i)
     {
-      texture_draw(&tux_life,565+(18*i),20);
+      tux_life->draw(565+(18*i),20);
     }
 }
 
@@ -706,13 +699,13 @@ GameSession::drawendscreen()
 
   clearscreen(0, 0, 0);
 
-  text_drawf(&blue_text, "GAMEOVER", 0, 200, A_HMIDDLE, A_TOP, 1);
+  blue_text->drawf("GAMEOVER", 0, 200, A_HMIDDLE, A_TOP, 1);
 
   sprintf(str, "SCORE: %d", player_status.score);
-  text_drawf(&gold_text, str, 0, 224, A_HMIDDLE, A_TOP, 1);
+  gold_text->drawf(str, 0, 224, A_HMIDDLE, A_TOP, 1);
 
-  sprintf(str, "DISTROS: %d", player_status.distros);
-  text_drawf(&gold_text, str, 0, 256, A_HMIDDLE, A_TOP, 1);
+  sprintf(str, "COINS: %d", player_status.distros);
+  gold_text->drawf(str, 0, 256, A_HMIDDLE, A_TOP, 1);
 
   flipscreen();
   
@@ -727,13 +720,13 @@ GameSession::drawresultscreen(void)
 
   clearscreen(0, 0, 0);
 
-  text_drawf(&blue_text, "Result:", 0, 200, A_HMIDDLE, A_TOP, 1);
+  blue_text->drawf("Result:", 0, 200, A_HMIDDLE, A_TOP, 1);
 
   sprintf(str, "SCORE: %d", player_status.score);
-  text_drawf(&gold_text, str, 0, 224, A_HMIDDLE, A_TOP, 1);
+  gold_text->drawf(str, 0, 224, A_HMIDDLE, A_TOP, 1);
 
   sprintf(str, "DISTROS: %d", player_status.distros);
-  text_drawf(&gold_text, str, 0, 256, A_HMIDDLE, A_TOP, 1);
+  gold_text->drawf(str, 0, 256, A_HMIDDLE, A_TOP, 1);
 
   flipscreen();
   
@@ -741,100 +734,6 @@ GameSession::drawresultscreen(void)
   wait_for_event(event,2000,5000,true);
 }
 
-void
-GameSession::savegame(int)
-{
-#if 0
-  char savefile[1024];
-  FILE* fi;
-  unsigned int ui;
-
-  sprintf(savefile,"%s/slot%d.save",st_save_dir,slot);
-
-  fi = fopen(savefile, "wb");
-
-  if (fi == NULL)
-    {
-      fprintf(stderr, "Warning: I could not open the slot file ");
-    }
-  else
-    {
-      fputs(level_subset, fi);
-      fputs("\n", fi);
-      fwrite(&level,sizeof(int),1,fi);
-      fwrite(&score,sizeof(int),1,fi);
-      fwrite(&distros,sizeof(int),1,fi);
-      fwrite(&scroll_x,sizeof(float),1,fi);
-      //FIXME:fwrite(&tux,sizeof(Player),1,fi);
-      //FIXME:timer_fwrite(&tux.invincible_timer,fi);
-      //FIXME:timer_fwrite(&tux.skidding_timer,fi);
-      //FIXME:timer_fwrite(&tux.safe_timer,fi);
-      //FIXME:timer_fwrite(&tux.frame_timer,fi);
-      timer_fwrite(&time_left,fi);
-      ui = st_get_ticks();
-      fwrite(&ui,sizeof(int),1,fi);
-    }
-  fclose(fi);
-#endif 
-}
-
-void
-GameSession::loadgame(int)
-{
-#if 0
-  char savefile[1024];
-  char str[100];
-  FILE* fi;
-  unsigned int ui;
-
-  sprintf(savefile,"%s/slot%d.save",st_save_dir,slot);
-
-  fi = fopen(savefile, "rb");
-
-  if (fi == NULL)
-    {
-      fprintf(stderr, "Warning: I could not open the slot file ");
-
-    }
-  else
-    {
-      fgets(str, 100, fi);
-      strcpy(level_subset, str);
-      level_subset[strlen(level_subset)-1] = '\0';
-      fread(&level,sizeof(int),1,fi);
-
-      world->set_defaults();
-      world->get_level()->cleanup();
-      world->arrays_free();
-      world->get_level()->free_gfx();
-      world->get_level()->free_song();
-
-      if(world->get_level()->load(level_subset,level) != 0)
-        exit(1);
-
-      world->activate_bad_guys();
-      world->activate_particle_systems();
-      world->get_level()->load_gfx();
-      world->get_level()->load_song();
-
-      levelintro();
-      update_time = st_get_ticks();
-
-      fread(&score,   sizeof(int),1,fi);
-      fread(&distros, sizeof(int),1,fi);
-      fread(&scroll_x,sizeof(float),1,fi);
-      //FIXME:fread(&tux,     sizeof(Player), 1, fi);
-      //FIXME:timer_fread(&tux.invincible_timer,fi);
-      //FIXME:timer_fread(&tux.skidding_timer,fi);
-      //FIXME:timer_fread(&tux.safe_timer,fi);
-      //FIXME:timer_fread(&tux.frame_timer,fi);
-      timer_fread(&time_left,fi);
-      fread(&ui,sizeof(int),1,fi);
-      fclose(fi);
-    }
-#endif 
-}
-
 std::string slotinfo(int slot)
 {
   FILE* fi;