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:
parent
cf85cbbc8e
commit
f6960debcb
4 changed files with 14 additions and 14 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue