Add code to play main_menu.ogg in main menu
authorRealBadAngel <mk@realbadangel.pl>
Wed, 1 May 2013 11:09:10 +0000 (13:09 +0200)
committerPilzAdam <pilzadam@minetest.net>
Sat, 11 May 2013 13:39:38 +0000 (15:39 +0200)
src/main.cpp

index e2ea192953d0e88b650bc0d4f586375841a71881..56cb310ca9864ce5bde4e2e37638b2f3c447fc82 100644 (file)
@@ -76,6 +76,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "subgame.h"
 #include "quicktune.h"
 #include "serverlist.h"
+#include "sound.h"
+#include "sound_openal.h"
 
 /*
        Settings.
@@ -200,7 +202,49 @@ u32 getTime(TimePrecision prec) {
                return 0;
        return g_timegetter->getTime(prec);
 }
+#endif
+
+//Client side main menu music fetcher
+#ifndef SERVER
+class MenuMusicFetcher: public OnDemandSoundFetcher
+{
+       std::set<std::string> m_fetched;
+public:
 
+       void fetchSounds(const std::string &name,
+                       std::set<std::string> &dst_paths,
+                       std::set<std::string> &dst_datas)
+       {
+               if(m_fetched.count(name))
+                       return;
+               m_fetched.insert(name);
+               std::string base;
+               base = porting::path_share + DIR_DELIM + "sounds";
+               dst_paths.insert(base + DIR_DELIM + name + ".ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".0.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".1.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".2.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".3.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".4.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".5.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".6.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".7.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".8.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".9.ogg");
+               base = porting::path_user + DIR_DELIM + "sounds";
+               dst_paths.insert(base + DIR_DELIM + name + ".ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".0.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".1.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".2.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".3.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".4.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".5.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".6.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".7.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".8.ogg");
+               dst_paths.insert(base + DIR_DELIM + name + ".9.ogg");
+               }
+};
 #endif
 
 class StderrLogOutput: public ILogOutput
@@ -1776,6 +1820,16 @@ int main(int argc, char *argv[])
                                        // Time is in milliseconds, for clouds
                                        u32 lasttime = device->getTimer()->getTime();
 
+                                       MenuMusicFetcher soundfetcher;
+                                       ISoundManager *sound = NULL;
+                                       sound = createOpenALSoundManager(&soundfetcher);
+                                       if(!sound)
+                                               sound = &dummySoundManager;
+                                       SimpleSoundSpec spec;
+                                       spec.name = "main_menu";
+                                       spec.gain = 1;
+                                       s32 handle = sound->playSound(spec, true);
+
                                        infostream<<"Created main menu"<<std::endl;
 
                                        while(device->run() && kill == false)
@@ -1857,7 +1911,12 @@ int main(int argc, char *argv[])
                                                        sleep_ms(25);
                                                }
                                        }
-                                       
+                                       sound->stopSound(handle);
+                                       if(sound != &dummySoundManager){
+                                               delete sound;
+                                               sound = NULL;
+                                       }
+
                                        infostream<<"Dropping main menu"<<std::endl;
 
                                        menu->drop();