1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-21 09:39:56 +00:00

Avoid unnecessarily friending classes

This commit is contained in:
Chris Robinson 2015-11-26 09:11:52 -08:00
parent 7cc950ed64
commit fc912b135f
2 changed files with 22 additions and 23 deletions

View File

@ -7,8 +7,6 @@ namespace MWSound
{ {
class Sound class Sound
{ {
virtual void update() = 0;
Sound& operator=(const Sound &rhs); Sound& operator=(const Sound &rhs);
Sound(const Sound &rhs); Sound(const Sound &rhs);
@ -20,19 +18,31 @@ namespace MWSound
float mMinDistance; float mMinDistance;
float mMaxDistance; float mMaxDistance;
int mFlags; int mFlags;
float mFadeOutTime; float mFadeOutTime;
public: public:
virtual void stop() = 0; virtual void stop() = 0;
virtual bool isPlaying() = 0; virtual bool isPlaying() = 0;
virtual double getTimeOffset() = 0; virtual double getTimeOffset() = 0;
virtual void update() = 0;
void setPosition(const osg::Vec3f &pos) { mPos = pos; } void setPosition(const osg::Vec3f &pos) { mPos = pos; }
void setVolume(float volume) { mVolume = volume; } void setVolume(float volume) { mVolume = volume; }
void setFadeout(float duration) { mFadeOutTime=duration; } void setBaseVolume(float volume) { mBaseVolume = volume; }
void setFadeout(float duration) { mFadeOutTime = duration; }
void updateFade(float duration)
{
if(mFadeOutTime > 0.0f)
{
float soundDuration = std::min(duration, mFadeOutTime);
mVolume *= (mFadeOutTime-soundDuration) / mFadeOutTime;
mFadeOutTime -= soundDuration;
}
}
MWBase::SoundManager::PlayType getPlayType() const MWBase::SoundManager::PlayType getPlayType() const
{ return (MWBase::SoundManager::PlayType)(mFlags&MWBase::SoundManager::Play_TypeMask); } { return (MWBase::SoundManager::PlayType)(mFlags&MWBase::SoundManager::Play_TypeMask); }
bool getDistanceCull() const { return mFlags&MWBase::SoundManager::Play_RemoveAtDistance; }
Sound(const osg::Vec3f& pos, float vol, float basevol, float pitch, float mindist, float maxdist, int flags) Sound(const osg::Vec3f& pos, float vol, float basevol, float pitch, float mindist, float maxdist, int flags)
: mPos(pos) : mPos(pos)
@ -42,12 +52,9 @@ namespace MWSound
, mMinDistance(mindist) , mMinDistance(mindist)
, mMaxDistance(maxdist) , mMaxDistance(maxdist)
, mFlags(flags) , mFlags(flags)
, mFadeOutTime(0) , mFadeOutTime(0.0f)
{ } { }
virtual ~Sound() { } virtual ~Sound() { }
friend class OpenAL_Output;
friend class SoundManager;
}; };
} }

View File

@ -828,10 +828,9 @@ namespace MWSound
const osg::Vec3f objpos(pos.asVec3()); const osg::Vec3f objpos(pos.asVec3());
sound->setPosition(objpos); sound->setPosition(objpos);
if((sound->mFlags&Play_RemoveAtDistance)) if(sound->getDistanceCull())
{ {
osg::Vec3f diff = mListenerPos - ptr.getRefData().getPosition().asVec3(); if((mListenerPos - objpos).length2() > 2000*2000)
if(diff.length2() > 2000*2000)
sound->stop(); sound->stop();
} }
} }
@ -839,15 +838,8 @@ namespace MWSound
if(!sound->isPlaying()) if(!sound->isPlaying())
return false; return false;
// Update fade out sound->updateFade(duration);
if(sound->mFadeOutTime > 0.0f)
{
float soundDuration = duration;
if(soundDuration > sound->mFadeOutTime)
soundDuration = sound->mFadeOutTime;
sound->setVolume(sound->mVolume - soundDuration/sound->mFadeOutTime*sound->mVolume);
sound->mFadeOutTime -= soundDuration;
}
sound->update(); sound->update();
return true; return true;
} }
@ -885,7 +877,7 @@ namespace MWSound
for(;sndidx != snditer->second.end();++sndidx) for(;sndidx != snditer->second.end();++sndidx)
{ {
MWBase::SoundPtr sound = sndidx->first; MWBase::SoundPtr sound = sndidx->first;
sound->mBaseVolume = volumeFromType(sound->getPlayType()); sound->setBaseVolume(volumeFromType(sound->getPlayType()));
sound->update(); sound->update();
} }
} }
@ -893,12 +885,12 @@ namespace MWSound
for(;sayiter != mActiveSaySounds.end();++sayiter) for(;sayiter != mActiveSaySounds.end();++sayiter)
{ {
MWBase::SoundPtr sound = sayiter->second.first; MWBase::SoundPtr sound = sayiter->second.first;
sound->mBaseVolume = volumeFromType(sound->getPlayType()); sound->setBaseVolume(volumeFromType(sound->getPlayType()));
sound->update(); sound->update();
} }
if(mMusic) if(mMusic)
{ {
mMusic->mBaseVolume = volumeFromType(mMusic->getPlayType()); mMusic->setBaseVolume(volumeFromType(mMusic->getPlayType()));
mMusic->update(); mMusic->update();
} }
mOutput->finishUpdate(); mOutput->finishUpdate();