diff --git a/rwengine/src/audio/SoundManager.cpp b/rwengine/src/audio/SoundManager.cpp index cfc22418..677eb33b 100644 --- a/rwengine/src/audio/SoundManager.cpp +++ b/rwengine/src/audio/SoundManager.cpp @@ -10,6 +10,7 @@ extern "C" { #include "audio/alCheck.hpp" #include "engine/GameData.hpp" #include "engine/GameWorld.hpp" +#include "render/ViewCamera.hpp" #include @@ -274,6 +275,14 @@ void SoundManager::pause(bool p) { } } +void SoundManager::updateListenerTransform(const ViewCamera& currentCam) { + // @todo ShFil119 it should be improved + _engine->sound.setListenerPosition(currentCam.position); + _engine->sound.setListenerOrientation(glm::vec3( + currentCam.rotation.x, currentCam.rotation.y, currentCam.rotation.z)); + //world->sound.setListenerVelocity(glm::vec3()); +} + void SoundManager::setListenerPosition(const glm::vec3& position) { alListener3f(AL_POSITION, position.x, position.y, position.z); } diff --git a/rwengine/src/audio/SoundManager.hpp b/rwengine/src/audio/SoundManager.hpp index d129f863..6876daf6 100644 --- a/rwengine/src/audio/SoundManager.hpp +++ b/rwengine/src/audio/SoundManager.hpp @@ -19,6 +19,7 @@ #include class GameWorld; +class ViewCamera; /// Game's sound manager. /// It handles all stuff connected with sounds. @@ -75,6 +76,9 @@ public: void playMusic(const std::string& name); void stopMusic(const std::string& name); + /// Updating listener tranform, called by main loop of game. + void updateListenerTransform(const ViewCamera& currentCam); + /// Setting position of listener for openAL. void setListenerPosition(const glm::vec3& position); diff --git a/rwgame/RWGame.cpp b/rwgame/RWGame.cpp index 839fbba1..085d2a7a 100644 --- a/rwgame/RWGame.cpp +++ b/rwgame/RWGame.cpp @@ -601,6 +601,8 @@ void RWGame::render(float alpha, float time) { viewCam.frustum.fov *= viewCam.frustum.aspectRatio; } + world->sound.updateListenerTransform(viewCam); + glEnable(GL_DEPTH_TEST); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);