'nother music patch by matzeb
authorIngo Ruhnke <grumbel@gmx.de>
Sat, 24 Apr 2004 17:48:49 +0000 (17:48 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Sat, 24 Apr 2004 17:48:49 +0000 (17:48 +0000)
SVN-Revision: 686

src/leveleditor.cpp
src/menu.cpp
src/menu.h
src/resources.cpp
src/setup.cpp
src/sound.cpp
src/sound.h

index f79d877..29ca52b 100644 (file)
@@ -41,6 +41,7 @@
 #include "button.h"
 #include "tile.h"
 #include "resources.h"
+#include "music_manager.h"
 
 /* definitions to aid development */
 
@@ -170,6 +171,8 @@ int leveleditor(int levelnb)
 
   clearscreen(0, 0, 0);
   updatescreen();
+  
+  music_manager->halt_music();
 
   while (SDL_PollEvent(&event))
     {}
@@ -1221,6 +1224,8 @@ void le_testlevel()
   GameSession session("test",le_level, ST_GL_TEST);
   session.run();
 
+  music_manager->halt_music();
+
   Menu::set_current(leveleditor_menu);
   le_world.arrays_free();
   le_current_level->load_gfx();
index 49c28b7..b177878 100644 (file)
@@ -154,7 +154,7 @@ MenuItem::change_input(const  char *text_)
 /* Set ControlField a key */
 void Menu::get_controlfield_key_into_input(MenuItem *item)
 {
-switch(*item->int_p)
+  switch(*item->int_p)
   {
   case SDLK_UP:
     strcpy(item->input, "Up cursor");
@@ -602,6 +602,25 @@ Menu::draw()
     }
 }
 
+MenuItem&
+Menu::get_item_by_id(int id)
+{
+  for(std::vector<MenuItem>::iterator i = item.begin(); i != item.end(); ++i) {
+    if(i->id == id)
+      return *i;
+  }
+
+  assert(false);
+  static MenuItem dummyitem;
+  return dummyitem;
+}
+
+bool
+Menu::isToggled(int id)
+{
+  return get_item_by_id(id).toggled;
+}
+
 /* Check for menu event */
 void
 Menu::event(SDL_Event& event)
index 7855de7..ae56b0b 100644 (file)
@@ -171,6 +171,9 @@ public:
   int  check  ();
 
   MenuItem& get_item(int index) { return item[index]; }
+  MenuItem& get_item_by_id(int id);
+
+  bool isToggled(int id);
 
   void Menu::get_controlfield_key_into_input(MenuItem *item);
 
@@ -183,6 +186,8 @@ public:
 
   int get_width() const;
   int get_height() const;
+
+  bool is_toggled(int id) const;
 };
 
 extern Surface* checkbox;
index 163895e..3549212 100644 (file)
@@ -48,6 +48,7 @@ void loadshared()
 
   sprite_manager = new SpriteManager(datadir + "/supertux.strf");
   music_manager = new MusicManager();
+  music_manager->enable_music(use_music);
 
   /* Tuxes: */
   smalltux_star = sprite_manager->load("smalltux-star");
index 9bbda98..ee11108 100644 (file)
@@ -50,6 +50,7 @@
 #include "scene.h"
 #include "worldmap.h"
 #include "resources.h"
+#include "music_manager.h"
 
 #include "player.h"
 
@@ -394,13 +395,13 @@ void st_menu(void)
   options_menu->additem(MN_TOGGLE,"Fullscreen",use_fullscreen,0, MNID_FULLSCREEN);
   if(audio_device)
     {
-      options_menu->additem(MN_TOGGLE,"Sound     ",use_sound,0, MNID_SOUND);
-      options_menu->additem(MN_TOGGLE,"Music     ",use_music,0, MNID_MUSIC);
+      options_menu->additem(MN_TOGGLE,"Sound     ", use_sound,0, MNID_SOUND);
+      options_menu->additem(MN_TOGGLE,"Music     ", use_music,0, MNID_MUSIC);
     }
   else
     {
-      options_menu->additem(MN_DEACTIVE,"Sound     ",use_sound,0, MNID_SOUND);
-      options_menu->additem(MN_DEACTIVE,"Music     ",use_music,0, MNID_MUSIC);
+      options_menu->additem(MN_DEACTIVE,"Sound     ", false,0, MNID_SOUND);
+      options_menu->additem(MN_DEACTIVE,"Music     ", false,0, MNID_MUSIC);
     }
   options_menu->additem(MN_TOGGLE,"Show FPS  ",show_fps,0, MNID_SHOWFPS);
   options_menu->additem(MN_GOTO,"Key Setup",0,options_keys_menu);
@@ -517,31 +518,35 @@ void process_options_menu(void)
     {
     case MNID_OPENGL:
 #ifndef NOOPENGL
-      if(use_gl != options_menu->item[MNID_OPENGL].toggled)
+      if(use_gl != options_menu->isToggled(MNID_OPENGL))
         {
           use_gl = !use_gl;
           st_video_setup();
         }
 #else
-      options_menu->item[MNID_OPENGL].toggled = false;
+      options_menu->get_item_by_id(MNID_OPENGL).toggled = false;
 #endif
       break;
     case MNID_FULLSCREEN:
-      if(use_fullscreen != options_menu->item[MNID_FULLSCREEN].toggled)
+      if(use_fullscreen != options_menu->isToggled(MNID_FULLSCREEN))
         {
           use_fullscreen = !use_fullscreen;
           st_video_setup();
         }
       break;
     case MNID_SOUND:
-      if(use_sound != options_menu->item[MNID_SOUND].toggled)
+      if(use_sound != options_menu->isToggled(MNID_SOUND))
         use_sound = !use_sound;
       break;
     case MNID_MUSIC:
-      music_manager->enable_music(options_menu->item[MNID_MUSIC].toggled);
+      if(use_music != options_menu->isToggled(MNID_MUSIC))
+        {
+          use_music = !use_music;
+          music_manager->enable_music(use_music);
+        }
       break;
     case MNID_SHOWFPS:
-      if(show_fps != options_menu->item[MNID_SHOWFPS].toggled)
+      if(show_fps != options_menu->isToggled(MNID_SHOWFPS))
         show_fps = !show_fps;
       break;
     }
index fb8359c..0098cb0 100644 (file)
@@ -27,7 +27,6 @@
 bool use_sound = true;    /* handle sound on/off menu and command-line option */
 bool use_music = true;    /* handle music on/off menu and command-line option */
 bool audio_device = true; /* != 0: available and initialized */
-int current_music;
 
 char * soundfilenames[NUM_SOUNDS] = {
                                        "/sounds/jump.wav",
index b6640a6..0f75d60 100644 (file)
@@ -28,7 +28,7 @@
 
 /*global variable*/
 extern bool use_sound;           /* handle sound on/off menu and command-line option */
-extern bool use_music;           /* handle music on/off menu and command-line option */
+extern bool use_music;           /* handle music on/off menu and command-line */
 extern bool audio_device;        /* != 0: available and initialized */
 
 /* enum of different internal music types */