1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-22 04:09:43 +00:00

Attach sound listener to the player head instead of camera

This commit is contained in:
scrawl 2014-12-08 23:26:09 +01:00
parent cf85cbbc8e
commit f6960debcb
4 changed files with 14 additions and 14 deletions

View file

@ -7,7 +7,6 @@
#include "../mwbase/environment.hpp" #include "../mwbase/environment.hpp"
#include "../mwbase/windowmanager.hpp" #include "../mwbase/windowmanager.hpp"
#include "../mwbase/soundmanager.hpp"
#include "../mwworld/ptr.hpp" #include "../mwworld/ptr.hpp"
#include "../mwworld/refdata.hpp" #include "../mwworld/refdata.hpp"
@ -120,15 +119,6 @@ namespace MWRender
setPosition(Ogre::Vector3(x,y,z)); setPosition(Ogre::Vector3(x,y,z));
} }
void Camera::updateListener()
{
Ogre::Vector3 pos = mCamera->getRealPosition();
Ogre::Vector3 dir = mCamera->getRealDirection();
Ogre::Vector3 up = mCamera->getRealUp();
MWBase::Environment::get().getSoundManager()->setListenerPosDir(pos, dir, up);
}
void Camera::update(float duration, bool paused) void Camera::update(float duration, bool paused)
{ {
if (mAnimation->upperBodyReady()) if (mAnimation->upperBodyReady())
@ -148,7 +138,6 @@ namespace MWRender
} }
} }
updateListener();
if (paused) if (paused)
return; return;

View file

@ -50,9 +50,6 @@ namespace MWRender
bool mVanityToggleQueued; bool mVanityToggleQueued;
bool mViewModeToggleQueued; bool mViewModeToggleQueued;
/// Updates sound manager listener data
void updateListener();
void setPosition(const Ogre::Vector3& position); void setPosition(const Ogre::Vector3& position);
void setPosition(float x, float y, float z); void setPosition(float x, float y, float z);

View file

@ -1560,6 +1560,8 @@ namespace MWWorld
updateWindowManager (); updateWindowManager ();
updateSoundListener();
if (!paused && mPlayer->getPlayer().getCell()->isExterior()) if (!paused && mPlayer->getPlayer().getCell()->isExterior())
{ {
ESM::Position pos = mPlayer->getPlayer().getRefData().getPosition(); ESM::Position pos = mPlayer->getPlayer().getRefData().getPosition();
@ -1567,6 +1569,17 @@ namespace MWWorld
} }
} }
void World::updateSoundListener()
{
Ogre::Vector3 playerPos = mPlayer->getPlayer().getRefData().getBaseNode()->getPosition();
const OEngine::Physic::PhysicActor *actor = mPhysEngine->getCharacter(getPlayerPtr().getRefData().getHandle());
if(actor) playerPos.z += 1.85*actor->getHalfExtents().z;
Ogre::Quaternion playerOrient = Ogre::Quaternion(Ogre::Radian(getPlayerPtr().getRefData().getPosition().rot[2]), Ogre::Vector3::NEGATIVE_UNIT_Z) *
Ogre::Quaternion(Ogre::Radian(getPlayerPtr().getRefData().getPosition().rot[0]), Ogre::Vector3::NEGATIVE_UNIT_X);
MWBase::Environment::get().getSoundManager()->setListenerPosDir(playerPos, playerOrient.yAxis(),
playerOrient.zAxis());
}
void World::updateWindowManager () void World::updateWindowManager ()
{ {
// inform the GUI about focused object // inform the GUI about focused object

View file

@ -109,6 +109,7 @@ namespace MWWorld
Ptr copyObjectToCell(const Ptr &ptr, CellStore* cell, ESM::Position pos, bool adjustPos=true); Ptr copyObjectToCell(const Ptr &ptr, CellStore* cell, ESM::Position pos, bool adjustPos=true);
void updateSoundListener();
void updateWindowManager (); void updateWindowManager ();
void performUpdateSceneQueries (); void performUpdateSceneQueries ();
void getFacedHandle(std::string& facedHandle, float maxDistance, bool ignorePlayer=true); void getFacedHandle(std::string& facedHandle, float maxDistance, bool ignorePlayer=true);