]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/sound_openal.cpp
Lua API for playing sounds
[dragonfireclient.git] / src / sound_openal.cpp
index 4f056888b0dd56035843cdbbafabf89e1a82d500..26ad6fa4ce2ffb12d995b1a2be11e75aaae180a1 100644 (file)
@@ -454,6 +454,8 @@ class OpenALSoundManager: public ISoundManager
        int playSound(const std::string &name, bool loop, float volume)
        {
                maintain();
+               if(name == "")
+                       return 0;
                SoundBuffer *buf = getFetchBuffer(name);
                if(!buf){
                        infostream<<"OpenALSoundManager: \""<<name<<"\" not found."
@@ -465,6 +467,8 @@ class OpenALSoundManager: public ISoundManager
        int playSoundAt(const std::string &name, bool loop, float volume, v3f pos)
        {
                maintain();
+               if(name == "")
+                       return 0;
                SoundBuffer *buf = getFetchBuffer(name);
                if(!buf){
                        infostream<<"OpenALSoundManager: \""<<name<<"\" not found."
@@ -478,6 +482,24 @@ class OpenALSoundManager: public ISoundManager
                maintain();
                deleteSound(sound);
        }
+       bool soundExists(int sound)
+       {
+               maintain();
+               return (m_sounds_playing.count(sound) != 0);
+       }
+       void updateSoundPosition(int id, v3f pos)
+       {
+               std::map<int, PlayingSound*>::iterator i =
+                               m_sounds_playing.find(id);
+               if(i == m_sounds_playing.end())
+                       return;
+               PlayingSound *sound = i->second;
+
+               alSourcei(sound->source_id, AL_SOURCE_RELATIVE, false);
+               alSource3f(sound->source_id, AL_POSITION, pos.X, pos.Y, pos.Z);
+               alSource3f(sound->source_id, AL_VELOCITY, 0, 0, 0);
+               alSourcef(sound->source_id, AL_REFERENCE_DISTANCE, 30.0);
+       }
 };
 
 ISoundManager *createOpenALSoundManager(OnDemandSoundFetcher *fetcher)