diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index e9df0738b..e37924088 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -96,7 +96,7 @@ public: void Play(float volume, float pitch); virtual void Stop(); virtual bool isPlaying(); - virtual void Update(MWWorld::Ptr ptr); + virtual void Update(const float *pos); }; class OpenAL_Sound : public Sound @@ -110,7 +110,7 @@ public: virtual void Stop(); virtual bool isPlaying(); - virtual void Update(MWWorld::Ptr ptr); + virtual void Update(const float *pos); }; @@ -234,9 +234,8 @@ bool OpenAL_SoundStream::isPlaying() return true; } -void OpenAL_SoundStream::Update(MWWorld::Ptr ptr) +void OpenAL_SoundStream::Update(const float *pos) { - const float *pos = ptr.getCellRef().pos.pos; alSource3f(Source, AL_POSITION, pos[0], pos[2], -pos[1]); alSource3f(Source, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(Source, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -271,9 +270,8 @@ bool OpenAL_Sound::isPlaying() return state==AL_PLAYING; } -void OpenAL_Sound::Update(MWWorld::Ptr ptr) +void OpenAL_Sound::Update(const float *pos) { - const float *pos = ptr.getCellRef().pos.pos; alSource3f(Source, AL_POSITION, pos[0], pos[2], -pos[1]); alSource3f(Source, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(Source, AL_VELOCITY, 0.0f, 0.0f, 0.0f); diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index 99be9dfeb..3b4736fd6 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -11,7 +11,7 @@ namespace MWSound { virtual void Stop() = 0; virtual bool isPlaying() = 0; - virtual void Update(MWWorld::Ptr ptr) = 0; + virtual void Update(const float *pos) = 0; public: virtual ~Sound() { } diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index a603763e5..650c8f0d9 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -358,7 +358,8 @@ namespace MWSound IDMap::iterator iditer = snditer->second.begin(); while(iditer != snditer->second.end()) { - iditer->second->Update(ptr); + const ESM::Position &pos = ptr.getCellRef().pos; + iditer->second->Update(pos.pos); iditer++; } }