- memleak fix and menu fix from MatzeB
[supertux.git] / src / title.cpp
index 1700e44..96dca72 100644 (file)
@@ -62,7 +62,7 @@ static int frame;
 static unsigned int last_update_time;
 static unsigned int update_time;
 
-void display_credits();
+void display_text_file(char *filename);
 
 std::vector<st_subset> contrib_subsets;
 std::string current_contrib_subset;
@@ -79,7 +79,8 @@ void generate_contrib_menu()
     {
       st_subset subset;
       subset.load(level_subsets.item[i]);
-      contrib_menu->additem(MN_GOTO, subset.title.c_str(), i, contrib_subset_menu);
+      contrib_menu->additem(MN_GOTO, subset.title.c_str(), i,
+          contrib_subset_menu, i+1);
       contrib_subsets.push_back(subset);
     }
 
@@ -96,7 +97,7 @@ void check_contrib_menu()
   int index = contrib_menu->check();
   if (index != -1)
     {
-      index -= 2; // FIXME: Hack
+      index -= 1;
       if (index >= 0 && index <= int(contrib_subsets.size()))
         {
           if (current_subset != index)
@@ -117,7 +118,7 @@ void check_contrib_menu()
                 {
                   Level level;
                   level.load(subset.name, i);
-                  contrib_subset_menu->additem(MN_ACTION, level.name, 0, 0);
+                  contrib_subset_menu->additem(MN_ACTION, level.name, 0, 0, i);
                 }
               contrib_subset_menu->additem(MN_HL,"",0,0);      
               contrib_subset_menu->additem(MN_BACK, "Back", 0, 0);
@@ -135,9 +136,8 @@ void check_contrib_subset_menu()
   int index = contrib_subset_menu->check();
   if (index != -1)
     {
-      if (contrib_subset_menu->get_item(index).kind == MN_ACTION)
+      if (contrib_subset_menu->get_item_by_id(index).kind == MN_ACTION)
         {
-          index -= 1; // FIXME: Hack
           std::cout << "Sarting level: " << index << std::endl;
           GameSession session(current_contrib_subset, index, ST_GL_PLAY);
           session.run();
@@ -159,6 +159,8 @@ void draw_demo(GameSession* session, double frame_ratio)
   //World* world  = session->get_world();
   Level* plevel = session->get_level();
   Player* tux = session->get_world()->get_tux();
+
+  session->get_world()->play_music(LEVEL_MUSIC);
   
   /* FIXME:
   // update particle systems
@@ -186,14 +188,14 @@ void draw_demo(GameSession* session, double frame_ratio)
     }
 
   global_frame_counter++;
-  tux->key_event(SDLK_RIGHT,DOWN);
+  tux->key_event((SDLKey) keymap.right,DOWN);
   
   if(random_timer.check())
     {
       if(walking)
-        tux->key_event(SDLK_UP,UP);
+        tux->key_event((SDLKey) keymap.jump,UP);
       else
-        tux->key_event(SDLK_UP,DOWN);
+        tux->key_event((SDLKey) keymap.jump,DOWN);
     }
   else
     {
@@ -295,24 +297,24 @@ void title(void)
             {
               switch (main_menu->check())
                 {
-                case 0:
+                case MNID_STARTGAME:
                   // Start Game, ie. goto the slots menu
                   update_load_save_game_menu(load_game_menu);
                   break;
-                case 1:
+                case MNID_CONTRIB:
                   // Contrib Menu
                   puts("Entering contrib menu");
                   generate_contrib_menu();
                   break;
-                case 3:
+                case MNID_LEVELEDITOR:
                   leveleditor(1);
                   Menu::set_current(main_menu);
                   break;
-                case 4:
-                  display_credits();
+                case MNID_CREDITS:
+                  display_text_file("CREDITS");
                   Menu::set_current(main_menu);
                   break;
-                case 6:
+                case MNID_QUITMAINMENU:
                   Menu::set_current(0);
                   break;
                 }
@@ -353,7 +355,6 @@ void title(void)
       /* Pause: */
       frame++;
       SDL_Delay(25);
-
     }
   /* Free surfaces: */
 
@@ -366,7 +367,7 @@ void title(void)
 #define SCROLL  60
 #define ITEMS_SPACE 4
 
-void display_credits()
+void display_text_file(char *file)
 {
   int done;
   int scroll, speed;
@@ -378,7 +379,7 @@ void display_credits()
   string_list_type names;
   char filename[1024];
   string_list_init(&names);
-  sprintf(filename,"%s/CREDITS", datadir.c_str());
+  sprintf(filename,"%s/%s", datadir.c_str(), file);
   if((fi = fopen(filename,"r")) != NULL)
     {
       while(fgets(temp, sizeof(temp), fi) != NULL)
@@ -452,7 +453,9 @@ void display_credits()
 
       draw_background();
 
-      white_big_text->drawf("- Credits -", 0, screen->h-scroll, A_HMIDDLE, A_TOP, 2);
+      if (strcmp(file, "CREDITS") == 0)
+        white_big_text->drawf("- SuperTux " VERSION " -", 
+                              0, screen->h-scroll, A_HMIDDLE, A_TOP, 2);
 
       y = 0;
       for(int i = 0; i < length; i++)